为什么进口不在这里?

时间:2015-04-14 14:57:52

标签: python python-2.7 python-import

我正在构建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

1 个答案:

答案 0 :(得分:5)

这一行是你的问题:

from __future__ import absolute_import

当此future语句处于活动状态时,无法使用隐式相对导入。您必须使用完全绝对导入(import numpy.fft)或显式相对导入(from . import fft)。有关详细信息,请参阅PEP 328