如何从其他文件导入 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 检查这些位置。 在我的机器输出中看起来像这样

那么这个列表中的值是多少

  1. 第一个值只是我当前脚本所在的目录 运行ning
  2. 下一个值是 python 路径环境变量中列出的目录
  3. 标准库目录
  4. 第三方包的站点包目录

因此 python 在您 运行 导入时检查所有这些位置。

当你在示例目录中 运行 python test.py 时,会发生这种情况

  1. Python 添加当前脚本所在的位置 运行 sys.path 列表(即 test_repo/example
  2. test.py 文件有来自 text.ex 模块的导入语句
  3. Python 搜索所有 sys.path 列表以加载 text.ex 模块
  4. 因为 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 目录。