我已经把我写的一个项目从一个文件分为几个文件 问题是,我创建了大约50个类,这些类是从主文件调用的,我不想重写所有这些类引用,并在每个类之前添加模块名
我试图通过1个包(令牌)访问所有这些类
所以我有
Main.py
Tokens /
__init__.py
Gen.py
BuilltIns.py
其思想是用所有类填充包命名空间,然后在Main.py中导入包
__init__.py:
from Gen import *
from BuilltIns import *
Main.py:
from Tokens import *
当我运行__init__
时,它运行得非常好,dir()
显示所有类名都被导入到包namepace
但是,当我运行Main.py
时,会收到错误消息:
Traceback (most recent call last):
File "../Main.py", line 1, in <module>
from Tokens import *
File "..\Tokens\__init__.py", line 1, in <module>
from Gen import *
ModuleNotFoundError: No module named 'Gen'
如何从Main.py中提取60多个类到其他模块,而不重写这些类的所有调用
您应该使用
from Tokens.Gen import ...
,因为Tokens
是Gen
模块所在的包。导入路径应该相对于主脚本,除非修改了sys.path
以指定导入期间要搜索的其他目录或者,在
Tokens/__init__.py
中可以执行from .Gen import *
(注意.
前面的Gen
)。这表示relative import。运行主脚本时会发生的情况是,当前工作目录被添加到导入期间要搜索的路径中,因此当遇到from Gen import ...
时,只搜索默认位置(不包括Tokens
目录)。通过使用相对导入,您可以告诉Python在哪里可以找到与当前模块相对的模块请注意,您可以在^{} 中定义类,以便约束在
from ... import *
期间导入的内容。这样就不会在主脚本的命名空间中泄漏其他名称相关问题 更多 >
编程相关推荐