gpt4 book ai didi

Python子模块在python 3.7中正确导入但不是3.6

转载 作者:行者123 更新时间:2023-12-03 16:20:59 27 4
gpt4 key购买 nike

我的目录结构如下:

test/
__init__.py
m1/
__init__.py
f1.py
f2.py
test/__init__.py是空的。 test/m1/__init__.py包含单行 import test.m1.f1 . test/m1/f1.py包含单行 import test.m1.f2 as f2 .
在 python 3.7.6 中,我可以做 import test.m1一切都按预期工作。但是,在 python 3.6.9 中,当我尝试此操作时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/scratch/test/m1/__init__.py", line 2, in <module>
import test.m1.f1
File "/home/scratch/test/m1/f1.py", line 1, in <module>
import test.m1.f2 as f2
AttributeError: module 'test' has no attribute 'm1'
这看起来很奇怪,因为它在 import test.m1.f1 上没有错误。 ,这是它遇到的第一件事。它在随后的 import test.m1.f2 as f2 上出错声明,声称 test没有 m1子模块。

最佳答案

import test.m1.f2 as f2尝试访问 m1 test 的属性模块对象,作为查找要绑定(bind)到 f2 的对象过程的一部分. m1test.m1 之前不会设置属性子包完成初始化,直到 __init__.py对于 test.m1完成执行。
On Python 3.7 and up ,如果属性查找失败,导入回退到 sys.modules['test.m1.f2']查找 test.m1.f2 .这种回退在 3.6 上不存在,导致观察到的差异。
A similar fallback也存在于通知 from在 Python 3.5 及更高版本上导入,但 from . import f2from test.m1 import f2不需要后备。 from导入检索 test.m1直接来自 sys.modules ,所以它只寻找 f2属性,并且该属性存在。

关于Python子模块在python 3.7中正确导入但不是3.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62524794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com