python - 从 pip 下载时排除 manylinux wheels

标签 python pip python-wheel

在 $company,我们运行一个内部 pypi 服务器来保护我们自己免受公共(public) pypi 停机的影响。我们还构建轮子以避免二进制包的安装开销。一个常见的任务是从公共(public) 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)

在最新的pip下,这个可以下载/安装manylinux pip wheel期间的轮子阶段。由于 inside 捆绑了 .so 文件,这些文件与我们在 $company 的安全要求不兼容。我们如何才能在避免 manylinux 的同时继续相同的工作流程?

目前我们正在降级到 pip<8 , 但这似乎不理想

最佳答案

解决方法

作为解决方法,您可以在当前工作目录或 site-packages 中创建文件 _manylinux.py,内容如下:

manylinux1_compatible = False

这将确保在您运行命令时不会下载 manylinux1 wheels:

pip wheel -w path/to/wheeldir -f path/to/wheeldir -r requirements.txt

你真的不需要使用两个命令 pip install --downloadpip wheel,但你可以使用上面的单个命令。 (请注意,pip install --download 已被弃用,取而代之的是 pip download 命令)。

我建议的命令将:

  1. 检查轮子是否已经存在于 path/to/wheeldir 中并且不会接触那个轮子。
  2. 如果在需求文件中检测到新版本(或者您可以将 -r requirements.txt 替换为包和确切版本 package==X.X.X)并且 wheel 是通用的 - - 它将下载那个轮子并将其存储到 path/to/wheeldir
  3. 如果包需要编译(例如 numpy,或 matplotlib)——将下载源 tgz 并使用 pip 构建轮子,结果轮子将存储在路径/到/wheeldir

我测试了这个解决方案,[在 pypa/pip#3689 中建议] .它不是我们需要的解决方案,但它是可行的,我使用它。

_manylinux.py 文件可以放在哪里?

画中画attempts to import _manylinux module .

问:Python 会在哪里寻找它?
A:Python遵循the module search path .

因此您可以将文件放在以下位置:

  1. 当前工作目录。
  2. PYTHONPATH 中的路径。
  3. 安装默认路径。

前两个路径很简单,但是如何找到你的安装默认路径呢?只需运行以下命令:

python -c "import os.path as p;print(p.dirname(p.realpath(p.__file__)))"

希望这对您有所帮助。

关于python - 从 pip 下载时排除 manylinux wheels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231799/

相关文章:

python - 如何在支持 mx 的 virtualenv 中安装 psycopg2?

python - pip安装错误: "Unknown archive format: .whl"

python - 在安装构建依赖项之前检查 PyPI 上是否存在 Python 轮

python - 制作程序来自动点击网站

python - Sphinx 意外的部分标题 - numpydoc

python - 任何用于序列化属性的 cattrs 解决方案都使用不同的名称?

python - matplotlib pyplot 通过重叠比较两个条形图

python - 使用 pip-install 的 Python 包的综合下载统计信息

python - Conda - 包安装到根环境而不是事件环境

python - 构建时如何强制 python 轮子特定于平台?