如何在setup.py中包含用于pip安装的git依赖项

时间:2016-10-15 23:36:58

标签: python git pip setup.py

我需要包含通过公共Github存储库提供的Python包以及我的Python(2.7)包。我的包应该可以通过pip使用setup.py安装。

到目前为止,可以使用dependency_links文件中的setup.py来完成此操作:

setuptools.setup(
   name="my_package",
   version="1.0",
   install_requires=[
       "other_package==1.2"
   ],
   dependency_links=[
      "https://github.com/user/other_package/tarball/master#egg=other_package-1.2"
   ]    
)

当使用--process-dependency-links标志安装软件包时,这仍然有效,但dependency_links功能似乎已被弃用,因为:

pip install git+https://github.com/user/my_package@master#egg=my_package-1.0 --process-dependency-links

给了我以下警告:

DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.

是否有另一种方法可以在git文件中包含setup.py依赖项并支持pip安装?

编辑(2016年10月17日)澄清我的用例:

假设我在other_package中发现了一个错误。我在Github上分叉各自的repo,修复bug并发出pull请求。我的拉取请求不会立即被接受(或者永远不会因为不再主动维护包裹)。我想将my_packageother_package的分支一起分发,并希望用户能够在没有任何关于此要求的详细信息的情况下进行安装my_package,而无需提供任何安装时附加标志。 my_package的用户还应该能够在自己的自定义包中包含my_package作为要求。

如何实现兼容不同的安装模式(轮子,鸡蛋,开发......)?

2 个答案:

答案 0 :(得分:2)

就个人而言,我会避免将git存储库作为依赖项包含在内。在您描述的场景中,我看到两个选项。

包裹未维护的地方

如果一个包没有维护,你可以分叉项目并分发你自己的版本,或者你可以像你自己代码的子模块那样分发分叉代码(即直接在你的可分发包中包含外部依赖)

我个人更喜欢发布自己的版本。

包裹尚未包含您的错误修正

在这种情况下,我会将固定代码作为程序包的一部分分发,直到修复错误为止。

答案 1 :(得分:2)

我遇到了这个确切的问题(在我所依赖的其他人的项目中发现了一个错误,提出了一个拉取请求,但没有时间等待他们合并)。

我通过将这一行添加到 install_requires 中解决了这个问题:

'my-package @ https://github.com/user/my-package/archive/master.tar.gz'