基于pyproject.toml的项目如何自动安装本地子模块依赖?
解决Setuptools项目自动安装Git子模块依赖的问题
直接通过pyproject.toml配置实现需求
不需要环境变量,直接使用相对路径配置本地依赖即可。在项目根目录的pyproject.toml中,找到[project]下的dependencies字段,添加以下内容:
[project] # 其他配置... dependencies = [ # 你的其他依赖 "dependency_lib @ ./dependency_lib" ]
如果希望dependency_lib也以可编辑模式安装(修改子模块代码时无需重新安装),可以改成:
"dependency_lib @ -e ./dependency_lib"
注意事项
- 确保Git子模块已初始化:执行
git submodule update --init --recursive拉取完整的dependency_lib代码,否则pip找不到该目录。 - 执行
pip install .或pip install -e .时,必须在项目根目录(project_root)下运行,相对路径才会生效。
更优的项目结构方案
如果长期维护这个依赖关系,可考虑以下调整让依赖管理更清晰:
- 命名空间子包方案:若两个包属于同一命名空间(比如
myproject.dependency_lib和myproject.package_name),修改dependency_lib的pyproject.toml,将name设置为带命名空间的格式,然后在主项目的[tool.setuptools.packages.find]中开启namespace_packages支持,Setuptools会自动识别并安装子包。此方案适合你有权限修改dependency_lib配置的场景。 - requirements辅助管理:若
pyproject.toml配置不够灵活,可在项目根目录创建requirements-dev.txt,添加-e ./dependency_lib,安装时执行pip install -r requirements-dev.txt -e .,但这种方式不如直接在pyproject.toml中配置统一。
内容的提问来源于stack exchange,提问作者Valeria
相关产品推荐
相关产品推荐

