Python import 问题

2021-06-07 14:47:22 +08:00
 zxCoder

a.py

def funA():
	pass

b.py

from a import funA
def funB():
	funA()

main.py

from dir.subdir.b import funB
funB()

出错的地方是 b.py 的 import,如果改成 from .a import funA 就没错,但是 IDE 又提示我应该改称 from a import funA,但是如果改了就报错,ImportError: cannot import name xxx from xxx

911 次点击
所在节点    问与答
7 条回复
yunyuyuan
2021-06-07 16:30:13 +08:00
我测试没报错。

而且 from dir.subdir.b import funB 可以改成 from .subdir.b import funB 。
Jwyt
2021-06-07 16:52:03 +08:00
from a import funA 是对的
pyMoRan
2021-06-07 16:54:38 +08:00
在 subdir 建个__init__.py 文件
renmu123
2021-06-07 16:55:41 +08:00
相对导入和绝对导入,你好像忘记添加__init__了
Jwyt
2021-06-07 17:01:37 +08:00
添加__init__.py
b.py :
from subdir.a import func_a
main.py:
from subdir.b import func_b
rationa1cuzz
2021-06-07 17:46:25 +08:00
1 、解释器可以右键文件 mark directory as sources root
2 、大部分 import 异常可以从两个方向看一个是工作路径
import os
print os.getcwd()
另一个是__init__.py 的问题
NickLuan
2021-06-08 16:52:23 +08:00
你说的没太看懂,测试了下你发的代码,报错如下:

Traceback (most recent call last):
File "dir/main.py", line 1, in <module>
from dir.subdir.b import funB
ModuleNotFoundError: No module named 'dir'

这么说吧,文件导入就是告诉系统从哪里找这个文件,Python 中被执行文件也叫入口文件,你执行 main.py ,那这个文件就是入口文件,Python 会自动把这个文件所在文件夹的路径添加都文件搜索路径中,可以打印 sys.path 看一看
那么 from dir.subdir.b import funB 就等同于从 dir 里找名字为 dir 的文件或文件夹,所以就报错 No module named 'dir'

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

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

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

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

© 2021 V2EX