这是我第一次真正坐下来尝试Python3,但似乎失败得很惨。我有以下两个文件:
- test.py
- 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文件