【问题标题】:Can I exclude libraries from auditwheel repair?我可以从 auditwheel 修复中排除库吗?
【发布时间】:2021-07-23 09:12:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pypi python-manylinux


    【解决方案1】:

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

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

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

    然后,此脚本需要由 Python 3.x 解释器调用,否则它将失败。如果需要,您可以repair Python 2.7 wheels 这种方式就好了。 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
    
    # ...
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2011-02-24
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多