设置子模块依赖项

Wli*_*Wli 5 python distutils setuptools python-3.x

我们有一个 python 包,它也是一个 git 存储库。它依赖于其他 python 包,它们本身就是 git repos。我们将后者作为前者的 git 子模块。这些都不是公开的,因此没有 PyPI。

与使用子模块依赖项安装相关的其他问题都不符合我们的模式。我的问题不是关于查找(子)包setuptools,也不是关于相对导入。

这是我们的结构:

package-repo/
    setup.py
    setup.cfg
    README.md
    .gitignore
    .gitmodules
    .git/
    submodule-repo/
        .git/
        .gitignore
        setup.py
        setup.cfg
        README.md
        submodule/
            __init__.py
            moduleX.py
            moduleY.py
    package/
        __init__.py
        moduleA.py
        moduleB.py
        subpackage1/

Run Code Online (Sandbox Code Playgroud)

与requirements.txt的情况一样,我天真地认为以下内容可以解决:

package-repo/
    setup.py
    setup.cfg
    README.md
    .gitignore
    .gitmodules
    .git/
    submodule-repo/
        .git/
        .gitignore
        setup.py
        setup.cfg
        README.md
        submodule/
            __init__.py
            moduleX.py
            moduleY.py
    package/
        __init__.py
        moduleA.py
        moduleB.py
        subpackage1/

Run Code Online (Sandbox Code Playgroud)

这不起作用。

另一种方法是添加子模块packages并在 中指示其目录package_dir。嗯,效果不太好,如果安装依赖模块时无法安装,那么在“子模块”中创建 setup.py 有何意义?pip install ./submodule-repo/我只想安装它,而不必将其放在 PyPI 上或创建虚拟 PyPI 服务器,这严重过度,或者必须在 README.md 中指示要做什么(即),这是不优雅的。

有什么办法呢?我是否在 distutils 或 setuptools 文档中错过了它?

小智 2

您将需要指定从何处安装子模块。

install_requires=[
    'SQLAlchemy',
    'pandas',
     # Your private repository module
    '<dependency_name> @ git+ssh://git@github.com/<user_name>/<repo_name>@<branch>'
]
Run Code Online (Sandbox Code Playgroud)