我正在尝试构建一个 python 扩展,它使用 numpy C-API 来操作 numpy 数组。在设置部署链时,我遇到了一个问题。
在我requirements.txt
和setup.py
我添加了依赖项numpy>=1.7
,因为我正在使用该版本中引入的 API 功能。我正在quay.io/pypa/manylinux1_x86_64
码头图像中建造轮子。在图像内部,我正在使用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
明显的解决方法是我运行pip install -U numpy
. <1.14
但是,如果他们的 numpy 库是(即使它符合我的依赖项要求),我不想告诉我的包的每个用户手动运行此命令。正是这个建议(例如1、 2)有几个问题。我是从包开发人员的角度来问的。我能做些什么来防止这种情况发生?
这里的最佳做法是什么?我是否应该专门添加一个依赖项numpy >= 1.14
,以便自动安装此版本?但是,当 numpy 发布新版本时,我的包会自动针对 docker 映像中的新版本构建,这会导致同样的问题。或者我应该明确安装numpy==1.14
在 docker 映像中,以获得固定版本并将其添加为依赖项?
或者有没有办法注释轮子,它们是针对哪些 python 包构建的?
PS 当然,源安装没有问题,因为该软件包是针对安装在用户系统上的 numpy 版本构建的。