Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中导入同一模块目录中的其他函数?_Python_Python 3.x - Fatal编程技术网

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

如何在Python中导入同一模块目录中的其他函数?,python,python-3.x,Python,Python 3.x,我制作了我的python模块,该模块A.py使用B.py如下所示。在这种情况下,如何在a.py中导入B.py?我想使用其他目录中的mylib模块。但由于路径问题,我的代码无法工作 ├── main.py └── mylib ├── A.py ├── B.py ├── __init__.py └── main_in_mylib.py A.py import B def test(): B.hello() def hello(): print("h

我制作了我的python模块,该模块
A.py
使用
B.py
如下所示。在这种情况下,如何在
a.py
中导入
B.py
?我想使用其他目录中的
mylib
模块。但由于路径问题,我的代码无法工作

├── main.py
└── mylib
    ├── A.py
    ├── B.py
    ├── __init__.py
    └── main_in_mylib.py
A.py

import B
def test():
    B.hello()
def hello():
    print("hello from B")
import A
A.test()
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'
B.py

import B
def test():
    B.hello()
def hello():
    print("hello from B")
import A
A.test()
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'
mylib.py中的main\u

import B
def test():
    B.hello()
def hello():
    print("hello from B")
import A
A.test()
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'
main.py

import B
def test():
    B.hello()
def hello():
    print("hello from B")
import A
A.test()
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()
# main.py
import mylib.B as B
import mylib.A as A
A.test()

您需要将A更改为

import mylib.B as B
def test():
    B.hello()
而不是

import B
def test():
    B.hello()

因为导入总是相对于您调用的脚本(在本例中是main.py)

进行的,所以需要将A更改为

import mylib.B as B
def test():
    B.hello()
而不是

import B
def test():
    B.hello()

因为导入总是相对于您调用的脚本(在本例中为main.py)

而言,问题在于您导入了一个文件并试图使用点表示法调用方法

使用mylib.A导入测试中的

现在,您可以在main.py中直接使用
test()


在python3中,您甚至不必在目录中写入
\uuuu init\uuuu.py
来判断它是一个包(尽管这是一个很好的实践)

问题是您导入了一个文件并试图使用点表示法调用方法

使用mylib.A导入测试中的

现在,您可以在main.py中直接使用
test()


在python3中,您甚至不必在目录中写入
\uu init\uuuuuuuuuuuuuuupy
来判断它是一个包(尽管这是一个很好的实践)

对于记录,这里也可以在
a.py
中进行相对导入:

from . import B

对于记录,这里也可以在
a.py
中进行相对导入:

from . import B

python中的系统并不总是直观的,但我认为这里的链接将帮助您了解事物是如何工作的。python中的系统并不总是直观的,但我认为这里的链接将帮助您了解事物是如何工作的。这还不清楚。你能查一下我的更新吗?这可能不是正确答案。您需要在Ank you中执行此导入。现在我的代码正在运行。顺便问一下,在这种情况下导入其他函数是常见的吗?为什么不从mylib import B导入
?别名似乎是多余的here@AzatIbrakov我只是想保持原始问题中使用的风格,这还不清楚。你能查一下我的更新吗?这可能不是正确答案。您需要在Ank you中执行此导入。现在我的代码正在运行。顺便问一下,在这种情况下导入其他函数是常见的吗?为什么不从mylib import B导入
?别名似乎是多余的here@AzatIbrakov我只是想保持原来提问中使用的风格。。您可以从导入测试中写入更正。。你可以从导入测试中写入它看起来很有用,因为我不需要设置特定的目录名。它看起来很有用,因为我不需要设置特定的目录名。