python - 解释为什么不应从源目录导入 numpy

标签 python import numpy matplotlib directory

研究免责声明:

我检查了以下其他 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 答案是:

The message is fairly self-explanatory; your working directory should not be the numpy source directory when you invoke Python; numpy should be installed and your working directory should be anything but the directory where it lives.

但是,我不明白这一点。难道你不应该导入你想要使用的东西吗?我假设 import 命令在此语句中将源目录合并到您当前的工作目录中。

我还阅读了其他答案,例如:

  • 使用distutils安装本地目录

  • 使用virtualenv创建虚拟系统目录

  • 使用 Enthought 的 EPD 将 numpy 预安装在我认为是系统目录的地方, 和

  • 使用像 $ dpkg -i --force-not-root --root=$HOME mypackagename.deb 这样的命令来创建我认为是某种子系统目录被视为系统目录。

所以,如果我错了,请纠正我,但是 numpy 是否强烈要求以某种方式安装在主系统目录中?

机器状态:

我正在使用没有管理权限的 Windows 机器。 他们安装了 Python 3.3 Shell 和 matplotlib。 运行命令提示符时,无法识别 pythonpython3。我必须从应用程序菜单运行 Python shell。 我什至可以从我自己的目录成功开始导入 matplotlib,这与他们的目录不同,但它会在到达 numpy 模块的 __init__.py 时停止,如果它存在并报告上述错误。

更新:

幸运的是,我的管理员能够直接在 site-packages 文件夹中正确安装 numpy。谢谢你回答我的问题。因为有你,我更加了解了情况。

最佳答案

numpy 包括用 C 编写的扩展模块。您需要在 numpy 包完成之前构建这些扩展模块。最稳健的方法是像往常一样构建它并将其安装到 site-packages。您还可以使用 standard distutils options for this 将其安装到另一个目录。 .但是,一旦安装了它,就应该将目录从源代码树中移出。 Python 开始在您的当前目录中寻找包,因此将首先选择不完整的 numpy 包(没有必要的内置 C 扩展模块),并导致您引用的错误消息。这种情况经常发生,因此我们会给出一条很长的消息来解释该怎么做。

关于python - 解释为什么不应从源目录导入 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570011/

相关文章:

python - 无法在 Opencv2 上导入 cv

numpy - 在 numpy/tensorflow 中向量化不同形状矩阵的乘法

python - 如何从Python列表的每个位置提取数字

python - 如何从 Canvas 中获取所有像素?

python - 使用 SciPy 数值求解 ODE

python - .get() 之后多处理陷入困境

javascript 包括 math.js

excel - 将 Excel 电子表格数据导入另一个包含 VBA 的 Excel 电子表格

sql - 如何使用批量插入仅根据文件扩展名导入文件?

python - numpy.all() 和空数组