Flask 无法从“jinja2”导入名称“escape”

问题描述 投票:0回答:1

我用 docker 文件编写了一个非常简单的 Flask 应用程序,以在此处启动其容器:https://github.com/trouchet/appy。我使用包管理工具

poetry
。当我运行
make start
时,它输出以下错误。请帮我找出我的缺陷在哪里

flask --app src/main.py run --port=8081
Traceback (most recent call last):
  File "/usr/bin/flask", line 11, in <module>
    load_entry_point('Flask==1.1.1', 'console_scripts', 'flask')()
  File "/home/brunolnetto/.local/lib/python3.8/site-packages/pkg_resources/__init__.py", line 534, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/brunolnetto/.local/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2930, in load_entry_point
    return ep.load()
  File "/home/brunolnetto/.local/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2517, in load
    return self.resolve()
  File "/home/brunolnetto/.local/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2523, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python3/dist-packages/flask/__init__.py", line 14, in <module>
    from jinja2 import escape
ImportError: cannot import name 'escape' from 'jinja2' (/usr/local/lib/python3.8/dist-packages/jinja2/__init__.py)
make: *** [Makefile:99: start] Error 1
flask jinja2
1个回答
0
投票

您的问题的根本问题源于两个软件生态系统之间的依赖管理冲突。根据错误消息,您的jinja2是使用pip安装在路径/usr/local/lib/python3.8/dist-packages/jinja2/。依赖于它的 Flask 是使用 apt 安装在路径 /usr/lib/python3/dist-packages/flask/ 处。两者的版本不兼容。事实上,系统中存在flask正确依赖的jinja2版本,但是Python解释器优先考虑pip安装的jinja2,导致这个问题。此问题通常有两种解决方案:(1)使用 sudo pip 卸载 jinja2,然后使用 apt 重新安装它们,或者使用 apt 卸载 Flask 并使用 sudo pip 重新安装。 (2)使用Python的imp模块自定义路径,在导入jinja2之前从apt路径导入flask。示例如下:

import imp
path = ['/usr/lib/python3/dist-packages']
fp, pathname, description = imp.find_module('jinja2', path)
imp.load_module("jinja2", fp, pathname, description)

期待您的回复

© www.soinside.com 2019 - 2024. All rights reserved.