正在导入在优init_uu.py中的包中使用的模块

2024-05-20 22:27:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下目录结构:

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时,为什么没有定义{}?在


Tags: inpyimporthomeinitlinejitfile
2条回答

放在funniest/__init__.py中的导入仅在import funniest时导入,而不是自动在子模块中导入。所以ModuleB不知道jit。在

您需要做的是将from numba import jit__init__.py移动到{}。在

名称jitModuleB中未知。Python导入不象C/C++那样工作,它将取代L{

因此,当您执行import funniest操作时,您在当前名称空间中创建了新的映射条目,如:{..., funniest: {}, ...}。通过导入funniest,您导入了jit和{},因此从导入funniest模块的地方,您可以访问这样的映射:funniest: {jit: {..}, ClassA: {...}}。在

ModuleA中导入了ModuleB,因此在ModuleA中有一个新变量ModuleB:{...},其内容为ModuleB。但是在这里您看不到funniest映射-它在层次结构的其他级别。在

ModuleB中,您看不到funniest和{}映射(名称空间-以及您喜欢称之为的任何名称;)。在

相关问题 更多 >