多交叉依赖Python开发包项目结构选型咨询(Conda+Python3.10+VSCode)
最优项目结构与开发流程方案
一、Monorepo(单仓库多包)项目结构
将所有独立包放在同一Git仓库下,既保留各包的独立性,又方便统一管理,结构示例:
my-project/ ├── .git/ ├── conda_env.yml ├── packages/ │ ├── my-utils/ │ │ ├── pyproject.toml # 或 setup.py,声明包信息与依赖 │ │ └── my_utils/ # 包源码目录 │ │ ├── __init__.py │ │ └── helpers.py │ ├── my-database/ │ │ ├── pyproject.toml │ │ └── my_database/ │ │ ├── __init__.py │ │ └── connectors.py │ └── my-main-app/ │ ├── pyproject.toml │ └── my_main_app/ │ ├── __init__.py │ └── main.py
每个子包的配置文件(如pyproject.toml)中正常声明交叉依赖,比如my-database的依赖项里写my-utils = "*"即可。
二、开发阶段依赖管理:可编辑安装
使用pip的-e(可编辑)模式安装所有子包,修改源码后无需重新安装即可生效,彻底规避版本升级的繁琐:
- 激活你的Conda环境:
conda activate your-env - 一次性安装所有子包(或逐个进入子包目录执行):
pip install -e ./packages/my-utils -e ./packages/my-database -e ./packages/my-main-app
此模式下,所有包会以“软链接”形式关联到Conda环境,修改任意包的代码,依赖它的其他包能立即获取最新变更。
三、VSCode配置优化
- 工作区设置:在项目根目录创建
.vscode/settings.json,指定Conda环境解释器并添加包路径,确保VSCode能识别跨包依赖:
{ "python.pythonPath": "/path/to/your/conda/env/bin/python", "python.analysis.extraPaths": [ "${workspaceFolder}/packages/my-utils", "${workspaceFolder}/packages/my-database", "${workspaceFolder}/packages/my-main-app" ] }
- 多包调试:在
.vscode/launch.json中配置调试目标,直接指向主应用或子包的入口文件,VSCode会自动识别跨包代码的调试断点。
四、Conda环境统一管理
在项目根目录创建conda_env.yml,统一声明Python版本、基础依赖和可编辑包,方便快速搭建一致环境:
name: my-project-env channels: - defaults dependencies: - python=3.10 - pip - pip: - -e ./packages/my-utils - -e ./packages/my-database - -e ./packages/my-main-app
执行conda env create -f conda_env.yml即可一键创建包含所有可编辑包的开发环境。
五、未来打包与发布
当某个包稳定后,只需修改其pyproject.toml中的版本号,用build工具打包成wheel或sdist格式,发布到PyPI或私有仓库即可。其他新项目可直接通过pip install my-utils==x.y.z导入,完全不影响开发阶段的灵活度。
内容的提问来源于stack exchange,提问作者stevew
相关产品推荐
相关产品推荐

