Flask application: "ImportError: No module named _psycopg"

Flask application: "ImportError: No module named _psycopg"

我最近使用 SQLAlchemy 和 PostgreSQL 将 Flask 应用程序部署到 Amazon EC2 实例。

这些是需求文件中列出的依赖项:

click==6.7
Flask==0.12.2
Flask-Login==0.4.0
Flask-SQLAlchemy==2.3.1
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
psycopg2==2.7.3.1
SQLAlchemy==1.1.14
Werkzeug==0.12.2
WTForms==2.1

该应用程序使用 WSGI 文件部署在 Ubuntu 16.x 和 Apache 2.4 上。该应用程序可以运行,但是每当使用 SQLAlchemy 查询数据库时我都会收到错误消息。

[Mon Oct 16 23:59:54.589811 2017] [wsgi:error] [pid 21547:tid 140180069140224] [remote 88.207.196.60:36925]     from psycopg2._psycopg import (                     # noqa
[Mon Oct 16 23:59:54.589813 2017] [wsgi:error] [pid 21547:tid 140180069140224] [remote 88.207.196.60:36925] ImportError: No module named _psycopg

每当我使用与 WSGI 部署相同的虚拟环境打开 Python 控制台时,我都能够导入模块,但是...

python
from psycopg2 import _psycopg

什么可能导致这个问题?

亲切的问候, B.

顺便说一下,它使用的是正确的 Python 版本。

虚拟机和 Python 路径在 Apache 中配置(参见下面的代码片段)。此外,当我在不使用 SQLAlchemy 执行任何操作的 Flask 应用程序中浏览 pages/routes 时,页面按预期提供。

WSGIDaemonProcess myapp python-home=/usr/bin/python3 python-path=/home/ubuntu/envs/myapp/lib/python3.5/site-packages:/home/ubuntu/apps/myapp user=ubuntu group=ubuntu threads=5

好的,所以我找到了这个 funky 问题的解决方案。

我正在使用 Python 3 和一个虚拟环境。没问题。

错误是由于 mod_wsgi.

安装不正确造成的

我是通过以下方式安装的:

sudo apt-get install libapache2-mod-wsgi

但这是错误的!如果你想使用 Python 3,你 必须安装特定于 Python 3 的 mod_wsgi,像这样:

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