Python 3.10中模块内导入模块并支持子模块独立运行的方法
解决方案
方法1:从项目根目录用模块方式运行(推荐)
不需要修改任何代码,直接在项目根目录(也就是main.py所在的目录)执行以下命令:
python -m models.file1
这种方式会让Python自动将项目根目录添加到模块搜索路径中,from models import file2这类导入语句就能正常工作,完全符合Python的包结构设计,也是最规范的做法。
方法2:修改file1.py的搜索路径(适配直接运行脚本的场景)
如果必须在models目录下直接执行python file1.py,可以在file1.py的开头添加一段仅在脚本模式下执行的代码,把项目根目录加入搜索路径:
import sys from pathlib import Path # 仅当file1作为独立脚本运行时才修改路径 if __name__ == "__main__": # 获取项目根目录(models文件夹的上级目录) root_dir = Path(__file__).parent.parent sys.path.append(str(root_dir)) # 保持原本Pythonic的导入方式 from models import file2, file3 # 脚本的核心逻辑 if __name__ == "__main__": # 这里写file1作为独立脚本运行时的代码 print("Running file1 as standalone script")
为什么这个方法有效?
当file1.py被main.py导入时,__name__不等于__main__,路径修改代码不会执行,不影响原有导入结构;只有当它被单独运行时,才会把项目根目录加入sys.path,让Python能找到models包,从而支持from models import...的导入方式。
避坑提醒
不要把models目录本身加入sys.path,否则Python会把models当作顶级包,反而会破坏原有导入逻辑,必须添加的是models的父目录(即项目根目录)。
内容的提问来源于stack exchange,提问作者FTG
相关产品推荐
相关产品推荐

