解释为何不应从源目录导入numpy
研究免责声明:
我查看了以下其他的StackOverflow问题:
也许对某些人来说,这些问题的回答能解决我的疑问,但根据我的理解,我还是不太明白情况。
我想导入numpy,以便matplotlib可以正常工作,但在执行numpy文件夹中的__init__.py
文件时,出现了以下错误信息:
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python intepreter from there.
请解释一下从源目录导入东西和其他导入方式的区别。这是否意味着导入时不应该是源代码?还是说我导入的目录/文件夹确实是错误的?我知道另一个StackOverflow的回答是:
这个信息其实很容易理解;当你调用Python时,你的工作目录不应该是numpy的源目录;numpy应该已经安装好,而你的工作目录应该是除了它所在的目录以外的任何地方。
然而,我对此不太理解。难道不是应该导入你想要使用的东西吗?我假设导入命令会把源目录合并到你当前的工作目录中。
我还读到其他一些回答,比如:
使用
distutils
来安装本地目录使用
virtualenv
创建一个虚拟系统目录使用Enthought的EPD来预装numpy,我认为这是系统目录,
使用类似
$ dpkg -i --force-not-root --root=$HOME mypackagename.deb
的命令来创建我认为是某种子系统目录的东西,它被当作系统目录处理。
所以,如果我错了请纠正我,但numpy是否确实需要安装在主系统目录中?
机器状态:
我使用的是没有管理员权限的Windows机器。它们安装了Python 3.3 Shell和matplotlib。当我运行命令提示符时,python
和python3
都无法识别。我必须从应用程序菜单中运行Python shell。我可以成功地从我自己的目录导入matplotlib,但在到达numpy模块的__init__.py
时,如果存在的话,就会停止,并报告上述错误。
更新:
幸运的是,我的管理员能够直接在site-packages
文件夹中正确安装numpy。谢谢你回答我的问题。因为你,我对情况有了更多的了解。
2 个回答
我在树莓派上遇到了这个错误。为了修复它,我需要安装一个依赖项:
sudo apt-get install libopenblas-dev
numpy是一个包含用C语言写的扩展模块的库。在你完成numpy这个包之前,需要先构建这些扩展模块。最稳妥的方法是像平常一样把它构建并安装到site-packages
目录里。你也可以用标准的distutils选项把它安装到其他目录。不过,一旦你安装完成后,最好不要再待在源代码的目录里。因为Python会在你当前的目录中寻找包,所以如果这个不完整的numpy包(缺少必要的C扩展模块)还在,就会优先被找到,这样就会出现你提到的错误信息。这种情况很常见,所以我们给出了详细的说明,告诉你该怎么做。