LOADING . . .

python模块导入规则(相对导入和绝对导入)

  python模块可以相对导入和绝对导入,但这两者是不能随意替换使用的。本文主要讨论工作目录下模块之间的导入规则。其中相对导入前面有一个'.',表示从该脚本所在目录开始索引,而绝对导入前面没有'.',表示从根目录开始索引。首先明确一点,python认为的根目录为当前运行的脚本所在的目录,而不是vscode打开的工作目录的根目录。则基于python运行时的根目录,python模块导入主要可以总结为一句话:需要通过根目录的导入路径,必须使用绝对导入。换句话说,如果相对导入的导入路径通过了根目录,就会出错。此外,需要注意的是,无法导入根目录的父目录及以上目录中的模块。 

举例

  以下举了一些实例,vscode打开如下名为import_test的目录:

d1
|
--__init__.py
--d1p1.py
--d1p2.py
--d11
  |
  --__init__.py
  --d11p1.py
  --d11p2.py
d2
|
--__init__.py
--d2p1.py
--d21
  |
  --__init__.py
  --d21p1.py
main.py

  当运行main.py时,此时根目录为import_test

  1、如果main.py需要导入d1p1.py中的模块,必须使用绝对导入。

  2、如果d1p1.py需要导入d11p1.py中的模块,既可以使用相对导入,也可以使用绝对导入。

  3、如果d1p1.py需要导入d2p1.py中的模块,必须使用绝对导入。

  当运行时d1p1.py时,此时根目录为d1

  1、如果d1p1.py需要导入d11p1.py中的模块,必须使用绝对导入。

  2、如果d11p1.py需要导入d11p2.py中的模块,既可以使用相对导入,也可以使用绝对导入。

  3、如果d11p1.py需要导入d1p2.py中的模块,必须使用绝对导入。

  4、d1p1.py无法导入d2目录下和main.py中的模块。

文件夹和脚本同名情况

  注意!当存在文件夹和python脚本同名时优先导入文件夹模块。比如如下路径:

test
|
--__init__.py
main.py
test.py

  可以看出,其中包含相同名称的文件夹test和python代码文件test.py。当main.py中包含import test时,导入的是test.__init__.py模块,而不是test.py模块。

posted @ 2023-10-24 12:48  颀周  阅读(170)  评论(0编辑  收藏  举报
很高兴能帮到你~
点赞