pip install软件包仍未遵循依赖关系链接

时间:2018-09-26 19:01:22

标签: python pip setuptools

我在使用setup.py来点点安装我的软件包时遇到了麻烦,该软件包也具有依赖项链接。我已经仔细阅读了this answerthis one,但没有一个答案,包括被接受的答案都可以帮助您。

这是尝试安装的软件包的setup.py。 基本上,它会读取requirements.txt来填充install_requires和dependency_links,其余大部分代码都是cookie-cutter的样板。 requirements.txt中有一个私人的github存储库,这是导致问题的原因。例如git+https://${GITHUB_OAUTH_TOKEN}@github.com/jmerkow/pripy.git#egg=pripy

当我运行pip install -r requirements.txt时,一切正常,它将安装私有存储库。但是,如果尝试使用pip install . --process-dependency-links安装,则会出现此错误:

Could not find a version that satisfies the requirement pripy (from mypackage==<sha>) (from versions: )
No matching distribution found for pripy (from mypackage==<sha>)

如果我从需求链接中删除了#egg=xxx,则pip install .会完全忽略私有回购软件包,而pip install -r requirements.txt不会完全忽略私有回购软件包。

我已确认dependency_links包含'git+https://<actual-token>@github.com/jmerkow/pripy.git#egg=pripy',并且install_requires包含'pripy'

如何正确设置安装程序,这是子软件包的问题吗?除了没有专用链接外,该回购中的setup.py几乎相同。

1 个答案:

答案 0 :(得分:2)

呃,这总是发生。我把所有工作都交给了问题,然后我自己弄清楚了。

问题是两件事,首先,所有dependeny_links都需要一个版本,其次要从需求文件中正确提取版本,您需要对字符串做一些魔术。

与上述setup.py相比,我更改了将需求添加到两个列表中的方式(更新了here)。然后将版本添加到链接上的#egg=xxx,例如 git+https://${GITHUB_OAUTH_TOKEN}@github.com/jmerkow/pripy.git#egg=pripy-0

现在setup.py将解析该文件,获取egg版本信息,将其转换为pip版本(基本上将第一个'-'替换为'==')以进行install_requires,然后很好。