【问题标题】:How to resolve dependencies of Python Git Submodule如何解决 Python Git 子模块的依赖关系
【发布时间】:2019-07-10 03:46:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: python git


    【解决方案1】:

    我现在遇到的问题是,如果 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。


    资源:

    【讨论】:

    • 我发现如果我使用setup.py 将子模块python 打包,我可以将它们全部安装在根(“foo”)requirements.txt 文件中作为-e bar。这与您的解决方案在功能上是否相同?
    • 是的,那很好。
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2022-01-11
    • 2013-01-19
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多