Python 重复导入的问题

2021-09-17 13:42:17 +08:00
 911061873

项目目录如下

│ a.py
└─api
	b.py
	__init__.py

a 中的内容

from api.b import test
aaa = 'a'
test()

b 中的内容

from a import aaa
def test():
    print(aaa)

现在执行 a 就提示导入重复。不知道怎么解决

1821 次点击
所在节点    Python
11 条回复
yunyuyuan
2021-09-17 13:47:25 +08:00
a 改成
```python
aaa = 'a'
from api.b import test
test()
```
911061873
2021-09-17 13:49:55 +08:00
@yunyuyuan 如果只是换了下位置 我试了下好像还是不行
zhuangzhuang1988
2021-09-17 13:54:42 +08:00
看下 <effective python>
第 88 条 用适当的方式打破循环依赖关系 // 350
https://book.douban.com/subject/35334595/
LicenseXu
2021-09-17 13:55:18 +08:00
b.py 里的 import 放到函数 test 里面
def test():
from a import aaa
print(aaa)
yunyuyuan
2021-09-17 15:12:51 +08:00
@911061873 搞忘了,要加 main 的,这样就行了。

aaa = 'aaa'

if __name__ == '__main__':
from api.b import test
test()
yunyuyuan
2021-09-17 15:13:11 +08:00
v 站到底怎么发代码
2owe
2021-09-17 15:24:03 +08:00
增加 c,将 aaa 移到 c 中,让 c 可以被其它引用
Nich0la5
2021-09-17 16:17:24 +08:00
这不是循环依赖吗 不要这么搞
jaredyam
2021-09-17 23:47:11 +08:00
竟然还能从 b 里导入 a,就很神奇
jaredyam
2021-09-17 23:49:40 +08:00
你这种写法还会出很多其它问题,里包导外包应该使用相对导入,from ..a import ...
frostming
2021-09-22 09:47:55 +08:00
def test():
from a import aaa
print(aaa)

把 import 移到 test 里面去就解决问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX