理解 Python 项目的通用结构对于初学者来说非常重要。虽然每个项目可能略有不同,大多数规范、可维护的 Python 项目都遵循一些常见的组织模式。
常见的项目结构如下:
my_project/ # 项目根目录
├── my_package/ # 主要 Python 包(模块集合)
│ ├── __init__.py # 标识这是一个 Python 包
│ ├── core.py # 核心逻辑
│ ├── utils.py # 工具函数
│ └── ... # 其他模块
├── tests/ # 单元测试目录
│ ├── __init__.py
│ ├── test_core.py
│ └── test_utils.py
├── docs/ # 文档(可选)
├── examples/ # 使用示例(可选)
├── requirements.txt # 依赖列表
├── setup.py 或 pyproject.toml # 项目打包配置(二选一)
├── README.md # 项目说明
├── .gitignore # Git 忽略文件
└── .env 或 config/ # 配置文件(如数据库连接、API 密钥等)
各部分详解
1. my_package/ —— 主代码包
- 这是你实际编写业务逻辑的地方。
- 文件名应使用小写 + 下划线(如
data_loader.py)。 __init__.py可以为空,也可以用来控制from my_package import *时导出哪些内容。
小知识:
在 Python 中,一个目录如果包含
__init__.py文件(哪怕为空),就被视为一个包 package。当你写
from my_package import *时,Python 默认会导入该包中所有'公开'的名字(即不以下划线开头的变量、函数、类等)。我们可以通过在
__init__.py中定义一个特殊变量__all__来显式指定哪些内容可以被import *导入。例如:
core.py中有函数:process_data()utils.py中有函数:log_info()和internal_helper()你想让from my_package import *只导入process_data和log_info,那么就在my_package/__init__.py中写:__all__ = ['process_data', 'log_info']注意:
__all__只影响import *的行为,不影响from my_package import process_data这种明确导入方式。


