Python如何从子文件夹的文件中导入项目根目录下的文件
你遇到的报错是因为直接运行InnerFile.py时,Python将该文件视为顶层执行脚本,无法识别所属的包层级,所以相对导入失效。
解决方案
方案1:以模块方式运行脚本(最推荐,无需修改代码)
不要直接用python InnerFile.py运行脚本,切换到**项目根目录(project folder目录)**下,执行以下命令即可:
python -m folder1.folder2.folder3.InnerFile
该方式会让Python自动识别整个项目的包结构,你之前写的from .... import OuterFile导入语句可以正常使用。
方案2:动态将项目根目录加入导入搜索路径(适合需要直接运行单个脚本的场景)
在InnerFile.py最开头(导入其他业务代码之前)加入以下代码:
import sys from pathlib import Path # 向上回溯4层拿到项目根目录的绝对路径,加入Python导入搜索列表 root_path = Path(__file__).parent.parent.parent.parent.absolute() sys.path.append(str(root_path)) # 之后可以直接导入OuterFile import OuterFile
该方式不需要调整运行命令,直接运行InnerFile.py即可生效。
方案3:配置PYTHONPATH环境变量(适合长期开发的本地项目)
将你的项目根目录的绝对路径添加到系统的PYTHONPATH环境变量中,配置完成后所有Python脚本都可以直接识别该目录下的模块,直接写import OuterFile就能导入,不需要调整代码或运行命令。
注意事项
Python的相对导入只能用于包内部的模块间调用,被直接作为入口运行的顶层脚本不支持相对导入,属于语言层面的设计规则。
内容的提问来源于stack exchange,提问作者rainbow
相关产品推荐
相关产品推荐

