python - 如何解决 Python Git 子模块的依赖关系
问题描述
我在单独的 git 存储库中有 Python 项目 A、B 和 C。他们在每个中都使用了一些类似的代码,所以我想将代码重构到一个单独的共享存储库中。这个存储库中的 Python 代码实际上只是一些帮助类。我可以将项目 A、B 和 C 中这个新存储库中的文件作为 git 子模块包含在内。
我现在遇到的问题是,如果 git 子模块中的代码具有外部 pip 依赖项,那么顶级项目如何解决这些依赖项以及它们自己的依赖关系?
也许 git-submodules 在这里不是正确的方法,但我真的想避免为 3-4 个轻量级模块/类设置私有 pypi 服务器。
解决方案
我现在遇到的问题是,如果 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。
资源:
推荐阅读
- java - 从 Spring Boot 测试中调用的 @Caching 方法 [@Transactional 注释] 不起作用
- php - 在 Woocommerce 中为特定用户角色禁用我的帐户编辑地址
- r - 使用可变列数将长转换为宽
- python - 变量默认值的 Python 快捷方式是另一个变量值(如果它是无)
- c# - 在 C# 泛型中传递“this”在没有强制转换的情况下不起作用
- python - Keras中具有二进制分类的多标签
- django - 需要登录 Django 基于类的视图
- grep - cat + grep 后输出文件比输入文件大得多
- android - Xamarin Forms 错误“无效的资源目录名称:/Path/res 图标“res 图标”
- c# - 无法侦听管道名称“net.pipe://localhost/OurCompanyName/”,因为另一个管道端点已经在侦听该名称