如何在Python中的同一模块目录中导入其他函数?

时间:2017-05-10 07:03:20

标签: python python-3.x

我创建了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()

3 个答案:

答案 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来告诉它是一个包(虽然这是一个很好的做法)