gpt4 book ai didi

python - Python 3 中的相对导入问题

转载 作者:太空狗 更新时间:2023-10-29 17:45:36 26 4
gpt4 key购买 nike

Python 导入让我发疯(我对 python 导入的体验有时与成语“显式优于隐式”完全不符 :( ):

[app]
start.py
from package1 import module1
[package1]
__init__.py
print('Init package1')
module1.py
print('Init package1.module1')
from . import module2
module2.py
print('Init package1.module2')
import sys, pprint
pprint.pprint(sys.modules)
from . import module1

我得到:

vic@ubuntu:~/Desktop/app2$ python3 start.py 
Init package1
Init package1.module1
Init package1.module2
{'__main__': <module '__main__' from 'start.py'>,
...
'package1': <module 'package1' from '/home/vic/Desktop/app2/package1/__init__.py'>,
'package1.module1': <module 'package1.module1' from '/home/vic/Desktop/app2/package1/module1.py'>,
'package1.module2': <module 'package1.module2' from '/home/vic/Desktop/app2/package1/module2.py'>,
...
Traceback (most recent call last):
File "start.py", line 3, in <module>
from package1 import module1
File "/home/vic/Desktop/app2/package1/module1.py", line 3, in <module>
from . import module2
File "/home/vic/Desktop/app2/package1/module2.py", line 5, in <module>
from . import module1
ImportError: cannot import name module1
vic@ubuntu:~/Desktop/app2$

import package1.module1有效,但我想使用 from . import module1因为我想制作package1对于我的其他应用程序来说是可移植的,这就是我想使用相对路径的原因。

我正在使用 python 3。

我需要循环导入。模块 1 中的函数断言其参数之一是模块 2 中定义的类的实例,反之亦然。

换句话说:

sys.modules包含 'package1.module1': <module 'package1.module1' from '/home/vic/Desktop/app2/package1/module1.py'> .我想以 from . import module1 的形式获得对它的引用, 但它会尝试获取名称,而不是像 import package1.module1 那样的包(效果很好)。我试过 import .module1 as m1 - 但这是一个语法错误。

此外,from . import module2module1工作正常,但是 from . import module1module2不工作...

更新:

这个 hack 有效(但我正在寻找“官方”方式):

print('Init package1.module2')

import sys, pprint
pprint.pprint(sys.modules)

#from . import module1
parent_module_name = __name__.rpartition('.')[0]
module1 = sys.modules[parent_module_name + '.module1']

最佳答案

解决您的问题的更好方法是将 package1 放在它自己的单独包中。当然它不能导入 package2,但是如果它是可重用的,为什么会这样呢?

关于python - Python 3 中的相对导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030264/

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