Flask应用中__main__.py无法导入自身模块的问题求助
问题分析与解决
错误原因
你的项目是嵌套的app/app目录结构:外层app是项目根目录,内层app是Python包。当你直接运行内层的__main__.py时,Python会将该文件所在的目录(内层app目录)添加到sys.path中,而外层app目录不在sys.path里,因此Python找不到名为app的模块(因为此时sys.path指向的目录下没有app文件夹)。
解决办法
方法一:通过包方式运行(推荐)
切换到外层app目录(也就是/Users/joey/projects/app),执行以下命令:
python -m app
这种方式会让Python将外层目录加入sys.path,从而正确识别内层的app包,执行__main__.py中的代码。
方法二:修改__main__.py的导入方式
将__main__.py中的绝对导入改为相对导入(因为__main__.py和__init__.py属于同一个包):
from . import serve serve()
注意:这种方式下,你仍然不能直接运行__main__.py(比如python __main__.py),否则会触发相对导入的错误,还是需要用方法一的python -m app命令运行。
关于“运行的文件无法使用相对导入”的说明
这个说法部分正确:
- 当你直接运行单个Python文件(如
python file.py)时,该文件会被当作顶层的__main__模块,此时使用相对导入会报错,因为相对导入依赖于包的上下文,而直接运行的脚本不属于任何包结构。 - 但如果通过
python -m package.module的方式运行模块,模块会作为包的一部分被加载,此时可以正常使用相对导入。
内容的提问来源于stack exchange,提问作者lycheejelly
相关产品推荐
相关产品推荐

