> 文档中心 > 【ModuleNotFoundError & ImportError】之失败的尝试

【ModuleNotFoundError & ImportError】之失败的尝试


提示:文章尚未写完,感觉一开始的代码分类没有做好,有所遗漏,所以这一篇就停在这里。现在看来,确实应该停止。随后写的若干篇【ModuleNotFoundError & ImportError】系列文章都是深思熟虑之后的结晶。推荐!另外,单就这篇文章而言,“2 创建格式”部分的导入语句不值得看,因为很多环境并未排除,所以原因的找寻也并不确实。但这一部分值得看的是解释器操作的图示,每一步都标注了,很详细,也是最花时间的。

目录

  • 前言
  • 1 import statement
    • 1.1. 官方规范
  • 2 常见格式
    • 2.1. 导入标准库
    • 2.2. 导入自定义库
      • 2.2.1. 查看 Spyder 的 PYTHONPATH 变量
      • 2.2.2. 查看 Spyder 的 sys.path
      • 2.2.3. 查看 PyCharm 的 PYTHONPATH 变量
      • 2.2.4. 查看 PyCharm 的 sys.path
    • 2.3. 绝对导入(absolute import)与相对导入(relative import)
    • 2.4. 在未设置 PYTHONPATH 变量的前提下,不同 IDLE 的表现
      • 2.4.1. 创建层级目录
      • 2.4.2. Spyder 的表现
      • 2.4.3. PyCharm 的表现
      • 2.4.4. Python IDLE 3.8 的表现
    • 2.5. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg 目录,并查看其导入语句
      • 2.5.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg 目录
        • 2.5.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg 目录
        • 2.5.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg 目录
        • 2.5.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg 目录
      • 2.5.2. 查看三个 IDLE 的导入语句
        • 2.5.2.1. 查看 Spyder 的导入语句
        • 2.5.2.2. 查看 PyCharm 的导入语句
        • 2.5.2.3. 查看 Python IDLE 的导入语句
    • 2.6. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1 目录,并查看其导入语句
      • 2.6.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1 目录
        • 2.6.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg.pkg1 目录
        • 2.6.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg.pkg1 目录
        • 2.6.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg.pkg1 目录
      • 2.6.2. 查看三个 IDLE 的导入语句
        • 2.6.2.1. 查看 Spyder 的导入语句
          • 2.6.2.1.1.脚本文件在 pkg 目录
          • 2.6.2.1.2.脚本文件在 pkg.pkg1 目录
          • 2.6.2.1.3. 总结
        • 2.6.2.2. 查看 PyCharm 的导入语句
          • 2.6.2.2.1.脚本文件在 pkg.pkg1 目录
          • 2.6.2.2.1.脚本文件在 pkg.pkg1 目录
          • 2.6.2.2.3. 总结
        • 2.6.2.3. 查看 Python IDLE 的导入语句
    • 2.7. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1.pkg2 目录,并查看其导入语句
      • 2.7.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1.pkg2 目录
        • 2.7.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录
        • 2.7.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录
        • 2.7.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录
      • 2.7.2. 查看三个 IDLE 的导入语句
        • 2.7.2.1. 查看 Spyder 的导入语句
          • 2.7.2.1.1. 脚本文件在 pkg 目录
          • 2.7.2.1.2. 脚本文件在 pkg.pkg1 目录
          • 2.7.2.1.3. 脚本文件在 pkg.pkg1.pkg2 目录
          • 2.7.2.1.4. 总结
        • 2.7.2.2. 查看 PyCharm 的导入语句
          • 2.7.2.2.1. 脚本文件在 pkg 目录
          • 2.7.2.2.2. 脚本文件在 pkg.pkg1 目录
          • 2.7.2.2.3. 脚本文件在 pkg.pkg1.pkg2 目录
          • 2.7.2.2.4. 总结
        • 2.7.2.3. 查看 Python IDLE 的导入语句
  • 3 总结
  • 4 系统环境

前言

提示:本文要记录的大概内容:

import statement 并不复杂,无非就是几种格式而已。导入 Python 标准库,只要合乎格式就可以了。但是,导入自定义 module 却常常出错。尤其是在 Anaconda (Spyder)上写成的代码,换到 PyCharm 就不行了,或者换成 IDLE 用命令行执行也是报错。

