我在linux系统上有一个简单的情况:
ls test_repo
example __init__.py text
在text
目录中,我只有2个文件:
__init__.py ex.py
在example
目录中,我又只有2个文件:
__init__.py test.py
在ex.py
中,我得到了代码:
def test():
print(10)
现在,我要在文本目录中导入它:
from text.ex import test
print(test())
但是当我在示例目录中以及不在示例目录中运行文件时:python test.py
我得到了错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from text.ex import test
ModuleNotFoundError: No module named 'text'
如何导入功能?
我应该在__init__.py
中放些东西吗?
答案 0 :(得分:1)
在StackOverflow上查看this question。它有多个导入文件的示例,因此请使用最适合您情况的示例。
答案 1 :(得分:0)
对于每个遇到导入问题的人,请让我解释一下该工作原理
首先,当您将某些模块导入文件时,它如何知道在哪里找到该模块?
导入模块时,python在多个位置检查该模块。这些位置在sys.path
中。
如果您打印sys.path
,它将在运行import
语句时给出python检查位置的列表。
在我的机器输出中看起来像这样
那么此列表中的值是什么
因此,python在运行导入时检查所有这些位置。
在示例目录中运行python test.py
时,会发生这种情况
sys.path
列表(即test_repo/example
)test.py
文件具有来自text.ex
模块的导入语句sys.path
列表以加载text.ex
模块ex.py
文件位于test_repo/text
模块内部,并且sys.path
没有test_repo/text
的位置,因此会出现错误:没有名为'text'的模块< / li>
答案 2 :(得分:0)
对于您来说,您可以将其添加到test.py
的最开始的行
import sys
sys.path.insert(0, "..")
因为您的test.py
位于example
目录内,而不是root
目录内。