如何解决康达包错误?二进制不兼容
我在没有 root 访问权限的系统上的远程 Jupyter 笔记本中工作,甚至没有可以进行许多调整的 shell。我可以从 Conda 的存档中检索包,并在安装了这样的包的笔记本单元中运行函数
!conda install /path/to/package-vvv.tar.bz2
我遇到过我猜测版本号错误的情况,安装了不兼容的东西。错误信息就像我在下面生成的一样,numpy 或 mkl 中的二进制不兼容。
现在我在我拥有管理员访问权限的 Ubuntu 20.10 笔记本上重新跟踪问题。我有一个可重现的问题需要展示和分享。
- 使用相同版本的 python、numpy 和 pandas 创建一个环境,就像我们在远程机器上一样:
$ conda create -n cenv-py368 python=3.6.8 pandas=1.1.2 numpy=1.15.4
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.5.12
latest version: 4.9.2
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/pauljohn/LinuxDownloads/miniconda3/envs/cenv-py368
added / updated specs:
- numpy=1.15.4
- pandas=1.1.2
- python=3.6.8
The following packages will be downloaded:
package | build
---------------------------|-----------------
libffi-3.2.1 | hf484d3e_1007 52 KB
python-3.6.8 | h0371630_0 34.4 MB
libgcc-ng-9.1.0 | hdf63c60_0 8.1 MB
libstdcxx-ng-9.1.0 | hdf63c60_0 4.0 MB
blas-1.0 | mkl 6 KB
_libgcc_mutex-0.1 | main 3 KB
------------------------------------------------------------
Total: 46.6 MB
The following NEW packages will be INSTALLED:
_libgcc_mutex: 0.1-main
blas: 1.0-mkl
ca-certificates: 2021.1.19-h06a4308_0
certifi: 2020.12.5-py36h06a4308_0
intel-openmp: 2020.2-254
libedit: 3.1.20191231-h14c3975_1
libffi: 3.2.1-hf484d3e_1007
libgcc-ng: 9.1.0-hdf63c60_0
libgfortran-ng: 7.3.0-hdf63c60_0
libstdcxx-ng: 9.1.0-hdf63c60_0
mkl: 2020.2-256
mkl-service: 2.3.0-py36he8ac12f_0
mkl_fft: 1.2.0-py36h23d657b_0
mkl_random: 1.1.1-py36h0573a6f_0
ncurses: 6.2-he6710b0_1
numpy: 1.15.4-py36h7e9f1db_0
numpy-base: 1.15.4-py36hde5b4d6_0
openssl: 1.1.1i-h27cfd23_0
pandas: 1.1.2-py36he6710b0_0
pip: 20.3.3-py36h06a4308_0
python: 3.6.8-h0371630_0
python-dateutil: 2.8.1-pyhd3eb1b0_0
pytz: 2021.1-pyhd3eb1b0_0
readline: 7.0-h7b6447c_5
setuptools: 52.0.0-py36h06a4308_0
six: 1.15.0-pyhd3eb1b0_0
sqlite: 3.33.0-h62c20be_0
tk: 8.6.10-hbc83047_0
wheel: 0.36.2-pyhd3eb1b0_0
xz: 5.2.5-h7b6447c_0
zlib: 1.2.11-h7b6447c_3
Proceed ([y]/n)? y
Downloading and Extracting Packages
libffi-3.2.1 | 52 KB | ##################################### | 100%
python-3.6.8 | 34.4 MB | ##################################### | 100%
libgcc-ng-9.1.0 | 8.1 MB | ##################################### | 100%
libstdcxx-ng-9.1.0 | 4.0 MB | ##################################### | 100%
blas-1.0 | 6 KB | ##################################### | 100%
_libgcc_mutex-0.1 | 3 KB | ##################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment,use
#
# $ conda activate cenv-py368
#
# To deactivate an active environment,use
#
# $ conda deactivate
-
激活那个环境。
-
例如安装名为“fastparquet”的包:
(cenv-py368) $ conda install fastparquet
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.5.12
latest version: 4.9.2
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/pauljohn/LinuxDownloads/miniconda3/envs/cenv-py368
added / updated specs:
- fastparquet
The following packages will be downloaded:
package | build
---------------------------|-----------------
pyparsing-2.4.7 | pyhd3eb1b0_0 59 KB
packaging-20.9 | pyhd3eb1b0_0 35 KB
------------------------------------------------------------
Total: 95 KB
The following NEW packages will be INSTALLED:
fastparquet: 0.5.0-py36h6323ea4_1
libllvm10: 10.0.1-hbcb73fb_5
llvmlite: 0.34.0-py36h269e1b5_4
numba: 0.51.2-py36h0573a6f_1
packaging: 20.9-pyhd3eb1b0_0
pyparsing: 2.4.7-pyhd3eb1b0_0
thrift: 0.11.0-py36hf484d3e_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
pyparsing-2.4.7 | 59 KB | ##################################### | 100%
packaging-20.9 | 35 KB | ##################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
- 观察导入失败
(cenv-py368) $ python
Python 3.6.8 |Anaconda,Inc.| (default,Dec 30 2018,01:22:34)
[GCC 7.3.0] on linux
Type "help","copyright","credits" or "license" for more information.
>>> import fastparquet
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "/home/pauljohn/LinuxDownloads/miniconda3/envs/cenv-py368/lib/python3.6/site-packages/fastparquet/__init__.py",line 5,in <module>
from .core import read_thrift
File "/home/pauljohn/LinuxDownloads/miniconda3/envs/cenv-py368/lib/python3.6/site-packages/fastparquet/core.py",line 9,in <module>
from . import encoding
File "/home/pauljohn/LinuxDownloads/miniconda3/envs/cenv-py368/lib/python3.6/site-packages/fastparquet/encoding.py",line 13,in <module>
from .speedups import unpack_byte_array
File "fastparquet/speedups.pyx",in init fastparquet.speedups
ValueError: numpy.ufunc size changed,may indicate binary incompatibility. Expected 216 from C header,got 192 from PyObject
>>> AA
似乎 Conda 应该可以工作,或者应该说没有兼容的 fastparquet 版本。
解决方法
该错误通常表明 NumPy 比与使用它的库兼容的旧,在本例中为 fastparquet
。尝试将 Python 版本更新到 3.7 或 3.8; Python 3.6 和 NumPy 1.15 不在今天的推荐版本内。 (将 Python 更新到 3.7+ 也应该更新 NumPy;当您执行 conda update ...
时通常不会这样做)。一些食谱固定到 >=
某个最低版本,这个似乎没有。
https://numpy.org/neps/nep-0029-deprecation_policy.html#support-table
,这是您正在导入的某些 Python 库的准备过程中的一个缺陷。当像 fastparquet 这样的包的作者没有为他们的包正确设置 numpy 或 python 的最低兼容版本时,Conda 环境协调无法知道包是不正确的。 Conda 提供了该软件包作为解决方案,但实际上并非如此。
从更大的意义上讲,这是 Conda 查找兼容包方式的缺陷。也许它按预期工作,所以它不是一个错误。但这是一个缺陷,从某种意义上说,当用户定位 numpy=1.15 时,Conda 的正确答案应该是“没有兼容的包”。但是,由于 Conda 依赖于贡献包的版本依赖,因此无法做到这一点。
我在为 RedHat 或 Debian Linux 系统打包时没有遇到过同样的问题,他们倾向于报告“没有”而不是提供不准确的匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。