python模块导入规则(相对导入和绝对导入)
  csROwDoT4AiY 2023年11月25日 28 0

  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模块。



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   61   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   49   0   0 Python
  Ugrw6b9GgRUv   2024年05月17日   36   0   0 Python
csROwDoT4AiY