【问题标题】:Python3 package import error even after using __init__.py即使在使用 __init__.py 后,Python3 包导入错误
【发布时间】:2021-08-01 00:16:33
【问题描述】:

我有以下结构:-

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 import module python-3.7


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      你在哪个目录?

      为了让python能够识别package1,

      1 ) 你已经通过终端进入 package1 的目录,

      cd {package1directory}
      

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

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

      3 ) 将 PYTHONPATH 定义为系统变量。指明package1目录

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多