PyCharm中Python包结构变更引发的导入错误解析求助
问题原因解析
1. ModuleNotFoundError: No module named 'package' 的原因
当你把package设为项目根目录后,PyCharm会将这个package目录添加到Python的sys.path(模块搜索路径)中。此时代码里如果还保留原来的import package语句,Python会在sys.path下寻找名为package的子目录/模块,但当前根目录就是package本身,不存在名为package的子模块,自然找不到,触发报错。
而原来的项目结构(project作为根)中,sys.path包含project目录,package是project的子目录,所以import package能正常匹配到目标模块。
2. ImportError: attempted relative import with no known parent package 的原因
Python的相对导入(比如from . import *)是专门为包内模块间的引用设计的,它依赖于模块被当作包的一部分来加载,而非作为独立脚本运行。
当你直接运行main.py时,Python会把这个脚本标记为顶级执行脚本(此时__name__的值为__main__),不会将它所在的目录当作一个包来识别,也就没有对应的“父包”上下文,相对导入失去了依赖的层级关系,因此触发报错。
内容的提问来源于stack exchange,提问作者Sun Bear
相关产品推荐
相关产品推荐

