我创建了A.py
使用B.py
的python模块,如下所示。在这种情况下,如何在B.py
中导入A.py
?我想使用其他目录中的mylib
模块。但是由于路径问题,我的代码无效。
├── main.py
└── mylib
├── A.py
├── B.py
├── __init__.py
└── main_in_mylib.py
A.py
import B
def test():
B.hello()
B.py
def hello():
print("hello from B")
main_in_mylib.py
import A
A.test()
main.py
import mylib.A as A
A.test()
Traceback (most recent call last):
File "main.py", line 3, in <module>
import mylib.A as A
File "/home/jef/python-module/mylib/A.py", line 3, in <module>
import B
ModuleNotFoundError: No module named 'B'
ModuleNotFoundError:没有名为'B'的模块
# main.py
from mylib.A import test
test()
ModuleNotFoundError:没有名为'B'的模块
# main.py
import mylib.B as B
import mylib.A as A
A.test()
答案 0 :(得分:4)
您需要将 A 更改为
import mylib.B as B
def test():
B.hello()
而不是
import B
def test():
B.hello()
因为导入始终与您调用的脚本相关(在本例中为main.py)
答案 1 :(得分:2)
对于记录,此处也可以在A.py
中执行相对导入:
from . import B
答案 2 :(得分:-1)
问题是您导入了一个文件并尝试使用点表示法调用方法。
使用from mylib.A import test
现在您可以直接在main.py
中使用test()
在python3中你甚至不必在目录中写__init__.py
来告诉它是一个包(虽然这是一个很好的做法)