我知道这是一个老问题,但是,万一你发现自己像我一样在这里,这对我有用。
我在 GitHub 上有一个包(未向 pypi 注册),它依赖于其他 GitHub(非 pypi)包。我花了很多时间试图弄清楚如何让 pip 正确处理这个问题。我将在此处包含我为修复它所做的工作。
将依赖项放在 requirements.txt 文件中是列出依赖项的首选方法。但是,您还需要在安装程序中填充 install_requires。正是在这个阶段,我遇到了 pip 不想从 GitHub 安装依赖项的障碍。
大多数地方,包括这个问题的答案,都会告诉您填充 setup 的 dependency_links 部分。 但是,您还需要使用 dependency_links 中引用的包的名称填充 install_requires 字段。
例如,如果您的 requirements.txt 包含以下内容。
somepackage==1.2.0
https://github.com/user/repo/tarball/master#egg=repo-1.0.0
anotherpackage==4.2.1
然后,您的 setup 调用应如下所示:
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 设置 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 功能。