无法在 cygwin 中导入 numpy

Not able to import numpy in cygwin

我已经使用 cygwin 安装程序安装了 numpy,它显示为已成功安装。但是我无法在我的程序中导入它。

Traceback (most recent call last):
File "pythonpath.py", line 1, in <module>
import numpy
File "/usr/lib/python2.7/site-packages/numpy/__init__.py", line 170, in <module>
from . import add_newdocs
File "/usr/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/site-packages/numpy/lib/__init__.py", line 18, in <module>
from .polynomial import *
File "/usr/lib/python2.7/site-packages/numpy/lib/polynomial.py", line 19, in <module>
from numpy.linalg import eigvals, lstsq, inv
File "/usr/lib/python2.7/site-packages/numpy/linalg/__init__.py", line 51, in <module>
from .linalg import *
File "/usr/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 29, in <module>
from numpy.linalg import lapack_lite, _umath_linalg
ImportError: No such file or directory

我查了一下,lapack_lite.dll_umath_linalg.dll都可以在/lib/python2.7/site-packages/numpy/linalg

下找到

当我尝试重新安装 numpy 时,我收到以下消息:

$ pip install numpy
Requirement already satisfied: numpy in /usr/lib/python2.7/site-packages

包也是最新的。

 $ pip install numpy --upgrade
 Requirement already up-to-date: numpy in /usr/lib/python2.7/site-packages

如何在我的程序中导入 numpy?

我只是重新启动了我的系统,错误消失了!

我现在 Python 3.8 遇到了同样的情况。不幸的是重启没有帮助。但我找到了解决方案:

# cygcheck /usr/lib/python3.8/site-packages/numpy/linalg/lapack_lite.cpython-38-x86_64-cygwin.dll

--> cygcheck: track_down: 找不到 cyglap​​ack-0.dll

解决方案:

# cp /usr/lib/lapack/cyglapack-0.dll /bin

之后在/bin中找到cyglap​​ack-0.dll,因为它在PATH中。

$PATH 设置为:

 $ PATH=/usr/lib/lapack:$PATH

在 Cygwin 上 Python 3.63.8 上测试。

备注:

  1. 此解决方案与Cygwin中Python 2.7 2018年中给出的解决方案相同。

  2. post 中的 OP 有不同的错误消息:回溯的倒数第二行读取 from . import multiarray,而不是 from numpy.linalg import lapack_lite, _umath_linalg

  3. speedolli 的 对我来说失败了,随后出现错误 __all__ += type_check.__all__ // NameError: name 'type_check' is not defined(无论如何复制文件都是一个坏主意)。

  4. 重新启动(这个 OP 自己接受的解决方案)对我没有帮助,各种重新安装等也没有帮助

更新:

将新目录放在 $PATH:

end 可能更谨慎
 $ PATH=$PATH:/usr/lib/lapack

我的系统上有两个个版本的blas

$ /bin/ls -la /usr/lib/lapack/
total 7612
drwxr-xr-x+ 1 Joe None       0 Jan  8 12:02 .
drwxr-xr-x+ 1 Joe None       0 Jan  8 14:52 ..
-rwxr-xr-x  1 Joe None  461331 Nov 29 17:27 cygblas-0.dll
-rwxr-xr-x  1 Joe None 7308307 Nov 29 17:28 cyglapack-0.dll
$ /bin/ls -la /usr/bin/cygblas*
-rwxr-xr-x 1 Joe None 21716499 Dec 21 23:19 /usr/bin/cygblas-0.dll

post https://cygwin.com/pipermail/cygwin-announce/2020-July/009613.html 似乎建议(但我不是专家)我们应该使用 /usr/bin 一个:

libopenblas consist of a single file /usr/bin/cygblas-0.dll that will precede in PATH the liblapack0 /usr/lib/lapack/cygblas-0.dll and used instead. Removing libopenblas will restore the usage of Netlib BLAS