python3.11 flask、flask-script 常见错误分析及解决
flask-script 使用过程中遇到问题,提示没有flask._compat
模块
from flask._compat import text_type
ModuleNotFoundError: No module named ‘flask._compat’
在网上找了很多解决方案,大多都是说flask版本太高了,降级flask版本。
先开始尝试着降级,发现更多依赖报错了。头大
还有些方案说是 flask_script 库的引入方式有问题,硬着头皮试着改。
from flask_script._compat import text_type
改完之后,这里还真不报错了。
运行试试
from flask import _request_ctx_stack
ImportError: cannot import name ‘_request_ctx_stack’ from ‘flask’ (/Users/tangweiwei/PycharmProjects/flask-demo/.venv/lib/python3.11/site-packages/flask/init.py)
flask_script/commands.py,引入错误,错误意思大致是在flask 没有找到 _request_ctx_stack,改,继续改
from flask import request_ctx
运行试试,还是报错
File “/Users/tangweiwei/PycharmProjects/flask-demo/.venv/lib/python3.11/site-packages/flask_script/commands.py”, line 13, in
from flask import request_ctx
ImportError: cannot import name ‘request_ctx’ from ‘flask’ (/Users/tangweiwei/PycharmProjects/flask-demo/.venv/lib/python3.11/site-packages/flask/init.py)
找到 /flask/__init__.py文件,新增下面引入
from .globals import request_ctx
最后还终于成功了,不报错了。
AttributeError: module ‘inspect’ has no attribute ‘getargspec’. Did you mean: ‘getargs’?
笔者python版本3.11
问题原因:
因为inspect.getargspec
在 3.11+ 中已弃用。
解决方法是使用 inspect.fullargspec
代替,并添加 3 个虚拟变量,因为 getfullargspec 将返回 7 个项目而不是 4 个:
args, varargs, keywords, defaults, foo, foo1, foo2 = inspect.getfullargspec(func)