Python中多个本地项目如何共用模块?

例如,

项目 A projectA 项目 B projectB

中有相同的模块 C,现在想拆分一个 projectC 出来,以减少代码冗余。

项目都是通过 pip 管理的依赖包的,但是把 projectC 发布到 PyPI 不太合适。


想到的解决方法是,参考 maven 私库,弄个内部服务器,但还是觉得比较麻烦。

还有更好的解决方法吗?


Python中多个本地项目如何共用模块?
11 回复

pip 支持从 VCS 安装,把 project c 本地打包,上传到公司的 VCS 上,
install 时候带相应参数及 VCS 地址就行

http://pip-cn.readthedocs.io/en/latest/reference/pip_install.html#vcs-support


核心方案:使用相对路径或设置 PYTHONPATH 环境变量。

最直接的方式是在项目中使用相对导入。假设你有这样的目录结构:

projects/
├── common_utils/
│   ├── __init__.py
│   └── helper.py
└── project_a/
    └── main.py

project_a/main.py 中,你可以通过相对路径导入 common_utils

import sys
sys.path.append('../common_utils')
from helper import some_function

或者更规范的做法是设置 PYTHONPATH。在终端中运行:

export PYTHONPATH="/path/to/projects/common_utils:$PYTHONPATH"

之后在任何项目中都可以直接 import helper

另一种常见做法是将共用模块打包成独立的包,通过 pip install -e . 以可编辑模式安装到本地环境。这样所有项目都能像使用标准库一样导入它。

总结:用相对导入或设置 PYTHONPATH 最快捷。

1.PYTHONPATH 2.封装成私有依赖包(放到 git remote repo 就可以了) 3.封装成服务

难道是 共用一个数据库模型?

git 子模块。
或者打包成包,自己搭建一个私有 pip 源,然后发布上去。

不涉及业务的一般都发到 Pypi 上了

自己搭一个 pypi-server (炒鸡简单) ,然后在需要拉取的机器上修改 ~/.pip/pip.conf

[global]
index-url = http://pypi.douban.com/simple
extra-index-url = http://<your pypi server ip : port>/simple/
[install]
trusted-host = pypi.douban.com <your pypi server ip : port>

即可

pip install svn+svn_repo_url

pip install git+git_repo_url

谢谢大家

综合来看,git submodule 更符合我的需求,我去实验了,🙏

回到顶部