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?或者也许还有另一种更好的方法?
有一种方法,但它有点违背了审计轮修复的目的。
您需要将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)