为什么导入在这里不起作用?

why import is not working here?

我正在构建 numpy 并且想知道为什么他们在 here 中使用了相对导入。为什么他们使用相对导入而不是像 import fft 这样的直接导入(比方说)。

我认为直接导入会起作用,所以克隆它并将源 line 197 更改为

import fft

,但没有用。它抛出错误

ImportError: No module named fft

为什么即使在 same folder as numpy __init__.py 中也找不到 fft 模块。

所以我模拟了一个类似的环境,看看为什么它不起作用。我在其中创建了模块(mod1)和另一个(mod2)。从 mod1 __init__.py 我导入了 mod2,最后将包含模块 mod1 的文件夹添加到 python 路径。 然后写了一个 python 脚本作为 sample.py 其中包含

import mod1 

并且一切正常,无需相对导入。

但为什么它在 numpy 中不起作用?

注意:我在 virtual-env 中有 numpy。这会造成麻烦吗?

调试更新:

import numpy.fft 

成功了。我检查了“__name__”,它是 numpy 。但是为什么需要 "numpy." 因为它已经在 numpy 模块中了???更重要的是,由于 __name__ 被设置为 numpy,它应该能够找出 it.Confused 中的 fft 模块为什么它不起作用......我用来模拟的例子是相同的场景尽管 mod2 在 mod1 中,但我只是使用了 import mod2 而我不必执行 import mod1.mod2

这一行是你的问题:

from __future__ import absolute_import

当此 future 语句处于活动状态时,您不能使用隐式相对导入。您必须 使用完全绝对导入 (import numpy.fft) 或显式相对导入 (from . import fft)。有关此问题的进一步讨论,请参阅 PEP 328