从pip下载时排除manylinux轮

时间:2016-05-14 20:57:40

标签: python pip python-wheel

在$ 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,但这似乎并不理想

3 个答案:

答案 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 --downloadpip wheel,但您可以使用上面的单个命令。 (请注意,pip install --download已弃用,以支持pip download命令。

我建议的命令:

  1. 检查path/to/wheeldir中是否已存在滚轮,并且不会碰到该滚轮。
  2. 如果在需求文件中检测到新版本(或者您可以用包和精确版本-r requirements.txt替换package==X.X.X)并且滚轮是通用的 - 它将下载该滚轮并将其存储到{{1 }}。
  3. 如果包需要编译(例如path/to/wheeldirnumpy) - 将下载源tgz并且pip将构建轮子,结果轮将存储在matplotlib中。
  4. 我已经测试了这个解决方案,这是[{3}}中的建议。我们需要不是解决方案,但它是可行的并且我使用它。

    您可以在哪里放path/to/wheeldir个文件?

    PIP pypa/pip#3689

    问:Python会在哪里寻找它? 答:Python遵循attempts to import _manylinux module

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

    1. 目前的工作目录。
    2. _manylinux.py
    3. 中的路径
    4. 安装默认路径。
    5. 前两个路径很简单,但是如何找到安装默认路径?只需运行以下命令:

      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文件来工作