Python无法导入同目录下Page模块,多种导入方式均失败求助
Python模块导入错误解决指南
问题详情
我的目录结构:根目录CS下有View.py,还有ViewModel文件夹;ViewModel文件夹里包含CreatePage.py和Page.py。
在CreatePage.py里用from Page import *导入模块时,运行报错:
No module named 'Page' File "D:\My Stuff\School\CS\ViewModel\CreatePage.py", line 1, in <module> from Page import * File "D:\My Stuff\School\CS\View.py", line 2, in <module> from ViewModel.CreatePage import * ModuleNotFoundError: No module named 'Page'
试过import Page、from ViewModel.Page import *这两种写法,都没解决问题,到底哪里错了?
问题根源&解决办法
1. 循环导入是核心问题
从报错信息能看出来:CreatePage.py在导入Page,而View.py又在导入CreatePage,形成了循环依赖。Python解释器处理这种情况时,会出现模块找不到的错误,哪怕路径写对了也没用。
2. 导入路径也有问题
- 你在
CreatePage.py里写from Page import *,Python会从你运行脚本的目录(也就是CS目录,因为你是跑View.py)去找Page.py,但Page.py在ViewModel文件夹里,自然找不到。 - 你试的
from ViewModel.Page import *之所以没生效,很大概率是被循环导入的问题卡住了。
具体修复步骤
先解决循环导入
检查View.py和CreatePage.py的导入逻辑:
- 如果
View.py里只是在某个函数里用到CreatePage的内容,别把from ViewModel.CreatePage import *放在文件顶部,移到对应的函数内部去。 - 要是依赖关系太复杂,就拆分代码,把公共逻辑抽出来放到新的模块里,避免互相导入。
再修正导入路径
在CreatePage.py里,用相对导入(因为它和Page.py在同一个文件夹下):
from .Page import *
或者用绝对导入(前提是CS目录在Python的搜索路径里):
from ViewModel.Page import *
注意:如果直接双击运行CreatePage.py,相对导入可能会报错。这时候要么从CS目录下用命令python -m ViewModel.CreatePage运行,要么把CS目录添加到Python的sys.path里。
内容的提问来源于stack exchange,提问作者PhantomSucksAtLife
相关产品推荐
相关产品推荐

