Python项目结构问题:utils.py和log.py应该如何组织放置?

比如

main.py

human/ white_people.py black_people.py

animals/ cat.py dog.py

log.py utils.py

如果 human 里的文件和 animals 里面的文件都想用 utils.py 或者 log.py,那就得向上级引用,有人说是设计不合理

各位怎么处理这个问题的


Python项目结构问题:utils.py和log.py应该如何组织放置?

10 回复

帖子回复:

这问题很常见,其实没绝对标准,主要看项目规模和复杂度。我一般这么干:

1. 小型项目/脚本 直接放根目录就行,简单明了。

my_project/
├── utils.py
├── log.py
└── main.py

2. 中型项目 建个 corelib 目录集中放通用模块。

my_project/
├── core/
│   ├── __init__.py
│   ├── utils.py
│   └── log.py
├── main.py
└── ...

3. 大型项目 按功能拆分,比如把日志相关独立成包。

my_project/
├── utils/           # 工具包
│   ├── __init__.py
│   ├── file_utils.py
│   └── data_utils.py
├── logging/         # 日志包  
│   ├── __init__.py
│   ├── config.py
│   └── handlers.py
└── ...

关键点:

  • 如果 utils.py 超过400行就该拆分了
  • 日志模块通常独立,方便统一配置
  • 保持 __init__.py 干净,控制导入暴露的接口

实用建议: 按功能拆分比按类型拆分更可持续。

看错…


你说得没错,就是要弄成 package ,这样 submodule 之间就能互相引用了。

细则参考
https://docs.python.org/2/tutorial/modules.html#intra-package-references

absolute import

```python
# dog.py
from package.log import Logger
from package.utils import clean_dog_shit

不要用相对路径,不然之后调整结构很麻烦,统一从项目根目录开始 import ,然后开发的时候把项目根目录加到 python 模块搜索路径

忘了说了, py2 还得
from future import absolute_import

决策背景和最佳实践参见 PEP 328
https://www.python.org/dev/peps/pep-0328/#rationale-for-absolute-imports

自己建了一个 libs 库

试试 cockiecutter

aimee/
├── init.py
├── app.py
├── common – log
├── config.py
├── handlers
├── model
├── static
└── templates

回到顶部