如何安装具有自定义依赖项的自定义python包?

时间:2019-06-19 21:36:42

标签: python pip package

我想找到一种方法来安装自己的python软件包,该软件包依赖于其他自定义python软件包。

我按照本指南创建了自己的python软件包:https://python-packaging.readthedocs.iao/en/latest/

对于所有软件包,最小结构为:

myOwnPackage/
    myOwnPackage/
        __init__.py
    setup.py

现在,我创建了一个依赖于其他自定义程序包的程序包。其结构为:

myOwnPackage/
    dependencies/
        packageA
        packageB
    myOwnPackage/
        __init__.py
    setup.py

我的问题是:如何使用pip轻松安装myOwnPackage及其自定义依赖项?

对于上述示例,我想在这样调用pip时安装myOwnPackage,packageA和packageB:pip install myOwnPackage

我没有找到一种在setup.py中包含依赖项名称的方法,就像我对numpy,pyqt5等官方python包所做的那样。

我找到了一种通过在pip中使用requirements.txt来部分解决问题的方法:

pip install -r requirements.txt myOwnPackage

这是我编写需求文件的方式:

./dependencies/packageA
./dependencies/packageB

我工作得很好,但是当我有这样的递归依赖项时:

myOwnPackage/
    dependencies/
        packageA/
            dependencies/
                packageC
            packageA/
                __init__.py
            setup.py
            requirements.txt
        packageB
    myOwnPackage/
        __init__.py
    setup.py
    requirements.txt

具有最高要求的pip。txt将安装myOwnPackage,packageA和packageB,但它不知道必须安装是packageA依赖项的packageC。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我几乎解决了我的问题。

我需要使用以下命令构建每个依赖项:python setup.py sdist以便创建单个程序包文件(tar.gz)

然后,我可以在顶级软件包setup.py中调用它们:

...
dependency_links=["file:/local/path/myOwnPackage/dependencies/packageA/dist/packageA-0.1.tar.gz"],
install_requires=["packageA"],
...

最后,我运行以下命令来安装myOwnPackage及其本地依赖项:

pip install . --process-dependency-links

如果按照上述方法正确构建和设置了所有存储库,则它将安装所有递归依赖项。

--process-dependency-links在上一个版本的pip中已被删除...