使用Flask Script时,导入Manager时出错。
我已经安装了pip烧瓶和烧瓶脚本。我该如何解决这个问题?
管理.py
from flask_script import Manager
from main import app
manager = Manager(app)
@manager.command
def hello():
print ("hello")
if __name__ == "__main__":
manager.run()
main.py
from flask import Flask
app = Flask(__name__)
错误
(venv) raul@raul-PC:~/Proyectos Python/flask_script$ python3 manage.py hello
Traceback (most recent call last):
File "manage.py", line 1, in <module>
from flask_script import Manager
File "/home/raul/Proyectos Python/flask_script/venv/lib/python3.8/site-packages/flask_script/__init__.py", line 15, in <module>
from flask._compat import text_type
ModuleNotFoundError: No module named 'flask._compat'
是否将Flask更新到2.0.0版本?将烧瓶降级到版本1.1.2,它就会工作。
EDIT
您可以简单地使用以下命令,而不是与Flask Script一起使用:
flask db init
初始化数据库flask db migrate
迁移新的更改flask db upgrade
升级等等
1-我确实在PyCharmsettingsprojet: myapppython interpreter
上手动安装了模块,方法是选择我的解释器并安装缺少的库,如Flask
本身、flask-migrate
和flask-script
。
2-关于此特定错误:from flask._compat import text_type
ModuleNotFoundError: No module named 'flask._compat'
-
发生这种情况是因为python在Flask._compat
目录上搜索,但它不在那里,所以我像下面这样更改:(在flask_script/__init__.py
上(
其中:
原始烧瓶脚本文件上的from ._compat import text_type
至:
from flask_script._compat import text_type
那就行了!!
即使在使用Flask==2.0.2
时,降级到flask-script==2.0.5
也对我有效。
我删除了"从flask_script导入管理器";并移除";manager=manager(应用程序(";从我的主应用程序。
和requirements.txt文件。
在github上找到:flask_script不是flask本身,而是其他人编写的(dead-repo-archived(flask扩展。
现在我的程序运行Flask 2.0.1
我安装了烧瓶1.1.4
pip install "Flask==1.1.4"
同时也支持
pip install "werkzeug==1.0.1"
Flask Script不太可能为Flask 2.x或任何其他版本创建兼容版本,因为从它们的发布历史和上次发布来看。Miguel Grinberg在他的帖子中解释了这一点,以及Flask 0.11中引入Flask CLI可能导致Flask Script死亡的事实(他没有错,日期确实证实了这一事实(。
而且,您不需要从用于构建应用程序的任何技术的最新版本降级。你为什么要这样做?较新的版本具有新功能、更好的安全性、更高的效率等等。为什么要坚持使用四年前消亡的库呢?
相反,你应该做的(没有捷径的方法(是切换到Flask CLI,使用我上面链接的Miguel Grinberg帖子,继续享受Flask 2.0.x的新功能。George Studenko的Medium文章也可能对你有所帮助。这是一个更长、更棘手的解决方案,但最终会更有收获。
祝你好运。
我尝试Flask Script-
-
我的requirement.txt是
click==7.1.2 colorama==0.4.4 Flask==1.1.4 Flask-Script==2.0.6 itsdangerous==1.1.0 Jinja2==2.11.3 MarkupSafe==2.0.1 Werkzeug==1.0.1
-
应用程序
from flask import Flask app = Flask(__name__) if __name__ == "__main__": app.run(debug=True)
-
管理员.py
from flask_script import Manager from app import app manager = Manager(app) @manager.command def hello(): print('test') if __name__ == "__main__": manager.run()
-
run命令-python manage.py hello
-
我的输出结果显示";测试";
降级Flask
适用于我的
用更新了requirements.txtFlask==1.1.4
您可以尝试降低烧瓶版本。
如果你使用pip,那么它应该是:
- python3-m pip卸载烧瓶
- python3-m pip安装烧瓶==1.1.4
作为降级Flask或Flask Script的替代方案,我使用了
from flask_login._compat import text_type
来自flask_login
包,无论如何,我在项目的依赖项中有它。
快速和Parmanent修复:
由于错误导致Virtual/libs/Flask_Script/init.py 的第15行
按照以下步骤操作:
-
更换第15行
from ._compat import text_type on original flask-script file
使用:from flask_script._compat import text_type
然后,
- 降级烧瓶:
pip install flask==1.1.4
- 安装兼容的Markupsafe:
pip install markupsafe==2.1.0
确保安装这些依赖项也是很好的:
pip install flask_script
pip install flask_bootstrap
从这一点来看,你的项目应该非常好。