2017-10-17 94 views
0

我最近使用SQLAlchemy和PostgreSQL将Flask应用程序部署到Amazon EC2实例。Flask应用程序:“ImportError:No module named _psycopg”

这些是在要求文件中列出的依赖性:使用WSGI文件

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 

的应用程序被部署在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.

+0

检查Python版本您使用的命令行对什么Apache正在使用哪个。 – Cfreak

回答

0

好了,所以我找到了解决这个时髦问题。

我正在使用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 
+0

这应该是'反而必须',而不是'也必须'。您不能同时安装Apache,因为Apache只能使用其中一种,而不能同时使用这两种。 –

0

它使用的方式正确的Python版本。

虚拟机和Python路径在Apache中配置(请参阅下面的代码片段)。另外,当我浏览Flask应用程序中的页面/路由时,它们不会对SQLAlchemy执行任何操作,因此会按预期的方式提供页面。

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 
+0

你不应该使用''python-path''来引用''site-packages''。更好的方法是使用''python-home''来引用虚拟环境根目录。参见http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html –

+0

确实!现在修改配置以正确使用python-home。 – Braek