我正在构建numpy,并想知道他们为什么使用here内的相对导入。为什么他们使用相对进口而不是直接进口,如import fft(比方说)。
我认为直接导入会起作用,所以克隆它并将源line 197更改为
import fft
,但它没有用。它把错误扔为
ImportError:没有名为fft的模块
为什么即使它位于same folder as numpy __init__.py中也无法找到fft模块。
所以我模拟了一个类似的环境,看看为什么它不起作用。我在其中创建了模块(mod1)和另一个(mod2)。从mod1 __init__.py我导入mod2,最后将包含模块mod1的文件夹添加到python路径。 然后编写了一个包含
的sample.py的python脚本import mod1
一切正常,无需相对导入。
但是为什么它不能在numpy里面工作?
注意:我在virtual-env中有numpy。这会造成麻烦吗?
调试更新:
import numpy.fft
工作。我检查了“__name__”,它很笨拙。但为什么“numpy”。是必要的,因为它已经在numpy模块???更重要的是,因为__name__被设置为numpy,它应该能够找出其中的fft模块。为什么它不起作用的概念...我以前用来模拟的例子是我刚刚使用导入的相同场景mod2虽然mod2在mod1里面,但我没有必要导入mod1.mod2
答案 0 :(得分:5)
这一行是你的问题:
from __future__ import absolute_import
当此future语句处于活动状态时,无法使用隐式相对导入。您必须使用完全绝对导入(import numpy.fft
)或显式相对导入(from . import fft
)。有关详细信息,请参阅PEP 328。