深入了解这个问题,着实花了我3天时间。故此,记录如下。


提示:以下是本篇文章正文内容,下面案例可供参考

1 import statement

1.1. 官方规范

【ModuleNotFoundError & ImportError】之失败的尝试
这是官方规范。

2 常见格式

2.1. 导入标准库

# 以标准库举例如下import tkinter    # 导入标准库最常用import turtle as t    # t 作为标识符可直接调用,代表 turtle modulefrom tkinter.ttk import Combobox as Cx    # Cx 作为标识符可直接调用,代表 tkinter.ttk.Comboboxfrom tkinter import *    # 通配符形式的导入仅在模块层级上被允许。尝试在类或函数定义中使用它将引发 SyntaxError。# 查看标识符的类型type(tkinter)moduletype(tkinter.ttk)moduletype(tkinter.ttk.Combobox)type    # classtype(tkinter.ttk.Combobox.xview)    # 后面会看到这个不可导入functiontype(tkinter.mainloop)    # 后面会看到这个可导入function# 试探 import module (as ...)import tkinter.ttkimport tkinter.ttk.ComboboxModuleNotFoundError: No module named 'tkinter.ttk.Combobox'; 'tkinter.ttk' is not a packageimport tkinter.ttk.Combobox.xviewModuleNotFoundError: No module named 'tkinter.ttk.Combobox'; 'tkinter.ttk' is not a packageimport tkinter.mainloopModuleNotFoundError: No module named 'tkinter.mainloop'# 结论1:# import module, OK# import module.sub-module, OK# import pkg.module, OK# import class, NG# import module.class, NG# import functon, NG# import module.function, NG# import module.class.function, NG# 试探 from ... import (as ...)from tkinter import ttkfrom tkinter import *    # 类名、常量名、函数名from tkinter.ttk import Comboboxfrom tkinter.ttk import *from tkinter.ttk.Combobox import xviewModuleNotFoundError: No module named 'tkinter.ttk.Combobox'; 'tkinter.ttk' is not a packagefrom tkinter.ttk.Combobox import *    ModuleNotFoundError: No module named 'tkinter.ttk.Combobox'; 'tkinter.ttk' is not a packagefrom tkinter import mainloop# 结论2:# from pkg.module import ..., OK# from module import ..., OK# from module.sub-module import ..., OK# from module imort class, OK    #  连常量都可以导入# from module import function, OK# from module.sub-module import class, OK# from module.sub-module import function, OK# from module.sub-module.class import function, NG    # 我到这里已崩溃~~~

2.2. 导入自定义库

其实,这次笔记的核心是一定要设置 PYTHONPATH 变量,所以先查看一下两个解释器的环境变量。

2.2.1. 查看 Spyder 的 PYTHONPATH 变量

空的,容易说明问题。
在这里插入图片描述

2.2.2. 查看 Spyder 的 sys.path

import sysfor path in sys.path:    print(path)print(len(sys.path))

在这里插入图片描述

2.2.3. 查看 PyCharm 的 PYTHONPATH 变量

其实,重要的不是查看,而是设置。如下图,很重要。
在这里插入图片描述

2.2.4. 查看 PyCharm 的 sys.path

在这里插入图片描述
尽管 PyCharm 调用 Anaconda 的包,但二者的环境变量仍然各自独立。

2.3. 绝对导入(absolute import)与相对导入(relative import)

  1. 看起来很麻烦的两个概念,但纠结这个毫无意义。如果包的 __ init__.py 是空文件,那么就不要用 . 起头的相对导入。除非你懂得如何设置 __ init__.py。
  2. 相对导入必须设置好才能用,否则提示 SyntaxError
  3. 相对导入用 . 起头,使用前缀点号,而且只有一种形式:from import
  4. 绝对导入可用 import 或 from import 语法

2.4. 在未设置 PYTHONPATH 变量的前提下,不同 IDLE 的表现

2.4.1. 创建层级目录

在这里插入图片描述
3个 modules 的代码如下:

class Class:    """module2.py"""    def __init__(self): print("module2.Class")    def test_func1(self): print("method module2.Class.test_func1")    def test_func2(self): print("method module2.Class.test_func2")    def test_func3(self): print("method module2.Class.test_func3")class Class:    """module1.py"""    def __init__(self): print("module1.Class")    def test_func1(self): print("method module1.Class.test_func1")    def test_func2(self): print("method module1.Class.test_func2")    def test_func3(self): print("method module1.Class.test_func3")class Class:    """module0.py"""    def __init__(self): print("module0.Class")    def test_func1(self): print("method module0.Class.test_func1")    def test_func2(self): print("method module0.Class.test_func2")    def test_func3(self): print("method module0.Class.test_func3")

2.4.2. Spyder 的表现

import sysprint(len(sys.path))12    # 未设置 PYTHONPATH 变量# 当前模块的绝对路径:C:/Users/Administrator/pkg/import_test.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/module0.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/pkg1/module1.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/pkg1/pkg2/module2.py# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # OKimport module0    # ModuleNotFoundError: No module named 'module0'from pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # ModuleNotFoundError: No module named 'module0'# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # ModuleNotFoundError: No module named 'pkg1'import pkg1    # ModuleNotFoundError: No module named 'pkg1'from pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg1'from pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK

2.4.3. PyCharm 的表现

红色波浪线提示 SyntaxError
红色波浪线提示 SyntaxError
那么就逐行试验一下能不能导入:

import sysprint(len(sys.path))10# 当前模块的绝对路径:C:/Users/Administrator/pkg/import_test.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/module0.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/pkg1/module1.py# 导入模块的绝对路径:C:/Users/Administrator/pkg/pkg1/pkg2/module2.py# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # ModuleNotFoundError: No module named 'pkg'import module0    # OKfrom pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.module1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1.module1.Class'; 'pkg1.module1' is not a packageimport pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg'import pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ModuleNotFoundError: No module named 'pkg'from pkg import module1    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2 import module2    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2.module2 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'

两相对比,在 Spyder 里可以导入的语句, 与在 PyCharm 里可以导入的语句,没有任何重叠。当然,前提是都未设置 PYTHONPATH 变量。

2.4.4. Python IDLE 3.8 的表现

在这里插入图片描述
Python IDLE 里执行的结果居然与 Spyder 完全相同,惊了我!

# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # OKimport module0    # ModuleNotFoundError: No module named 'module0'from pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # ModuleNotFoundError: No module named 'module0'# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # ModuleNotFoundError: No module named 'pkg1'import pkg1    # ModuleNotFoundError: No module named 'pkg1'from pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg1'from pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK

2.5. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg 目录,并查看其导入语句

2.5.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg 目录

2.5.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg 目录

在这里插入图片描述

2.5.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg 目录

在这里插入图片描述
在这里插入图片描述

2.5.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg 目录

在这里插入图片描述
尝试用另外一种方法添加目录:
在这里插入图片描述

2.5.2. 查看三个 IDLE 的导入语句

2.5.2.1. 查看 Spyder 的导入语句

# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # OKimport module0    # OKfrom pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK

2.5.2.2. 查看 PyCharm 的导入语句

在这里插入图片描述

2.5.2.3. 查看 Python IDLE 的导入语句

在这里插入图片描述

2.6. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1 目录,并查看其导入语句

2.6.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1 目录

2.6.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg.pkg1 目录

在这里插入图片描述

2.6.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg.pkg1 目录

在这里插入图片描述

2.6.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg.pkg1 目录

在这里插入图片描述

2.6.2. 查看三个 IDLE 的导入语句

2.6.2.1. 查看 Spyder 的导入语句

2.6.2.1.1.脚本文件在 pkg 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # OKimport module0    # OKfrom pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK

经对比,可导入的语句及错误提示与 pkg 目录加入 PYTHONPATH 变量时相同。

2.6.2.1.2.脚本文件在 pkg.pkg1 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg.module0.Class'; 'pkg.module0' is not a packageimport pkg.module0    # OKimport module0    # OKfrom pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK
2.6.2.1.3. 总结

经对比,可导入的语句及错误提示与 pkg 目录加入 PYTHONPATH 变量时相同,当然也就与脚本文件在 pkg 目录或 pkg1 目录无关。

2.6.2.2. 查看 PyCharm 的导入语句

2.6.2.2.1.脚本文件在 pkg.pkg1 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.module0    # ModuleNotFoundError: No module named 'pkg'import module0    # OKfrom pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.module1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1.module1.Class'; 'pkg1.module1' is not a packageimport pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg'import pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ModuleNotFoundError: No module named 'pkg'from pkg import module1    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2 import module2    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2.module2 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'
2.6.2.2.1.脚本文件在 pkg.pkg1 目录

这个就厉害了!连一个可导入的语句都没有!而且全部红色波浪线!

# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.module0    # ModuleNotFoundError: No module named 'pkg'import module0    # ModuleNotFoundError: No module named 'module0'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from module0 import Class    # ModuleNotFoundError: No module named 'module0'# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.module1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # ModuleNotFoundError: No module named 'pkg1'import pkg1    # ModuleNotFoundError: No module named 'pkg1'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # ModuleNotFoundError: No module named 'module2'import .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg'import pkg1    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg1'from pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ModuleNotFoundError: No module named 'pkg'from pkg import module1    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2 import module2    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2.module2 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'
2.6.2.2.3. 总结

经对比,可导入的语句及错误提示与 pkg 目录加入 PYTHONPATH 变量时相同,当然也就与脚本文件在 pkg 目录或 pkg1 目录无关。

2.6.2.3. 查看 Python IDLE 的导入语句

这个我就忽略了,烦了。

2.7. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1.pkg2 目录,并查看其导入语句

2.7.1. 为三个 IDLE 的 PYTHONPATH 变量都添加 pkg.pkg1.pkg2 目录

2.7.1.1. 为 Spyder 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录

在这里插入图片描述

2.7.1.2. 为 PyCharm 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录

在这里插入图片描述

2.7.1.3. 为 Python IDLE 的 PYTHONPATH 变量添加 pkg.pkg1.pkg2 目录

在这里插入图片描述

2.7.2. 查看三个 IDLE 的导入语句

2.7.2.1. 查看 Spyder 的导入语句

2.7.2.1.1. 脚本文件在 pkg 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.module0    # OKimport module0    # ModuleNotFoundError: No module named 'module0'from pkg.module0 import Class    # OKfrom pkg import module0    # OKfrom module0 import Class    # ModuleNotFoundError: No module named 'module0'# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntaximport pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.module1.Class'; 'pkg.pkg1.module1' is not a packageimport pkg.pkg1.module1    # OKimport pkg.pkg1    # OKimport pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # ModuleNotFoundError: No module named 'pkg1'import pkg1    # ModuleNotFoundError: No module named 'pkg1'from pkg.pkg1.module1 import Class    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # OKimport .module2    # SyntaxError: invalid syntaximport ..module2    # SyntaxError: invalid syntaximport ...module2    # SyntaxError: invalid syntaxfrom .import module2    # ImportError: attempted relative import with no known parent packagefrom ..import module2    # ImportError: attempted relative import with no known parent packagefrom ...import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # OKimport pkg.pkg1    # OKimport pkg.pkg1.pkg2    # OKimport pkg.pkg1.pkg2.module2    # OKimport pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg.pkg1.pkg2.module2.Class'; 'pkg.pkg1.pkg2.module2' is not a packageimport pkg1    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg1'from pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ImportError: cannot import name 'module2' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg import module1    # ImportError: cannot import name 'module1' from 'pkg' (C:\Users\Administrator\pkg\__init__.py)from pkg.pkg1.pkg2 import module2    # OKfrom pkg.pkg1 import module1    # OKfrom pkg import module0    # OKfrom pkg.pkg1.pkg2.module2 import Class    # OKfrom pkg.pkg1.module1 import Class    # OKfrom pkg.module0 import Class    # OK
2.7.2.1.2. 脚本文件在 pkg.pkg1 目录
# 同上:错误提示略有不同,但能导入的语句都相同
2.7.2.1.3. 脚本文件在 pkg.pkg1.pkg2 目录
# 同上:错误提示略有不同,但能导入的语句都相同
2.7.2.1.4. 总结

无论脚本文件在 pkg or pkg1 or pkg2,能导入的语句相同,但错误提示略有不同

2.7.2.2. 查看 PyCharm 的导入语句

2.7.2.2.1. 脚本文件在 pkg 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.module0    # ModuleNotFoundError: No module named 'pkg'import module0    # OKfrom pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from module0 import Class    # OK# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.module1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1.module1.Class'; 'pkg1.module1' is not a packageimport pkg1.module1    # OKimport pkg1    # OKfrom pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # OKimport .module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import ..module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import ...module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式from . import module2    # ImportError: attempted relative import with no known parent packagefrom .. import module2    # ImportError: attempted relative import with no known parent packagefrom ... import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg'import pkg1    # OKimport pkg1.pkg2    # OKimport pkg1.pkg2.module2    # OKfrom pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ModuleNotFoundError: No module named 'pkg'from pkg import module1    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2 import module2    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2.module2 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'
2.7.2.2.2. 脚本文件在 pkg.pkg1 目录
# 导入 module0from . import module0    # ImportError: attempted relative import with no known parent packagefrom .. import module0    # ImportError: attempted relative import with no known parent packagefrom .module0 import Class    # ImportError: attempted relative import with no known parent packageimport pkg.module0.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.module0    # ModuleNotFoundError: No module named 'pkg'import module0    # ModuleNotFoundError: No module named 'module0'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from module0 import Class    # ModuleNotFoundError: No module named 'module0'# 导入 module1from . import module1    # ImportError: attempted relative import with no known parent packagefrom .. import module1    # ImportError: attempted relative import with no known parent packagefrom ... import module1    # ImportError: attempted relative import with no known parent packagefrom .module1 import Class    # ImportError: attempted relative import with no known parent packageimport .module1    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import pkg.pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.module1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg1.module1.Class    # ModuleNotFoundError: No module named 'pkg1'import pkg1.module1    # ModuleNotFoundError: No module named 'pkg1'import pkg1    # ModuleNotFoundError: No module named 'pkg1'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import pkg1.module1    # SyntaxError: invalid syntax# 导入 module2import module2    # OKimport .module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import ..module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式import ...module2    # SyntaxError: invalid syntax    # 相对导入不能用这种格式from . import module2    # ImportError: attempted relative import with no known parent packagefrom .. import module2    # ImportError: attempted relative import with no known parent packagefrom ... import module2    # ImportError: attempted relative import with no known parent packageimport pkg    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg'import pkg.pkg1.pkg2.module2.Class    # ModuleNotFoundError: No module named 'pkg'import pkg1    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2    # ModuleNotFoundError: No module named 'pkg1'import pkg1.pkg2.module2    # ModuleNotFoundError: No module named 'pkg1'from pkg import module2.Class    # SyntaxError: invalid syntaxfrom pkg import module2    # ModuleNotFoundError: No module named 'pkg'from pkg import module1    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2 import module2    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1 import module1    # ModuleNotFoundError: No module named 'pkg'from pkg import module0    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.pkg2.module2 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.pkg1.module1 import Class    # ModuleNotFoundError: No module named 'pkg'from pkg.module0 import Class    # ModuleNotFoundError: No module named 'pkg'
2.7.2.2.3. 脚本文件在 pkg.pkg1.pkg2 目录
2.7.2.2.4. 总结

2.7.2.3. 查看 Python IDLE 的导入语句

(略)


3 总结

  1. import statement 并不像看起来那么人畜无害,自求多福吧!
  2. 我只能用设置 PYTHONPATH 变量和递进式 self-debugging 啦!
  3. 不推荐相对导入。
  4. 只要换了 IDLE,就要先查看 PYTHONPATH 变量里有没有脚本引用的 module 所在的路径,没有就用 sys.path.append() 添加。
  5. PyCharm 使用 Anaconda 的系统环境也很普遍了,但二者的 PYTHONPATH 变量仍然各自独立,需要各自添加。
  6. 添加 PYTHONPATH 变量推荐直达子包。
  7. 其实,善用 site-package 也许才是真正的王道,只是我还不熟悉的情况下,就发生了这么多事情

4 系统环境

  1. win7-64bit
  2. Spyder 4.2.5 ( Python 3.7.10)
  3. PyCharm 2020.3

k歌软件