Max*_*axB 5 python numpy scipy
似乎如果一个文件被调用io.py并且它被导入scipy.ndimage,后者在某种程度上最终无法找到它自己的子模块,也被称为io:
$ echo "import scipy.ndimage" > io.py
$ python io.py
Traceback (most recent call last):
File "io.py", line 1, in <module>
import scipy.ndimage
File "/usr/lib/python2.7/dist-packages/scipy/__init__.py", line 70, in <module>
from numpy import show_config as show_numpy_config
File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
from . import add_newdocs
File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 22, in <module>
from .npyio import *
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 4, in <module>
from . import format
File "/usr/lib/python2.7/dist-packages/numpy/lib/format.py", line 141, in <module>
import io
File "/tmp/rm_me/io.py", line 1, in <module>
import scipy.ndimage
File "/usr/lib/python2.7/dist-packages/scipy/ndimage/__init__.py", line 172, in <module>
from .filters import *
File "/usr/lib/python2.7/dist-packages/scipy/ndimage/filters.py", line 37, in <module>
from scipy.misc import doccer
File "/usr/lib/python2.7/dist-packages/scipy/misc/__init__.py", line 45, in <module>
from .common import *
File "/usr/lib/python2.7/dist-packages/scipy/misc/common.py", line 10, in <module>
from numpy import exp, log, asarray, arange, newaxis, hstack, product, array, \
ImportError: cannot import name exp
Run Code Online (Sandbox Code Playgroud)
这是一个错误SciPy,还是我使用Python错了?
更新:我认为如果import mod2在已mod1解决的路径中相对于mod1导入而不是相对于导入的路径,则会出现不太令人惊讶的行为mod1.
简单的解决方法是避免命名您的 module io,因为它与核心库模块名称冲突。
这实际上不是 numpy 中的错误,而是用户错误:正如我们不应该将其list用作变量名,因为它遮蔽了内置list名称,我们不应该将其io用作模块名称,因为它遮蔽了核心库io模块名称。
看这部分:
File "/usr/lib/python2.7/dist-packages/numpy/lib/format.py", line 141, in <module>
import io
Run Code Online (Sandbox Code Playgroud)
这里numpy尝试导入io模块。io由于绝对导入,这是为了找到 stdlib - 一个 numpy 子模块将加载相对导入,就像您在回溯中看到的那样,那里有另一行开始from .npyio import *。
当然你自己的io.py模块是最先找到的,因为在当前工作目录中一般是sys.path. 哎呀!
你使用Python是错误的。
在创建任何顶级 python 模块或包之前,应确保尚不存在同名的模块或包。
这里最好的解决方案是不使用顶级模块,而是将所有内容放在__init__.py以项目命名的单个顶级包中(即带有文件的目录)。
要检查顶级模块或包是否存在,您可以尝试import在解释器中对其进行 ing,或者pydoc name从 shell 运行。
值得注意的是,如果包使用绝对样式导入语法来执行相对导入,则可能会发生一个非常相似的错误,但这不是您的错。这个“特性”在Python3中被删除了。
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |