Flask项目save_books.py导入模块遇ModuleNotFoundError求助
解决save_books.py中导入libraryweb.models.Book失败的问题
看起来你遇到了Python模块导入路径的典型问题,我来帮你一步步搞定:
核心解决方案
方法1:手动添加项目根目录到Python路径
在save_books.py的最顶部加上这段代码,让Python能识别到项目根目录下的libraryweb包:
import sys import os # 获取当前脚本所在文件夹(libraryweb),再往上跳一级就是项目根目录 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # 现在就能正常导入了 from libraryweb.models import Book
方法2:以模块方式运行脚本(更规范)
不要直接双击或用python libraryweb/save_books.py运行脚本,切换到包含run.py的项目根目录,然后用这条命令执行:
python -m libraryweb.save_books
这时你就能在save_books.py里用相对导入了:
from .models import Book
为什么之前的导入都失败?
- 直接运行脚本的路径误区:当你直接运行
save_books.py时,Python会把libraryweb文件夹加入sys.path,而不是项目根目录。这时候libraryweb被当作普通目录,不是可导入的包,所以from libraryweb.models import Book会报错找不到模块。 - 相对导入的使用限制:
from .models import Book这种相对导入,只有当脚本被当作包的一部分导入时才生效,直接运行脚本时(此时脚本是__main__模块),相对导入会失效。
额外小提醒
你的static目录结构有个小错误,default.jpg应该在static根目录下,正确的结构是:
└── static ├── book_pics ├── user_pics └── default.jpg
尽量通过项目根目录的run.py管理脚本执行,或是用-m参数运行模块,这样能保持导入路径的一致性,避免再踩类似的坑。
内容的提问来源于stack exchange,提问作者Grace Zhou
相关产品推荐
相关产品推荐

