2017-10-17 107 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