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

2024-06-16 13:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用^ {< CD1> }为Python库构建一些预编译的Linux轮盘,作为一个API,用于包含CUDA的C++库。我用^ {< CD2>}创建轮子,然后运行^ {< CD3>},以包含轮子中的外部库(我的C++库、PybDun11等)

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

有人知道一种从auditwheel repair将cuda LIB列入黑名单的方法吗?或者是另一种更好的方法


Tags: 方法用户apilinux驱动程序情况轮盘轮子
1条回答
网友
1楼 · 发布于 2024-06-16 13:47:31

有一种方法,但它有点违背了车轮维修的目的

您需要将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())

这个片段来自diplib项目,它可以满足您对Java库的需求。您需要修改此脚本以涵盖需要列入白名单的库

然后,该脚本需要由Python3.x解释器调用,否则将失败。如果需要的话,你可以用这种方式。diplib项目还显示了需要在manylinux docker容器中发生的example invocation

#!/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

# ...

相关问题 更多 >