Python如何无需使用-m或sys.path操作从同级文件夹导入模块
Python 3 同级文件夹模块导入解决方案
针对你给出的项目结构,以下是两种适配Python 3.3+版本的可行方案:
方案1:模块式运行(无代码侵入,官方推荐)
- 第一步:在
folder1/script1.py中直接使用以项目根路径为基准的绝对导入:
# script1.py 开头写入 from folder2.script2 import 你需要调用的函数名
- 第二步:执行脚本时不要进入
folder1目录直接运行,切换到项目根目录IMPORTS/下,使用模块参数运行:
python -m folder1.script1
方案2:手动添加项目根到模块搜索路径(支持直接运行script1.py)
如果需要直接进入folder1目录执行python script1.py,可以在script1.py最开头加入路径配置代码:
import sys from pathlib import Path # 定位到项目根目录IMPORTS并加入模块搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) # 之后就可以正常导入 from folder2.script2 import 你需要调用的函数名
原理解释
Python 3.3之后取消了隐式相对导入,直接运行单个脚本时,默认会将脚本所在的文件夹加入模块搜索路径,而非项目根目录。你之前找到的旧方案大多依赖Python2或早期Python3的隐式导入规则,因此失效。
你项目中的__init__.py文件在Python3.3+版本中可以保留也可以删除,不影响导入逻辑。
内容的提问来源于stack exchange,提问作者danishanish
相关产品推荐
相关产品推荐

