在$ company公司,我们运行内部pypi服务器,以保护自己免受公共pypi停机。我们还构建了轮子以避免二进制包的安装开销。一个常见的任务是从公共pypi导入包,其基本归结为:
pip install --download . --no-binary :all: $PACKAGE # download a source distribution
和
pip wheel $PACKAGE # build a binary distribution (or use a cached version that's already on our internal pypi)
根据最新点,这可能会在manylinux
阶段下载/安装pip wheel
轮。由于捆绑.so文件在内部,这些与$ company的安全要求不兼容。我们如何在避开manylinux车轮的同时继续保持相同的工作流程?
目前我们正在降级为pip<8
,但这似乎并不理想
答案 0 :(得分:2)
作为一种变通方法,您可以在当前workdir中创建文件_manylinux.py
,或在site-packages
中创建以下内容:
manylinux1_compatible = False
这将确保在运行命令时不会下载manylinux1轮:
pip wheel -w path/to/wheeldir -f path/to/wheeldir -r requirements.txt
您实际上不需要使用两个命令pip install --download
和pip wheel
,但您可以使用上面的单个命令。 (请注意,pip install --download
已弃用,以支持pip download
命令。
我建议的命令:
path/to/wheeldir
中是否已存在滚轮,并且不会碰到该滚轮。 -r requirements.txt
替换package==X.X.X
)并且滚轮是通用的 - 它将下载该滚轮并将其存储到{{1 }}。path/to/wheeldir
或numpy
) - 将下载源tgz并且pip将构建轮子,结果轮将存储在matplotlib
中。 我已经测试了这个解决方案,这是[{3}}中的建议。我们需要不是解决方案,但它是可行的并且我使用它。
path/to/wheeldir
个文件?PIP pypa/pip#3689。
问:Python会在哪里寻找它? 答:Python遵循attempts to import _manylinux module。
因此,您可以将文件放在以下位置:
_manylinux.py
。前两个路径很简单,但是如何找到安装默认路径?只需运行以下命令:
PYTHONPATH
希望,这有帮助。
答案 1 :(得分:0)
使用轮子时,您似乎只想使用源分布而不是轮子。为此,请将此--no-use-wheel
添加到您的pip命令。
这在建造车轮时使用它听起来有点反直觉,但它确实意味着Do not Find and prefer wheel archives when searching indexes and find-links locations.
这应该强制在车轮阶段期间为您依赖的任何deps取得远程源dists而不是车轮
答案 2 :(得分:0)
对于那些正在寻找可安装的解决方法的人,我创建了no-manylinux1
用法相对简单:
# First install no-manylinux1
pip install no-manylinux1
# Now subsequent invocations of pip will ignore manylinux1 wheels
pip install ...
# To restore the original behaviour, simply `pip uninstall no-manylinux1`
通过安装_manylinux.py
作为内容的manylinux_compatible = False
文件来工作