【问题标题】:Flask Application Running Python 2.x instead of 3.x运行 Python 2.x 而不是 3.x 的 Flask 应用程序
【发布时间】:2018-02-16 13:58:56
【问题描述】:

在我的 Ubuntu 16.04.3 x64 Web 服务器上运行我的 Flask 应用程序时,尝试导入 Flask-OpenID 库 v1.2.5 时出现以下错误:

 File "/usr/local/lib/python2.7/dist-packages/openid/oidutil.py", line 17, in <module>
 from urllib.parse import urlencode
 ImportError: No module named parse

我知道发生这种情况是因为该模块是使用 python 2.7.5(我已安装在我的机器上)而不是 3.5.2(也已安装)加载的。

检查python的版本,验证机器上是否安装了它:

>> python -V
Python 3.5.2

虚拟环境是用python 3初始化的:

python3 -m venv env

Flask 应用似乎仍在使用来自 python 2.7.5 的文件。

如果这确实是问题,有没有办法设置默认值或确保 Flask 使用正确版本的 python?我的应用在我的 PC 上的开发环境中运行,没有错误。

【问题讨论】:

  • 能否确认pip版本,如果安装时没有激活virtualenv,pip和pip3选择python2.7和3。
  • urllib.parse 是仅在 python 3.x 中可用的功能,因此 Flask 应用程序是为 3.x 设计的,您应该在 python 3.5 而不是 python 2.7 下运行该应用程序。
  • 当然可以。运行 pip -V 显示:pip 8.1.1 from /var/www/FlaskApp/FlaskApp/env/lib/python3.5/site-packages (python 3.5) 我确保使用“source env/bin/”激活环境激活”
  • 好的,我想我解决了部分问题,我的 Apache Web 服务器运行的是不同版本的 mod_wsgi,它是为 python 2.7 及更低版本编译的。但是,使用全新安装,我现在收到错误消息,告诉我无法导入我自己的 python 文件。例如“ImportError: No module named 'api_utils'”

标签: python flask


【解决方案1】:

事实证明我的虚拟环境配置正确,但问题实际上是在 Apache Web 服务器上运行的 mod_wsgi 是跨 Python 版本 2.7.X 编译的,并使用 python 2.7.5 而不是 3.5.2 加载了 Flask .

为了解决这个问题,我首先更新到可以运行 python 3.5.1+ 的 wsgi 版本

sudo apt-get install libapache2-mod-wsgi-py3

从此时起,您的烧瓶应用程序可能无法运行,因为您的虚拟主机,并且烧瓶应用程序的 wsgi 文件需要使用 python 版本 3 正确配置。

关注本教程:http://devmartin.com/blog/2015/02/how-to-deploy-a-python3-wsgi-application-with-apache2-and-debian/

您还应该将您的 VirtualHost 配置更改为这篇文章中显示和解释的配置:https://stackoverflow.com/a/39419825/9367575

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2011-07-19
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2019-06-15
    相关资源
    最近更新 更多