首页 > 解决方案 > 如何解决 Python Git 子模块的依赖关系

问题描述

我在单独的 git 存储库中有 Python 项目 A、B 和 C。他们在每个中都使用了一些类似的代码,所以我想将代码重构到一个单独的共享存储库中。这个存储库中的 Python 代码实际上只是一些帮助类。我可以将项目 A、B 和 C 中这个新存储库中的文件作为 git 子模块包含在内。

我现在遇到的问题是,如果 git 子模块中的代码具有外部 pip 依赖项,那么顶级项目如何解决这些依赖项以及它们自己的依赖关系?

也许 git-submodules 在这里不是正确的方法,但我真的想避免为 3-4 个轻量级模块/类设置私有 pypi 服务器。

标签: pythongit

解决方案


我现在遇到的问题是,如果 git 子模块中的代码具有外部 pip 依赖项,那么顶级项目如何解决这些依赖项以及它们自己的依赖关系?

在您的子模块存储库中,requirements.txt像往常一样包含您的依赖项。

然后在您的文档中,确保在安装 A、B 或 C 之前包含有关安装子模块包的说明。

例如,假设包 A 是 foo,子模块是 bar。

tree
.
└── foo
    ├── bar
    │   ├── bar
    │   │   └── __init__.py
    │   ├── requirements.txt # external pip dependencies
    │   └── setup.py
    ├── foo
    │   └── __init__.py
    ├── requirements.txt
    └── setup.py # include 

4 directories, 6 files

然后在您的文档中,您可以包含这样的内容,


安装 Foo

# Initialize submodule(s)
git submodule update --init --recursive

# First install bar
cd bar

# Resolve any dependencies for bar
pip install -r requirements.txt

# Install bar
python setup.py install

# Now install foo
cd ..

# Resolve any other dependencies for foo
pip install -r requirements.txt

# Install foo
python setup.py install

注意:这应该对所有三个存储库进行,例如 A、B 和 C。


资源:


推荐阅读