我可以从 Auditwheel 修复中排除库吗?

cat*_*aps 8 python pypi python-manylinux

我正在manylinux2014_x86_64为 python 库构建一些预编译的 Linux 轮子,该库充当涉及 CUDA 的 C++ 库的 API。我使用 创建轮子pip wheel,然后运行auditwheel repair以在轮子中包含外部库(我的 C++ 库、pybind11 等)

问题是它想要将 CUDA 运行时和驱动程序库打包到轮子中。理想情况下,我希望将 CUDA 安装留给用户,而不是必须将其包含在 python 轮中(我什至不确定它的可再发行性如何)。

有谁知道一种将 cuda 库列入黑名单的方法吗auditwheel repair?或者也许还有另一种更好的方法?

pre*_*edi 8

有一种方法,但它有点违背了审计轮修复的目的。

您需要将auditwheel安装为Python模块,然后将其导入您自己的python脚本中,并猴子修补一些指定修复策略的值。

# Monkey patch to not ship libjvm.so in pypi wheels
import sys

from auditwheel.main import main
from auditwheel.policy import _POLICIES as POLICIES

# libjvm is loaded dynamically; do not include it
for p in POLICIES:
    p['lib_whitelist'].append('libjvm.so')

if __name__ == "__main__":
    sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

此代码片段来自diglib项目,它可以实现您对 Java 库的期望。您需要修改此脚本以覆盖需要列入白名单的库。

然后需要由 Python 3.x 解释器调用该脚本,否则将会失败。如果需要,您可以通过这种方式修复 Python 2.7 轮子。diallib 项目还展示了需要在 Manylinux docker 容器中进行的示例调用。

#!/bin/bash
# Run this in a manylinux2010 docker container with /io mounted to some local directory

# ...

/opt/python/cp37-cp37m/bin/python -m pip install cmake auditwheel  # ignore "cmake"

# ...

export AUDITWHEEL=`pwd`/diplib/tools/travis/auditwheel  # the monkey patch script

# ...

/opt/python/cp37-cp37m/bin/python $AUDITWHEEL repair pydip/staging/dist/*.whl

# ...
Run Code Online (Sandbox Code Playgroud)