Python/Docker ImportError: cannot import name 'json' from itsdangerous
Python/Docker ImportError: cannot import name 'json' from itsdangerous
我正在尝试让 Flask 和 Docker 应用程序工作,但是当我尝试 运行 它在我的 Visual Studio 终端中使用我的 docker-compose up
命令时,它给我一个名为 ImportError: cannot import name 'json' from itsdangerous
的 ImportError。我试图寻找解决此问题的可能方法,但截至目前,这里或其他任何地方都没有很多。我能找到的唯一两个解决方案是将 MarkupSafe 和 itsdangerous 的当前安装更改为更高版本:https://serverfault.com/questions/1094062/from-itsdangerous-import-json-as-json-importerror-cannot-import-name-json-fr and another one on GitHub that tells me to essentially change the MarkUpSafe and itsdangerous installation again https://github.com/aws/aws-sam-cli/issues/3661,我还尝试创建一个名为 veganetworkscriptenv
的虚拟环境来安装软件包,但是也失败了。我目前使用的是 Flask 2.0.0 和 Docker 5.0.0,错误发生在 vegamain.py.
中的第八行
这是我尝试 运行 程序时得到的完整 ImportError:
veganetworkscript-backend-1 | Traceback (most recent call last):
veganetworkscript-backend-1 | File "/app/vegamain.py", line 8, in <module>
veganetworkscript-backend-1 | from flask import Flask
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/__init__.py", line 19, in <module>
veganetworkscript-backend-1 | from . import json
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/json/__init__.py", line 15, in <module>
veganetworkscript-backend-1 | from itsdangerous import json as _json
veganetworkscript-backend-1 | ImportError: cannot import name 'json' from 'itsdangerous' (/usr/local/lib/python3.9/site-packages/itsdangerous/__init__.py)
veganetworkscript-backend-1 exited with code 1
这是我的 requirements.txt、vegamain.py、Docker 文件和 docker-compose.yml 文件:
requirements.txt:
Flask==2.0.0
Flask-SQLAlchemy==2.4.4
SQLAlchemy==1.3.20
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-Cors==3.0.9
requests==2.25.0
mysqlclient==2.0.1
pika==1.1.0
wolframalpha==4.3.0
vegamain.py:
# Veganetwork (C) TetraSystemSolutions 2022
# all rights are reserved.
#
# Author: Trevor R. Blanchard Feb-19-2022-Jul-30-2022
#
# get our imports in order first
from flask import Flask # <-- error occurs here!!!
# start the application through flask.
app = Flask(__name__)
# if set to true will return only a "Hello World" string.
Debug = True
# start a route to the index part of the app in flask.
@app.route('/')
def index():
if (Debug == True):
return 'Hello World!'
else:
pass
# start the flask app here --->
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Docker文件:
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
docker-compose.yml:
version: '3.8'
services:
backend:
build:
context: .
dockerfile: Dockerfile
command: 'python vegamain.py'
ports:
- 8004:5000
volumes:
- .:/app
depends_on:
- db
# queue:
# build:
# context: .
# dockerfile: Dockerfile
# command: 'python -u consumer.py'
# depends_on:
# - db
db:
image: mysql:5.7.22
restart: always
environment:
MYSQL_DATABASE: admin
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
volumes:
- .dbdata:/var/lib/mysql
ports:
- 33069:3306
我该如何修复这段代码?谢谢!
我在 运行 docker 个装有烧瓶的容器时遇到了同样的问题。
我将 Flask
降级为 1.1.4
,将 markupsafe
降级为 2.0.1
,这解决了我的问题。
检查 this 以供参考。
导入失败似乎与包的最新发布版本有关itsdangerous
。
查看最新版本 here
在我的例子中,我通过在我的 requirements.txt
文件中显式添加包依赖项 itsdangerous==2.0.1
使其工作。
要使更改生效,请更新您的虚拟环境以反映新的 requirements.txt
。
这个问题的根源似乎是 Flask 2.0.0 不受支持。尝试使用最新版本的 Flask。
https://github.com/pallets/itsdangerous/issues/289
截至 2022 年 3 月 8 日,最新版本为 2.0.3:
pip install Flask=2.0.3
请参阅 Flask source code on Github 了解最新版本。
将 itsdangerous==2.0.1
添加到我的 requirements.txt
文件,并降级到 Flask==1.1.1
为我修复了它。
解决方案 1 - 将 Flask 升级到最新版本,即 2.0.1 或更高版本。这是解决问题的推荐方法。
pip install Flask=2.0.1
或
pip install Flask=2.1.0
解决方案2 - 由于很难在短时间内升级到最新版本的Flask,您可以尝试以下方法解决问题。
您可以继续使用 Flask 版本 1.1.2 并尝试将 itdangerous 降级到 2.0.1。您可以通过将 itsdangerous==2.0.1
添加到 requirements.txt 文件来实现。
解决方案 3 - 另一种方法是将 Flask 从 1.1.2 升级到 1.1.4,因为它没有突破性的变化,同时降级 markupsafe 库到 2.0.1
从 Flask 1.1.2 升级到 1.1.4 后,您将面临另一个问题,即 ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’ in Release 1.38.0 #3661,可以通过将 markupsafe 降级到版本 2.0.1 来解决这个问题,如下所示。
pip install Flask==1.1.4
pip install markupsafe==2.0.1
参考 - [Solved] ImportError: cannot import name ‘json’ from itsdangerous
我只是将 itsdangerous==2.0.1
放入我的 requirements.txt 中。然后使用 pip install -r requirements.txt
和 docker-compose up --build
更新我的 virtualenv。现在对我来说一切都很好。没有升级烧瓶版本。
运行 pip install itsdangerous==2.0.1
在我的虚拟环境中对我有用。注意:我在我的 Windows 10 机器上使用
这个帖子对我也很有用。
加价保险柜不太安全。
Itisdangerous=2.0.1 是我要求列表中的第五个,恢复了乘客档案,从此一帆风顺!
我正在尝试让 Flask 和 Docker 应用程序工作,但是当我尝试 运行 它在我的 Visual Studio 终端中使用我的 docker-compose up
命令时,它给我一个名为 ImportError: cannot import name 'json' from itsdangerous
的 ImportError。我试图寻找解决此问题的可能方法,但截至目前,这里或其他任何地方都没有很多。我能找到的唯一两个解决方案是将 MarkupSafe 和 itsdangerous 的当前安装更改为更高版本:https://serverfault.com/questions/1094062/from-itsdangerous-import-json-as-json-importerror-cannot-import-name-json-fr and another one on GitHub that tells me to essentially change the MarkUpSafe and itsdangerous installation again https://github.com/aws/aws-sam-cli/issues/3661,我还尝试创建一个名为 veganetworkscriptenv
的虚拟环境来安装软件包,但是也失败了。我目前使用的是 Flask 2.0.0 和 Docker 5.0.0,错误发生在 vegamain.py.
这是我尝试 运行 程序时得到的完整 ImportError:
veganetworkscript-backend-1 | Traceback (most recent call last):
veganetworkscript-backend-1 | File "/app/vegamain.py", line 8, in <module>
veganetworkscript-backend-1 | from flask import Flask
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/__init__.py", line 19, in <module>
veganetworkscript-backend-1 | from . import json
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/json/__init__.py", line 15, in <module>
veganetworkscript-backend-1 | from itsdangerous import json as _json
veganetworkscript-backend-1 | ImportError: cannot import name 'json' from 'itsdangerous' (/usr/local/lib/python3.9/site-packages/itsdangerous/__init__.py)
veganetworkscript-backend-1 exited with code 1
这是我的 requirements.txt、vegamain.py、Docker 文件和 docker-compose.yml 文件:
requirements.txt:
Flask==2.0.0
Flask-SQLAlchemy==2.4.4
SQLAlchemy==1.3.20
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-Cors==3.0.9
requests==2.25.0
mysqlclient==2.0.1
pika==1.1.0
wolframalpha==4.3.0
vegamain.py:
# Veganetwork (C) TetraSystemSolutions 2022
# all rights are reserved.
#
# Author: Trevor R. Blanchard Feb-19-2022-Jul-30-2022
#
# get our imports in order first
from flask import Flask # <-- error occurs here!!!
# start the application through flask.
app = Flask(__name__)
# if set to true will return only a "Hello World" string.
Debug = True
# start a route to the index part of the app in flask.
@app.route('/')
def index():
if (Debug == True):
return 'Hello World!'
else:
pass
# start the flask app here --->
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Docker文件:
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app
docker-compose.yml:
version: '3.8'
services:
backend:
build:
context: .
dockerfile: Dockerfile
command: 'python vegamain.py'
ports:
- 8004:5000
volumes:
- .:/app
depends_on:
- db
# queue:
# build:
# context: .
# dockerfile: Dockerfile
# command: 'python -u consumer.py'
# depends_on:
# - db
db:
image: mysql:5.7.22
restart: always
environment:
MYSQL_DATABASE: admin
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
volumes:
- .dbdata:/var/lib/mysql
ports:
- 33069:3306
我该如何修复这段代码?谢谢!
我在 运行 docker 个装有烧瓶的容器时遇到了同样的问题。
我将 Flask
降级为 1.1.4
,将 markupsafe
降级为 2.0.1
,这解决了我的问题。
检查 this 以供参考。
导入失败似乎与包的最新发布版本有关itsdangerous
。
查看最新版本 here
在我的例子中,我通过在我的 requirements.txt
文件中显式添加包依赖项 itsdangerous==2.0.1
使其工作。
要使更改生效,请更新您的虚拟环境以反映新的 requirements.txt
。
这个问题的根源似乎是 Flask 2.0.0 不受支持。尝试使用最新版本的 Flask。
https://github.com/pallets/itsdangerous/issues/289
截至 2022 年 3 月 8 日,最新版本为 2.0.3:
pip install Flask=2.0.3
请参阅 Flask source code on Github 了解最新版本。
将 itsdangerous==2.0.1
添加到我的 requirements.txt
文件,并降级到 Flask==1.1.1
为我修复了它。
解决方案 1 - 将 Flask 升级到最新版本,即 2.0.1 或更高版本。这是解决问题的推荐方法。
pip install Flask=2.0.1
或
pip install Flask=2.1.0
解决方案2 - 由于很难在短时间内升级到最新版本的Flask,您可以尝试以下方法解决问题。
您可以继续使用 Flask 版本 1.1.2 并尝试将 itdangerous 降级到 2.0.1。您可以通过将 itsdangerous==2.0.1
添加到 requirements.txt 文件来实现。
解决方案 3 - 另一种方法是将 Flask 从 1.1.2 升级到 1.1.4,因为它没有突破性的变化,同时降级 markupsafe 库到 2.0.1
从 Flask 1.1.2 升级到 1.1.4 后,您将面临另一个问题,即 ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’ in Release 1.38.0 #3661,可以通过将 markupsafe 降级到版本 2.0.1 来解决这个问题,如下所示。
pip install Flask==1.1.4
pip install markupsafe==2.0.1
参考 - [Solved] ImportError: cannot import name ‘json’ from itsdangerous
我只是将 itsdangerous==2.0.1
放入我的 requirements.txt 中。然后使用 pip install -r requirements.txt
和 docker-compose up --build
更新我的 virtualenv。现在对我来说一切都很好。没有升级烧瓶版本。
运行 pip install itsdangerous==2.0.1
在我的虚拟环境中对我有用。注意:我在我的 Windows 10 机器上使用
这个帖子对我也很有用。
加价保险柜不太安全。
Itisdangerous=2.0.1 是我要求列表中的第五个,恢复了乘客档案,从此一帆风顺!