python模块导入规则(相对导入和绝对导入)
python模块可以相对导入和绝对导入,但这两者是不能随意替换使用的。本文主要讨论工作目录下模块之间的导入规则。其中相对导入前面有一个'.',表示从该脚本所在目录开始索引,而绝对导入前面没有'.',表示从根目录开始索引。首先明确一点,python认为的根目录为当前运行的脚本所在的目录,而不是vscode打开的工作目录的根目录。则基于python运行时的根目录,python模块导入主要可以总结为一句话:需要通过根目录的导入路径,必须使用绝对导入。换句话说,如果相对导入的导入路径通过了根目录,就会出错。此外,需要注意的是,无法导入根目录的父目录及以上目录中的模块。
1 举例#
以下举了一些实例,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中的模块。
2 文件夹和脚本同名情况#
注意!当存在文件夹和python脚本同名时优先导入文件夹模块。比如如下路径:
test | --__init__.py main.py test.py
可以看出,其中包含相同名称的文件夹test和python代码文件test.py。当main.py中包含import test时,导入的是test.__init__.py模块,而不是test.py模块。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!