【问题标题】:Flask Version Incompatibility issueFlask 版本不兼容问题
【发布时间】:2021-05-14 05:11:29
【问题描述】:

我是 Flask 的新手,我正在使用 Flask 为我的团队开发一个小型 API。 早些时候,当我使用 python 3.8 和 pip 旧版本(我不确定那是什么版本)时,我的 app.py 运行良好。但是每当我执行 pip install 时,我都会收到一条消息,说明要升级我的 pip,所以我将它升级到 pip 21.1.1。升级 pip 后,我还将 python 3.8 更新为 python 3.9 并创建了一个新的 python 虚拟环境,并尝试在那里安装我的应用程序所需的以下三个库:-

  1. 烧瓶
  2. Flask-RESTful
  3. Flask-JWT

但是我看到我的烧瓶和其他软件包都有最新版本,所以我尝试在新的虚拟环境中运行我的应用程序,但它一直失败。我将在步骤下方添加失败消息和其他一些信息。

(base) Apples-MacBook-Pro:pythonEnvs testuser$ virtualenv -p python3.9 venvTest

(base) Apples-MacBook-Pro:pythonEnvs testuser$ cd ../Documents/Personal/FlaskProject/src/Flask-Api/

(base) Apples-MacBook-Pro:Flask-Api testuser$ source ~/pythonEnvs/venvTest/bin/activate

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ pip --version
pip 21.1.1 from /Users/testuser/pythonEnvs/venvTest/lib/python3.9/site-packages/pip (python 3.9)

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ python --version
Python 3.9.5

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ pip install flask

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ pip install Flask-RESTful

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ pip install Flask-JWT

(venvTest) (base) Apples-MacBook-Pro:Flask-Api testuser$ python3.9 app.py 

Traceback (most recent call last):
  File "/Users/testuser/Documents/githubProjects/FlaskProject/src/Flask-Api/app.py", line 2, in <module>
    from flask_restful import Api
  File "/Users/testuser/pythonEnvs/venvTest/lib/python3.9/site-packages/flask_restful/__init__.py", line 14, in <module>
    from flask.helpers import _endpoint_from_view_func
ImportError: cannot import name '_endpoint_from_view_func' from 'flask.helpers' (/Users/testuser/pythonEnvs/venvTest/lib/python3.9/site-packages/flask/helpers.py)

我很幸运能够从较旧的 pip 版本中冻结 pip,因此我将其粘贴到 requirements.txt 并对其进行显式 pip 安装,现在正在其上运行应用程序。但是新的 Flask 和其他依赖版本到底有什么问题。

以下是旧 pip 中 pip freeze 的结果,以及在新虚拟环境中升级和安装库后的结果:-

# Pip Freeze from an older version

aniso8601==9.0.1
click==7.1.2
Flask==1.1.2
Flask-JWT==0.3.2
Flask-RESTful==0.3.8
itsdangerous==1.1.0
Jinja2==2.11.3
MarkupSafe==1.1.1
PyJWT==1.4.2
pytz==2021.1
six==1.16.0

# Pip Freeze from the new version ( pip 21.1.1 )

aniso8601==9.0.1
click==8.0.0
Flask==2.0.0
Flask-JWT==0.3.2
Flask-RESTful==0.3.8
itsdangerous==2.0.0
Jinja2==3.0.0
MarkupSafe==2.0.0
PyJWT==1.4.2
pytz==2021.1
six==1.16.0
Werkzeug==2.0.0

下面是我正在尝试运行的 app.py:-

from flask import Flask
from flask_restful import Api
from flask_jwt import JWT
from security import authenticate, identity
from resources.user import UserRegister
from resources.item import Item, ItemList


# Resources are something our API is concerned with ( let it be students, items etc)
app = Flask(__name__)
app.secret_key = 'flask_application'
api = Api(app)

jwt = JWT(app, authenticate, identity) # JWT creates a new endpoint /auth

api.add_resource(Item, '/item/<string:name>')
api.add_resource(ItemList, '/items')
api.add_resource(UserRegister, '/register')

if __name__ == "__main__":
    app.run(port=5000, debug = True) # To debug use (debug = True)

如有任何需要,请在 cmets 中告诉我。

( Authenticate 和 identity 是用于对我们数据库中的用户进行身份验证的函数 UserRegister、Item 和 ItemList 是具有相应端点所需的一些预定义属性的类)

对此的任何见解都会有很大帮助。

谢谢

【问题讨论】:

标签: python-3.x flask pip


【解决方案1】:

Flask-Restful 不再与最近发布的 Flask 2.0 兼容。

几个小时前应用了修复:

https://github.com/flask-restful/flask-restful/commit/fc9b34c39472284a57c50d94fec5b51fe8d71e14

目前还没有关于 PyPI 的新版本。

您可以通过 GitHub 安装 Flask-Restful,或者等待一段时间等待新版本发布,同时使用旧的固定版本。

【讨论】:

  • 非常感谢,J.G,我现在会尝试使用旧版本。一个小疑问,PyPI 是 pip 的官方发布存储库吗?是否有任何与 pip 相关的更新?抱歉,我不太了解 Pip 和 Flask 的发布过程,也不知道在哪里检查这个
  • 是的! PyPI 是 Python 的官方包服务器——对于 Flask-RestFul 看这里:pypi.org/project/Flask-RESTful/#history——所以如果维护者发布了一个新版本,pip 将从那里得到它。请阅读github.com/flask-restful/flask-restful/issues/883 - 看起来 Flask-Restful 不再正确维护。我不能就此给你建议,因为我不将 Flask 用于 API,仅用于纯 HTML 端点。
  • 在这个问题的上下文之外:- 如果不是 Flask,你通常会用什么来进行 API 开发(我也很想尝试其他选项)顺便说一句,感谢你提供的所有信息。真的很有帮助
  • fastapi.tiangolo.com 已经很流行了;对于 Flask,我不能给你建议,但我 100% 确定有可行的替代方案。我建议在 Flask Discord 频道上提问 discord.gg/pallets
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多