我有以下目录结构:
funniest/
setup.py
funniest/
__init__.py
ModuleA.py
ModuleB.py
^{pr2}$
# ModuleA.py
import funniest.ModuleB
class ClassA():
pass
# ModuleB.py
@jit
def f():
pass
但是,当导入模块时,我收到错误消息:
>>> import funniest
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest /__init__.py", line 2, in <module>
from .ModuleA import ClassA
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest /ModuleA.py", line 1, in <module>
import funniest.ModuleB
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest/ModuleB.py", line 1, in <module>
@jit
NameError: name 'jit' is not defined
我不明白为什么会发生这种情况,因为当__init__.py
首先执行时,它所做的第一件事就是导入from numba import jit
。那么,当涉及到ModuleB
中的函数f
时,为什么没有定义{
放在
funniest/__init__.py
中的导入仅在import funniest
时导入,而不是自动在子模块中导入。所以ModuleB
不知道jit
。在您需要做的是将}。在
from numba import jit
从__init__.py
移动到{名称
jit
在ModuleB
中未知。Python导入不象C/C++那样工作,它将取代L{因此,当您执行},因此从导入
import funniest
操作时,您在当前名称空间中创建了新的映射条目,如:{..., funniest: {}, ...}
。通过导入funniest
,您导入了jit
和{funniest
模块的地方,您可以访问这样的映射:funniest: {jit: {..}, ClassA: {...}}
。在在
ModuleA
中导入了ModuleB
,因此在ModuleA
中有一个新变量ModuleB:{...}
,其内容为ModuleB
。但是在这里您看不到funniest
映射-它在层次结构的其他级别。在在}映射(名称空间-以及您喜欢称之为的任何名称;)。在
ModuleB
中,您看不到funniest
和{相关问题 更多 >
编程相关推荐