我具有以下文件夹结构:
MyApp # project folder
MyApp # source folder
__init.py__ # empty, just here to mark the MyApp folder as a package
MyApp.py # actual program
_Config.py
_Implementation
_ImplementationFile.py
MyApp.py是实际程序,并且是正在执行的脚本。
# MyApp.py
from MyApp import _Config
from MyApp._Implementation._ImplementationFile import _ImplementationClass
此操作因ImportError cannot import _Config from MyApp (<path>\\MyApp\\MyApp\\MyApp.py)
而中断。
错误很简单:Python尝试从MyApp.py而不是从其包含MyApp的文件夹中导入所有这些内容。将MyApp文件夹重命名为MyApp1可以消除该错误,从而确认问题的根源。
决议是我开始提出问题的地方。我想使用绝对导入来避免获取我的文件中的歧义,因为我还导入了一些带有自己的_Config文件等的不同库脚本。我也想保持MyApp文件夹和模块名称完整无缺,因为程序的名称。
从this question中,我了解到在检查导入时,程序包应优先于模块。 Python documentation似乎支持这一点:
导入名为垃圾邮件的模块时,解释器首先搜索 具有该名称的内置模块。如果找不到,则进行搜索 在目录给定的目录列表中查找名为spam.py的文件 变量sys.path。 sys.path从以下位置初始化:
包含输入脚本的目录(如果未指定文件,则为当前目录)。
“包含输入脚本的目录”应该是MyApp文件夹。