从特定索引安装特定包

问题描述 投票:0回答:2

我构建了一个包(我们称之为 mypackage),它依赖于 PyPi 上提供的知名第三方模块(即 pandas)。 我已将 mypackage 上传到自定义的类似 PyPi 的服务器上 (pypicustom)。我正在努力将它安装在我所能访问的只是 PyPi 镜像的环境中(我们称之为 pypiproxy)。

pip install --index-url http://custompypi/ mypackage

不起作用,因为明显找不到pandas

pip install --index-url http://pypiproxy/ --extra-index-url http://custompypi/ mypackage

一直有效,直到有人在 PyPi 上上传名为 mypackage 的包。

我能想到的最接近的是:

pip install --index-url http://custompypi/ --no-dependencies mypackage
pip install --index-url http://pypiproxy/ --extra-index-url http://custompypi/ mypackage

感觉不对。

有什么想法吗?

python pip pypi
2个回答
0
投票

我一直在对问题最接近的解决方案进行增量改进。

假设两个包索引 URL 是

A
B
,您希望
mypackage
来自
A
,并且其依赖项来自
B
。在我的用例中,
A
TestPyPI
B
是PyPI。

首先从

mypackage
安装
A
,无需依赖,就像问题中一样:

$ pip install --no-deps --index-url 'A' mypackage

然后仅从

B

安装依赖项
$ pip install --index-url 'B' mypackage | grep 'Requirement already satisfied: mypackage' > /dev/null

添加的

grep
让您断言
pip install
没有尝试从
mypackage
重新安装
B
。如果在
'Requirement already satisfied: mypackage'
的输出中找不到
pip install
,该命令将以状态 1 退出。这可以让您确定剩下的
mypackage
确实是来自
A
的那个。

我们还可以在第二个命令中省略

--extra-index-url 'A'
,前提是
mypackage
不依赖于
A
的任何其他分布。
pip install
可以解决在配置的索引中找不到的已安装发行版的依赖关系。

如果您想保留第二个命令的标准输出(例如工作流程日志),您可以

tee /dev/tty
pip install
 之间添加一个管道到 
grep


-1
投票

我正在使用 Amazon Code Artifact 并且有类似的案例。

您可以将 pip 配置为在多个索引处搜索包,方法是设置 index-url 和 extra-index-url 带有

pip config

pip config set global.index-url https://pypiproxy/
pip config set global.extra-index-url https://pypi.python.org/simple/

运行这两个命令后,您可以照常安装,pip 将搜索这两个位置,而无需在

pip install
命令中指定它们。

另请查看pip.conf可以同时指定两个index-url吗?好像也可能相关。

© www.soinside.com 2019 - 2024. All rights reserved.