Python3 即使在使用 __init__.py 后仍出现包导入错误

Python3 package import error even after using __init__.py

我有以下结构:-

Test
├── package1
│   └── script1.py
│   └── __init__.py
├── package2
    └── script2.py
    └── __init__.py

我想从 script2.py 导入 script1.py 并尝试过:-

from package1.script1 import *

我是 运行 来自 linux 终端的脚本 python3 script2.py 但这似乎不起作用,我得到 ModuleNotFoundError: No module named 'package1'.我该如何解决这个问题?

你在哪个目录?

为了让python识别package1,

1 ) 您必须通过终端转到 package1 的目录,

cd {package1directory}

2 ) 您必须将系统路径附加到 package1 的目录,如下所示

import sys
sys.path.append('/home/user/package1dir')

3 ) 将 PYTHONPATH 定义为系统变量。表示package1目录

理想情况下,您应该 运行 来自顶级包的 python 脚本(导入 and/or 运行 启动整个应用程序的代码)如下所示:

Test
├── package1
│   └── script1.py
│   └── __init__.py
├── package2
|   └── script2.py
|   └── __init__.py
|___ run.py

然后运行python3 run.py

当您导入 from package1.script1 import * 时,您是在告诉 Python 从主脚本 运行 的路径搜索包。因此,它假定您正在从 package2 中搜索 package1。如果将 package1 放在 package2 和 运行 python3 script2.py 中,它也会起作用。

Test
├── package2
    ├── package1
    │   └── script1.py
    │   └── __init__.py
    └── script2.py
    └── __init__.py

如果您仍想从具有相同目录结构的 script2 运行,那么您必须在 Test 目录和 运行 python3 package2/script2.py 中或修改python path.