PIP忽略setup.py dependency_links(pip ignores depende

2019-06-18 05:35发布

我有我的setup.py dependency_links:

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

但是,这是行不通的。 然而install_requires工作正常。 也许有设立混帐回购协议所要求的setup.py另一种方法?

Answer 1:

这个答案应该有所帮助。 简而言之,你需要指定的版本(或“开发”) #egg=python-s3 ,所以它看起来像#egg=python-s3-1.0.0

根据@ Cerin的评论更新:

  • 皮普1.5.x的有一个标志,使依赖链接处理: --process-dependency-links 。 因为我与下面的点同意我没有测试它。
  • 这种讨论似乎表明,使用依赖链接的点子是一个不好的做法。 尽管此功能被延揽弃用,它现在不是了。 有一个有效的用例的私人包。


Answer 2:

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

我有一个依赖于其他的GitHub(非的PyPI)封装在GitHub上一包(未在PyPI注册)。 我花了过多的时间量试图找出如何让点子正确处理这个问题。 我将包括我做了什么在这里解决它。

在一个requirements.txt文件推杆依赖性是列出相关性的优选方法。 但是,您也需要填充install_requires的设置。 正是在这个阶段,我遇到了与PIP不想从GitHub安装依赖的路障。

大部分地方,包括这个问题的答案,告诉你填充设置的dependency_links部分。 但是,您也需要填充install_requires场与dependency_links引用的包的名称。

例如,如果你的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'
    ]
)

好了,现在我们已经得到了我们的配置包; 安装它是下一个任务。 这是我花了很多时间。 我无法弄清楚,为什么指定dependency_links显然什么也没做。 诀窍是,在某些情况下,你需要设置允许,所有外部的(可以更具体)标志点子。 例如:

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

大功告成,它的作品!

免责声明:dependency_links和标志过程依赖链接和允许,所有外部的被弃用,因此,他们也将立即删除。 在我所花费的时间,我无法找到一个更好的,首选的方法,仍然有画中画功能正常。



Answer 3:

在一些问题上有两点要注意,我发现,特别是从私人回购协议安装。

从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的认证; 我发现最简单的方法是创建一个OAuth令牌,丢弃到环境中,然后用URL包括它
  • 您需要包括一些版本号(这里是0 ),在链路的末端,即使有PyPI上没有包。 这必须是一个实际的数字,不发一言。
  • 你需要与前言git+告诉setuptools的是克隆回购,而不是在一个zip / tar文件指向
  • version可以是一个分支,标签,或提交哈希
  • 您需要提供--process-dependency-links ,如果从PIP安装


Answer 4:

因为PIP版本18.1 PEP 508 URL支持。 这意味着你不需要弃用dependency_links了。 您可以直接在install_requires列表写的依赖来代替。 从@Chad的例子是这样的:

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

要安装包,你可以简单地写:

pip install yourpackage

(无--process依赖性链接)



文章来源: pip ignores dependency_links in setup.py