从特定索引安装特定包

GaT*_*aCa 9 python pip pypi

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

pip install --index-url http://custompypi/ mypackage
Run Code Online (Sandbox Code Playgroud)

不起作用,因为显然找不到熊猫。

pip install --index-url http://pypiproxy/ --extra-index-url http://custompypi/ mypackage
Run Code Online (Sandbox Code Playgroud)

直到有人在 PyPi 上上传名为mypackage的包为止。

我能想到的最接近的是:

pip install --index-url http://custompypi/ --no-dependencies mypackage
pip install --index-url http://pypiproxy/ --extra-index-url http://custompypi/ mypackage
Run Code Online (Sandbox Code Playgroud)

这感觉不对。

任何想法?

Bri*_*ian 0

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

假设两个包索引 URL 是AB,您想要mypackage从哪里来A以及它的依赖项从哪里来B。在我的用例中,ATestPyPIB是 PyPI。

mypackage首先从不依赖的地方安装A,就像问题中一样:

$ pip install --no-deps --index-url 'A' mypackage
Run Code Online (Sandbox Code Playgroud)

B然后专门从with安装依赖项

$ pip install --index-url 'B' mypackage | grep 'Requirement already satisfied: mypackage' > /dev/null
Run Code Online (Sandbox Code Playgroud)

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

--extra-index-url 'A'我们还可以在第二个命令中省略,前提是它mypackage不依赖于A. pip install可以解决在配置的索引中找不到的已安装发行版的依赖关系。

如果您想保留第二个命令的标准输出(例如工作流日志),您可以在和之间添加一个管道tee /dev/ttypip installgrep