由于某种原因,我不明白,pip从全局的pypi而不是从我自己的服务器获取软件包。我的程序包称为foo
,它具有一个依赖项bar
。
pip search --index-url https://example.com/simple foo
退回我的包裹。
pip install --index-url https://example.com/simple foo
由于无法下载bar
而导致错误。
Could not find a version that satisfies the requirement bar (from foo) (from versions: )
No matching distribution found for bar (from foo)
pip install --index-url https://example.com/simple --extra-index-url https://pypi.python.org/simple foo
好,现在应该解决问题了吧?它将从我的索引中获取foo
,从pypi中获取bar
对吗?好吧...恐怕并非如此。使用此配置,而不是从我的索引中下载foo
,而是下载了pypi中的foo
软件包。即使在安装之后,如果我再次运行pip search foo
,它也会将我的检测为latest
,但将全局检测为installed
出于测试目的,为了获得一个干净的基线,我尝试使用python:3.7-alpine
,得到相同的结果。
作为一种解决方法,我将软件包的版本设置为yzt-0.1
,以便可以专门安装foo:yzt-0.1
,并且由于它在全局环境中找不到,因此将从我的回购中安装。
答案 0 :(得分:0)
好吧,问题在于点子的工作方式。如果未指定版本,则它将始终下载最新版本,即使这意味着从extra
索引中获取版本,而在主索引中存在另一个版本。
在我的情况下,我的软件包是0.1
,但是pypi中有一个与0.1.1
同名的软件包,因此当我传递--extra-index-url https://pypi.python.org/simple
来安装依赖项时,{{ 1}}实际上是在使用该索引来下载pip
版本。
因此,总而言之,当您遇到以下情况:在不同的存储库中有两个不同的软件包,但是它们具有相同的名称,那么您有两种选择来确保一切都能按预期进行:
0.1.1
。就我而言,我更喜欢第二个,因为它更干净。对于第一个,您需要username-packagename
这是较难看的IMO。