我正在manylinux2014_x86_64
为 python 库构建一些预编译的 Linux 轮子,该库充当涉及 CUDA 的 C++ 库的 API。我使用 创建轮子pip wheel
,然后运行auditwheel repair
以在轮子中包含外部库(我的 C++ 库、pybind11 等)
问题是它想要将 CUDA 运行时和驱动程序库打包到轮子中。理想情况下,我希望将 CUDA 安装留给用户,而不是必须将其包含在 python 轮中(我什至不确定它的可再发行性如何)。
有谁知道一种将 cuda 库列入黑名单的方法吗auditwheel repair
?或者也许还有另一种更好的方法?
所以我希望打包一个需要科学库的相当复杂的 python 应用程序。这个问题有点类似于stackoverflow pip vs conda 的讨论,但它没有详细介绍自 2016 年以来 linux 轮子的二进制打包可用的差异。 我已经看到pypi/cryptography使用 manylinux 并通过 pypi 轮子分发二进制文件。另一个包 mpi4py 只发布 conda 的二进制包,只是因为困难。甚至可以说二元轮不适合这项任务。
通过轮子共享库打包与 conda 相比是什么样的?截至 2018 年,通过轮子共享库打包是否值得?
我的包裹需要
我的所有静态二进制文件大约为 100Mb,因此它确实需要很多共享库。许多我还指出,即使对我自己来说,安装也是一种巨大的痛苦......我无法想象尝试自己安装它的人会是什么样子。到目前为止,我有一个可用的 docker 容器。
我在 Python 中遇到一个奇怪的问题,问题是cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl
在 SLES 操作系统上不起作用。
我将 CI/CD 添加到我的存储库中,当我将包从requirements.txt 下载到本地文件夹时dist-packages
。Jenkins Slave 机器在 RedHat Linux 上运行。因此,它是用这个文件下载的,cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl
而我的运行时是在 SLES OS 11 中,这需要cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl
.
这个特定的依赖项cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl
是从 RedHat 下载的,当我将其重新分发到 SLES 操作系统时,此依赖项失败并出现以下错误。
ERROR: Could not find a version that satisfies the requirement cryptography>=2.1.4 (from azure-identity->-r requirements.txt (line 2)) (from versions: none)
ERROR: No matching distribution found for cryptography>=2.1.4 (from azure-identity->-r requirements.txt (line 2))
Run Code Online (Sandbox Code Playgroud)
如果我将依赖项名称更改为 ,cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl
则cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl
它在 SLES OS 计算机上工作正常。
当我签入 PyPI https://pypi.org/project/cryptography/#modal-close时(这两个文件大小相同,但哈希值不同)
我想了解python包中manylinux1_x86_64与manylinux2010_x86_64之间的区别。
提前致谢。
我正在尝试构建一个 python 扩展,它使用 numpy C-API 来操作 numpy 数组。在设置部署链时,我遇到了一个问题。
在我requirements.txt
和setup.py
我中添加了依赖项numpy>=1.7
,因为我正在使用该版本中引入的 API 功能。我正在quay.io/pypa/manylinux1_x86_64
docker 镜像中造轮子。在图像内,我正在使用安装我的要求pip
。这将安装numpy==1.14
,因为这是当前版本,与我的依赖项匹配。
mypackage-xxx-manylinux_x84_64.whl
但是,当我在 ubuntu 机器(有 numpy )上安装时1.8
,在导入包时收到以下错误
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
RuntimeError: module compiled against API version 0xc but this version of numpy is 0x9
---------------------------------------------------------------------------
ImportError
[...]
ImportError: numpy.core.multiarray failed to import
Run Code Online (Sandbox Code Playgroud)
明显的解决方法是我运行pip install -U numpy
. 但是,我不想告诉我的包的每个用户如果他们的 numpy 库是<1.14
(即使它符合我的依赖项要求),则手动运行此命令。与此建议相关的几个问题(例如1、 2)。我是从软件包开发人员的角度在这里问的。首先我可以做什么来防止这种情况发生?
这里的最佳实践是什么?我是否应该专门添加 的依赖项numpy >= …