构建Python包时,子模块与子包导入的最佳实践是什么?
Python包开发:子模块/子包导入的最佳实践
核心解决方案:开发模式安装(Editable Install)
这是适配开发阶段代码同步需求的标准方案,完美解决你提到的痛点:
- 执行命令:在包的根目录(包含
setup.py或pyproject.toml的目录)运行pip install -e . - 作用:会在
site-packages中创建指向本地源码目录的符号链接(而非复制代码),修改本地源码后无需重新安装,导入时直接读取最新代码,同时Git可正常追踪原始目录。
规范包结构配合
确保你的包结构符合Python标准示例:
your_package/ ├── pyproject.toml # 推荐替代setup.py的现代Python包配置文件 ├── your_package/ │ ├── __init__.py # 标记为Python包 │ ├── module1.py │ └── libraries/ │ ├── __init__.py │ ├── sub_module1.py │ └── sub_module2.py └── tests/
- 根目录下的
your_package是主包目录,内部libraries为子包 - 导入时使用规范的绝对导入:
# 在module1.py中导入子包模块 from your_package.libraries import sub_module1 # 或指定具体函数 from your_package.libraries.sub_module2 import some_function
临时替代方案(不推荐长期使用)
如果暂时不想用开发安装,可在项目根目录创建dev_setup.py(无需提交Git),内容如下:
import sys from pathlib import Path # 将项目根目录添加到sys.path sys.path.insert(0, str(Path(__file__).parent))
在需要运行的脚本开头导入该文件即可:
import dev_setup from your_package.libraries import sub_module1
此方式仅作临时过渡,规范度远不如开发模式安装。
内容的提问来源于stack exchange,提问作者Ohad
相关产品推荐
相关产品推荐

