如何从其他文件导入 Python 代码
How to Import Python Code from Other Files
我在 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
中添加一些东西吗?
在 Whosebug 上查看 this question。它有多个导入文件的示例,因此请使用最适合您情况的示例。
对于遇到这个导入问题的每个人,让我解释一下它是如何工作的
首先,当你将某个模块导入到一个文件中时,它是如何知道在哪里可以找到该模块的?
当我们导入模块时,python 在 sys.path
中的多个 locations.those 位置检查该模块。
如果你打印 sys.path
它会给出一个位置列表,当我们 运行 一个 import
语句时,python 检查这些位置。
在我的机器输出中看起来像这样
那么这个列表中的值是多少
- 第一个值只是我当前脚本所在的目录 运行ning
- 下一个值是 python 路径环境变量中列出的目录
- 标准库目录
- 第三方包的站点包目录
因此 python 在您 运行 导入时检查所有这些位置。
当你在示例目录中 运行 python test.py
时,会发生这种情况
- Python 添加当前脚本所在的位置 运行
sys.path
列表(即 test_repo/example
)
test.py
文件有来自 text.ex
模块的导入语句
- Python 搜索所有
sys.path
列表以加载 text.ex
模块
- 因为
ex.py
文件在 test_repo/text
模块内,而 sys.path
没有 test_repo/text
的位置,它会给出错误 No module named 'text'
对于您的情况,您可以将其添加到 test.py
的最开始行
import sys
sys.path.insert(0, "..")
因为您的 test.py
位于 example
目录而不是 root
目录。
我在 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
中添加一些东西吗?
在 Whosebug 上查看 this question。它有多个导入文件的示例,因此请使用最适合您情况的示例。
对于遇到这个导入问题的每个人,让我解释一下它是如何工作的
首先,当你将某个模块导入到一个文件中时,它是如何知道在哪里可以找到该模块的?
当我们导入模块时,python 在 sys.path
中的多个 locations.those 位置检查该模块。
如果你打印 sys.path
它会给出一个位置列表,当我们 运行 一个 import
语句时,python 检查这些位置。
在我的机器输出中看起来像这样
那么这个列表中的值是多少
- 第一个值只是我当前脚本所在的目录 运行ning
- 下一个值是 python 路径环境变量中列出的目录
- 标准库目录
- 第三方包的站点包目录
因此 python 在您 运行 导入时检查所有这些位置。
当你在示例目录中 运行 python test.py
时,会发生这种情况
- Python 添加当前脚本所在的位置 运行
sys.path
列表(即test_repo/example
) test.py
文件有来自text.ex
模块的导入语句- Python 搜索所有
sys.path
列表以加载text.ex
模块 - 因为
ex.py
文件在test_repo/text
模块内,而sys.path
没有test_repo/text
的位置,它会给出错误 No module named 'text'
对于您的情况,您可以将其添加到 test.py
import sys
sys.path.insert(0, "..")
因为您的 test.py
位于 example
目录而不是 root
目录。