从pyxdameraulevenshtein导入会出现以下错误

pyxdameraulevenshtein==1.5.3
pandas==1.1.4
scikit-learn==0.20.2. 

Numpy是1.16.1。

在Python 3.6中工作良好,在Python 3.7中问题。

有人在使用Python 3.7(3.7.9)时遇到过类似的问题吗?

from pyxdameraulevenshtein import normalized_damerau_levenshtein_distance as norm_dl_dist
__init__.pxd:242: in init pyxdameraulevenshtein
    ???
E   ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

当前回答

的确,(构建和)安装numpy>=1.20.0应该可以工作,如下面的答案所指出的。然而,我认为一些背景可能会很有趣,并提供替代解决方案。

numpy 1.20.0中的C API发生了变化。在某些情况下,pip似乎下载了numpy的最新版本用于构建阶段,但随后该程序使用已安装的numpy版本运行。如果在<1.20中使用的构建版本,但安装的版本是=>1.20,这将导致一个错误。

(反过来说也没关系,因为向后兼容。但是如果用户使用的是numpy<1.20的安装版本,他们就不会预料到即将到来的更改。)

这就引出了解决问题的几种可能方法:

升级(构建版本)到numpy>=1.20.0 在pyproject中使用最小支持的numpy版本。toml (oldest-supported-numpy) 使用——no-binary安装 使用——no-build-isolation安装

有关潜在解决方案的更详细讨论,请参见 https://github.com/scikit-learn-contrib/hdbscan/issues/457 # issuecomment - 773671043。

其他回答

我有这个问题,但无法更新numpy,因为一些不兼容的冲突,另一个包,我需要numpy<=1.21.0。错误numpy。Ndarray大小改变,可能表明二进制不兼容是由个人包生成的。解决方案是修改pyproject。我的包和设置Toml文件:

requires = ["numpy==1.21.0", <other packages>]

之前设置为“numpy>=1.21.0”,导致错误。

对于任何使用诗歌的人来说,有必要进行实验。对于numpy<1.20依赖项的应用程序,New-installer设置为true才能正确构建,即:

poetry config experimental.new-installer true

默认情况下是正确的,但如果它被改变了(就像我的情况一样),它会让你识破。

我的应用程序使用Tensorflow,因此我没有升级到>1.20的选项。诗歌也不支持无二进制依赖。

对于几乎相同的图像:python:3.7-slim-buster

我今天才开始有这个问题,以前是不存在的。

我通过从require .txt文件中删除numpy来解决这个问题,并在我的Dockerfile中执行以下操作:

RUN pip3 install --upgrade  --no-binary numpy==1.18.1 numpy==1.18.1 \
&& pip3 install -r requirements.txt 

我使用了一些旧版本的keras和它的库,升级到numpy 1.20.0对这些库不起作用。但我认为解决方案包含在我给你的第一个命令中,它告诉pip不要编译numpy,而是下载一个预编译的版本。

命令中的技巧是,您可能会发现有人告诉您使用pip的——no-binary选项来解决问题,但他们没有指定如何解决问题,这可能很棘手(就像我遇到的那样);您必须在命令中编写两次包才能使其工作,否则PIP将向您抛出一个错误。

我认为第一个命令中的——upgrade选项是不必要的。

在你安装任何包之后,确保你重新启动内核并且应该工作。通常包会自动升级,你所需要的只是快速重启。至少,这在我的情况下工作,当我试图安装和使用石榴时,我得到了同样的错误。

对我有用的是:

pip uninstall numpy
conda install -y -c conda-forge numpy

虽然听起来很奇怪……我甚至不需要用Conda卸载它,这对我来说似乎很奇怪。我使用的是python 3.9