pip忽略setup.py中的dependency_links

我在我的setup.py中有dependency_links:

... dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#egg=python-s3'], ... 

但它不起作用。 但是,install_requires工作正常。 也许有另一种方法来设置的setup.py所需的git回购?

这个答案应该有帮助。 简而言之,您需要为#egg=python-s3-1.0.0 #egg=python-s3指定版本(或“dev”),使其看起来像#egg=python-s3-1.0.0

基于@ Cerin评论的更新:

  • PIP 1.5.x有一个标志来启用依赖链接处理: – --process-dependency-links 。 我没有testing它,因为我同意下面的观点。
  • 这个讨论似乎表明使用依赖链接进行点是一个不好的做法。 虽然这个function已经被弃用,但现在已经不复存在了。 私有包有一个有效的用例。

我意识到这是一个古老的问题,但万一你发现自己在这里像我一样; 这是为我工作。

我有一个github上的软件包(未注册pypi),依赖于其他github(非pypi)软件包。 我花了很多时间试图找出如何正确处理这个问题。 我将包括我在这里修复它。

将依赖项放入一个requirements.txt文件是列出依赖关系的首选方法。 但是,您还需要在安装程序中填写install_reqs。 正是在这个阶段,我遇到了一个小路,不想从github安装依赖关系。

大多数地方,包括这个问题的答案,都告诉你填充setup的dependency_links部分,还需要用dependency_links中引用的包的名称填充install_req字段。

例如,如果您的requirements.txt包含以下内容。

 somepackage==1.2.0 https://github.com/user/repo/tarball/master#egg=repo-1.0.0 anotherpackage==4.2.1 

然后,你的设置调用应该是这样的:

 setup( name='yourpackage', version='1.7.5', packages=[], url='', license='', author='', author_email='', description='', install_requires=[ 'somepackage==1.2.0', 'repo==1.0.0', 'anotherpackage==4.2.1' ], dependency_links=[ 'https://github.com/user/repo/tarball/master#egg=repo-1.0.0' ] ) 

好的,现在我们已经configuration了我们的软件包了。 安装它是下一个任务。 这是我花了很多时间。 我无法弄清楚为什么指定dependency_links显然什么也没做。 诀窍是,在某些情况下,您需要为pip设置allow-all-external(可以是更具体的)标志。 例如:

 pip install git+https://github.com/user/anotherrepo.git --process-dependency-links --allow-all-external 

你完成了,它的工作!

免责声明:dependency_links和标志process-dependency-links和allow-all-external都被弃用,所以它们很快就会被移除。 在我花费的时间里,我找不到一个更好的,最好的方法,并且仍然具有正确的点子function。

关于我发现的一些问题的几个笔记,特别是从私人回购安装。

从pip和setuptools安装有一些细微的差异; 但这种方式应该为两者工作。

 from setuptools import setup import os # get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/ github_token = os.environ['GITHUB_TOKEN'] setup( # ... install_requires='package', dependency_links = [ 'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0' .format(github_token=github_token, package=package, version=master) ] 

这里有几个注释:

  • 对于私人回购,您需要使用GitHub进行身份validation; 我发现的最简单的方法是创build一个oauth标记,将其放到您的环境中,然后将其包含在URL中
  • 即使PyPI上没有包,也需要在链接的末尾包含一些版本号(这里是0 )。 这必须是一个实际的数字,而不是一个字。
  • 你需要用git+作为前言来告诉setuptools克隆repo,而不是指向一个zip / tarball
  • version可以是分支,标签或提交哈希
  • 如果从pip安装,则需要提供--process-dependency-links