Python3.10特殊文件结构下无法导入函数 相对导入报错如何修复
Python相对导入错误修复方案
这个错误出现的核心原因是:当你直接运行part1.py脚本时,Python会将该脚本所在的part1目录作为顶层执行目录,不会自动把项目根目录(part1目录的上级目录)加入Python的模块搜索路径;同时相对导入的语法依赖完整的包结构上下文,只有将整个项目作为包运行时相对导入才会生效,单独执行单个脚本无法识别相对路径的父包。
你可以根据自己的使用场景选择以下任意一种方案修复:
- 方案1:修改为绝对导入,手动将项目根目录加入搜索路径
在part1.py的最开头添加以下代码即可,不需要修改业务逻辑:
import sys from pathlib import Path # 将part1目录的上级目录(也就是项目根目录)加入Python模块搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) # 改为绝对导入即可 from utils.utils import getFreq print(getFreq(["R8","U5","L5","D3"]))
- 方案2:使用
-m参数以包模块的形式运行脚本
不需要修改任何代码,在项目根目录(即同时包含part1文件夹、utils文件夹的目录)下打开终端,执行以下命令即可:
python -m part1.part1
这种运行方式会将当前终端所在的项目根目录识别为顶层包目录,你原本写的相对导入语法可以直接生效。
- 方案3:IDE专属配置
如果你使用PyCharm等IDE开发,可以右键点击项目根目录,选择「将目录标记为→Sources Root」,IDE会自动将该目录加入模块搜索路径,直接使用from utils.utils import getFreq的绝对导入写法即可正常运行脚本。
补充说明:你已经在utils目录下添加__init__.py的操作是正确的,无需额外修改该文件;如果需要兼容旧版本Python,也可以在项目根目录下额外添加一个空的__init__.py文件。
内容的提问来源于stack exchange,提问作者Psuedodoro
相关产品推荐
相关产品推荐

