Flask-Script:从flask._compat导入text_type ModuleNotFoundError:没有名为"flask._compat"的模块



使用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-migrateflask-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-

  1. 我的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
    
  2. 应用程序

    from flask import Flask
    app = Flask(__name__)
    if __name__ == "__main__":
    app.run(debug=True)
    
  3. 管理员.py

    from flask_script import Manager
    from app import app
    manager = Manager(app)
    @manager.command
    def hello():
    print('test')
    if __name__ == "__main__":
    manager.run()
    
  4. run命令-python manage.py hello

  5. 我的输出结果显示";测试";

降级Flask适用于我的

用更新了requirements.txtFlask==1.1.4

您可以尝试降低烧瓶版本。

如果你使用pip,那么它应该是:

  1. python3-m pip卸载烧瓶
  2. 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行

按照以下步骤操作:

  1. 更换第15行

    from ._compat import text_type on original flask-script file

使用:from flask_script._compat import text_type

然后,

  1. 降级烧瓶:pip install flask==1.1.4
  2. 安装兼容的Markupsafe:pip install markupsafe==2.1.0

确保安装这些依赖项也是很好的:

pip install flask_script
pip install flask_bootstrap

从这一点来看,你的项目应该非常好。

最新更新