我在根包中有一个包含 3 个嵌套包的项目
clsgen
-__init__.py
-main.py
-parsing
-__init__.py
- class1.py
- class2.py
-generator
-__init__.py
-some_class_files
-...
-utils
-__init__.py
-some_modules
-...
在导入和使用包时,我遇到了很多困难(通常使用 python - 可能是 Java/Eclipse 在我的选择中唯一正确的做法)。最近,我可以通过使用相对导入来滑冰,from .details import Details
比如说:从当前包/目录中的一个模块,称为 details,导入名为“Details”的类。我为程序添加了一些新的(可能是破坏性的)更改,现在,上面相同的相对导入行不再起作用。似乎解释器认为我的包是模块,所以我不能使用绝对导入。
例如,如果我将导入更改为:
from parsing.details import Details
我收到此错误:
>>> %Run class_dict.py
Traceback (most recent call last):
File "C:\Users\Ben\VsCode\python\classgenerator\parsing\class_dict.py", line 12, in <module>
from parsing.details import Details
File "C:\Users\Ben\AppData\Local\Programs\Thonny\lib\site-packages\thonny\backend.py", line 305, in _custom_import
module = self._original_import(*args, **kw)
ModuleNotFoundError: No module named 'parsing'
我什至尝试过根据需要覆盖内置包,比如
__package__ = "parsing"
from parsing.details import Details
我非常有信心我的项目打包结构设置正确(如上面的第一个示例所示(但更详细))。而且我也非常有信心我理解包、模块、相对导入和绝对导入的概念。然而,每当我尝试使用 Python 制作多包程序时,这个问题一直困扰着我。我非常感谢有人指出错误或建议我可以采取哪些措施来缓解这个持续存在的问题。