相对导入-ModuleNotFoundError:没有名为x的模块

这是我第一次真正坐下来尝试Python3,但似乎失败得很惨。我有以下两个文件:

  1. test.py
  2. config.py

config.py中定义了一些函数和一些变量。我将其精简为以下内容:

config.py

debug=True

test.py

导入配置
打印(config.debug)

我还有一个\uuuu init\uuuu.py

但是,我得到了以下错误:

ModuleNotFoundError:没有名为'config'的模块

我知道py3公约使用绝对进口:

来自的

。导入配置

但是,这会导致以下错误:

导入错误:无法导入名称“config”

所以我不知道在这里该做什么。。。非常感谢您的帮助。:)

TL;DR:您无法从执行的文件执行相对导入,因为\uuuu main\uuu模块不是包的一部分

绝对导入-导入sys.path

相对导入-导入与当前模块相关的内容,必须是包的一部分

如果您以完全相同的方式运行两个变体,那么其中一个应该可以工作。下面是一个例子,可以帮助您了解发生了什么。让我们添加另一个main.py文件,其总体目录结构如下:

。
/main.py
/ryan/\uuuu初始值\uuuuu.py
/ryan/config.py
/ryan/test.py

让我们更新test.py,看看发生了什么:

#config.py
调试=真
#test.py
打印(名称)
尝试:
#正在尝试在父包中查找模块
从…起导入配置
打印(config.debug)
del-config
除恐怖外:
打印('相对导入失败')
尝试:
#正在尝试在sys.path上查找模块
导入配置
打印(config.debug)
除ModuleNotFoundError外:
打印('绝对导入失败')
#main.py
导入ryan.test

让我们先运行test.py

$python/test.py
__主要__
相对导入失败
符合事实的

“这里”;测试“\uuuu main\uuuu模块,不知道属于某个包的任何信息。但是,import config应该可以工作,因为ryan文件夹将被添加到sys.path

让我们运行main.py

$python main.py
瑞安,测试
符合事实的
绝对导入失败

这里的测试是在;“瑞安”;包并可以执行相对导入导入配置失败,因为Python 3中不允许隐式相对导入

希望这有帮助

注意:如果您坚持使用Python3,那么就不再需要\uuu init\uuu.py文件

发表评论