跨发行版Linux控制盘
auditwheel的Python项目详细描述
审核和重新标记PEP 513 manylinux1和PEP 571 manylinux2010Linux控制盘。
概述
auditwheel是一个命令行工具,用于帮助创建python wheel packages对于包含预编译的linux 二进制扩展与多种Linux发行版兼容, 与PEP 513 manylinux1和PEP 571 manylinux2010平台标记一致
auditwheel show:显示控制盘所依赖的外部共享库 (超出manylinux策略中包含的库),以及 检查扩展模块是否使用超过 manylinuxABI
auditwheel repair:将这些外部共享库复制到控制盘本身, 并自动修改适当的RPATH条目,以便这些库 将在运行时提取。这会产生类似的结果,就像库 已静态链接,无需更改生成系统包装商是 建议捆绑,如静态链接,可能涉及版权问题。
安装
auditwheel可以使用pip安装:
pip3 install auditwheel
它需要Python3.5+,并在Linux上运行。它要求shell命令 unzip在PATH中可用只有使用基于ELF的链接的系统 支持(这基本上应该是每个linux)。
一般来说,构建manylinux1wheels需要在centos5上运行 机器和建筑manylinux2010车轮需要在CentOS6上运行 机器,因此我们建议使用预先构建的manylinuxDocker images,例如
$ docker run -i -t -v `pwd`:/io quay.io/pypa/manylinux1_x86_64 /bin/bash
示例
检查车轮:
$ auditwheel show cffi-1.5.0-cp35-cp35m-linux_x86_64.whl cffi-1.5.0-cp35-cp35m-linux_x86_64.whl is consistent with the following platform tag: "linux_x86_64". The wheel references the following external versioned symbols in system-provided shared libraries: GLIBC_2.3. The following external shared libraries are required by the wheel: { "libc.so.6": "/lib64/libc-2.5.so", "libffi.so.5": "/usr/lib64/libffi.so.5.0.6", "libpthread.so.0": "/lib64/libpthread-2.5.so" } In order to achieve the tag platform tag "manylinux1_x86_64" the following shared library dependencies will need to be eliminated: libffi.so.5
修理轮子。
$ auditwheel repair cffi-1.5.2-cp35-cp35m-linux_x86_64.whl Repairing cffi-1.5.2-cp35-cp35m-linux_x86_64.whl Grafting: /usr/lib64/libffi.so.5.0.6 Setting RPATH: _cffi_backend.cpython-35m-x86_64-linux-gnu.so to "$ORIGIN/.libs_cffi_backend" Previous filename tags: linux_x86_64 New filename tags: manylinux1_x86_64 Previous WHEEL info tags: cp35-cp35m-linux_x86_64 New WHEEL info tags: cp35-cp35m-manylinux1_x86_64 Fixed-up wheel written to /wheelhouse/cffi-1.5.2-cp35-cp35m-manylinux1_x86_64.whl
限制
auditwheel使用DT_NEEDED 来自python扩展模块的信息(如ldd)来确定 它们所依赖的系统库。动态地 在运行时使用ctypes/cffi(来自python)加载库,或者 {t1616}$(来自C/C++)不以某种方式包含这些信息。 是静态确定的,所以通过 机制将被忽略
如果编译二进制文件,如果编译它们,我们就无能为力了。
链接到libc或libstdc++的最新版本。这些
库(和其他一些库)使用符号版本控制来向后
兼容性。一般来说,这意味着
旧版本的glibc在具有较新版本的
glibc,但是在新系统上编译的代码不会/可能不会运行
在旧系统上。
因此,要编译广泛兼容的二进制文件,最好执行构建 在旧的linux发行版上,比如manylinux docker映像。
测试
测试可以使用tox运行,它将自动安装 测试依赖项。
有些集成测试还需要一个正在运行且可访问的docker 守护进程。如果还没有,这些测试将提取一些Docker图像 在您的系统上可用,但它不会更新现有的图像。 要手动更新这些图像,请运行:
docker pull python:3.5 docker pull quay.io/pypa/manylinux1_x86_64 docker pull quay.io/pypa/manylinux2010_x86_64
您也可以使用docker rmi删除这些图像。
行为准则
在auditwheel项目的代码库中进行交互的每个人,问题跟踪器, 聊天室和邮件列表应遵循 PyPA Code of Conduct