pip忽略setup.py中的依赖项链接

2024-06-07 18:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的setup.py中有依赖关系链接:

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

但没用。但是安装需要工作正常。 也许还有其他方法可以根据set up.py的需要设置git repo?


Tags: pygithubmastercomhttps3关系链接
3条回答

我知道这是一个老问题,但是,万一你发现自己像我一样在这里,这就是我的工作。

我在GitHub上有一个依赖于其他GitHub(非pypi)包的包(未在pypi注册)。我花了大量的时间试图找出如何让pip正确处理这个问题。我将包括我在这里所做的修复。

将依赖项放入requirements.txt文件是列出依赖项的首选方法。但是,您还需要在安装程序中填充install_requires。正是在这个阶段,我遇到了一个障碍,pip不想从GitHub安装依赖项。

大多数地方,包括这个问题的答案,都告诉您填充安装程序的依赖项链接部分。但是,您还需要用依赖项链接中引用的包的名称填充install\u requires字段。

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

好的,现在我们已经配置了包;下一个任务是安装它。这是我花了很多时间的地方。我不明白为什么指定依赖关系显然什么也没做。技巧是,在某些情况下,您需要为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已弃用,因此它们将很快被删除。在我花的时间里,我找不到一个更好的、更喜欢的方法,而且仍然正确地拥有pip函数。

因为pip版本18.1PEP 508 URL受支持。这意味着您不再需要已弃用的依赖关系链接。 而是直接在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

(不带--进程依赖关系链接)

This answer应该会有帮助。简而言之,您需要为#egg=python-s3指定版本(或“dev”),这样看起来就像#egg=python-s3-1.0.0

根据@Cerin的评论更新:

  • Pip 1.5.x有一个标志来启用依赖链接处理:^{}。我没有测试它,因为我同意下面的观点。
  • This discussion似乎表明对pip使用依赖链接是一种不好的做法。尽管此功能已被登记为弃用,但它已不再是。私有包有一个有效的用例。

相关问题 更多 >

    热门问题