io.-6ren">
gpt4 book ai didi

Python 和冲突的模块名称

转载 作者:太空狗 更新时间:2023-10-30 00:55:09 27 4
gpt4 key购买 nike

似乎如果一个名为 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

这是 SciPy 中的错误,还是我使用的 Python 有误?

更新:如果 mod1 中的 import mod2 解析相对于 mod1 的路径,我认为不那么令人惊讶的行为而不是相对于导入 mod1 的任何人。

最佳答案

简单的解决方法是避免将模块命名为 io,因为它与核心库模块名称冲突。

这并不是 numpy 中的真正错误,而是用户错误:就像我们不应该使用 list 作为变量名一样,因为它隐藏了内置的 list 名称,我们不应使用 io 作为模块名称,因为它隐藏了核心库 io 模块名称。

看这部分:

  File "/usr/lib/python2.7/dist-packages/numpy/lib/format.py", line 141, in <module>
import io

此处 numpy 尝试导入 io module .这是为了找到 stdlib io 因为绝对导入 - 一个 numpy 子模块将被加载 relative 导入就像你在回溯中看到的那样有另一行开始 from .npyio import *

当然是先找到自己的io.py模块,因为在当前工作目录下一般是sys.path中的第一个入口。哎呀!

关于Python 和冲突的模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com