我在pip install --no-deps --no-build-isolation -r requirements.txt上遇到了一个我意想不到的问题。
作为使用pip (使用其他包管理器,例如poetry )绕过Python地狱的一种方法,我们希望冻结我们的依赖关系,并安装我们所需要的各种包的确切版本。
在依赖项列表中包括:
fastparquet==0.4.1
...
numpy==1.17.4前者取决于后者。
为了让fastparquet使用我们想要的numpy版本,我认为pip install --no-deps --no-build-isolation -r requirements.txt可以工作。--no-deps将确保列出的包的依赖关系不会被pip删除,而--no-build-isolation将确保我们不会因为pip的构建隔离行为而使用更新版本的numpy构建fastparquet。
运行pip install ...是没有错误的。但是,在运行我的代码时,在使用fastparquet时仍然会遇到这个问题
ValueError: numpy.ndarray size changed, may indicate binary incompatibility.
Expected 88 from C header, got 80 from PyObject此错误似乎是一个版本兼容性问题。
通过fastparquet==0.4.1重新安装pip install --upgrade --force-reinstall解决了这个问题,这意味着,第一次,pip仍然在使用更新版本的numpy。
注意,我们是从一个干净的Python虚拟环境开始的,既没有安装numpy,也没有安装fastparquet。
有什么想法吗?谢谢!
发布于 2022-10-18 14:12:29
我觉得你的分析是有道理的。构建环境和运行时环境是分开的。在构建快速拼板时,系统不知道安装了哪个numpy,因此它只是根据其构建设置来提取最新的numpy。您可能需要安装numpy之前,紧固件和使用--不构建-隔离选项。
您是否尝试过将该选项添加到requirements.txt中?fastparquet==0.4.1,--无构建隔离-此工作于大于20.2.2的pip版本。
https://stackoverflow.com/questions/66165241
复制相似问题