2017-10-17 9 views
0

J'ai récemment déployé une application Flask sur une instance Amazon EC2 en utilisant SQLAlchemy et PostgreSQL.Application Flask: "ImportError: aucun module nommé _psycopg"

Ce sont les dépendances qui sont répertoriés dans le fichier: exigences

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 

L'application est déployée sur Ubuntu 16.x et Apache 2.4 en utilisant un fichier WSGI. L'application fonctionne, mais une erreur se produit lorsque SQLAlchemy est utilisé pour interroger la base de données par exemple.

[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 

Chaque fois que j'ouvre une console Python en utilisant le même environnement virtuel que le déploiement WSGI, je suis en mesure d'importer le module ... Mais

python 
from psycopg2 import _psycopg 

Ce qui pourrait causer ce problème?

Cordialement, B.

+0

Vérifiez la version Python que vous utilisez sur la ligne de commande par rapport à ce que Apache utilise. – Cfreak

Répondre

0

Ok, donc j'ai trouvé la solution à ce problème funky. J'utilisais Python 3 et un environnement virtuel. Aucun problème là-bas.

L'erreur est due à une mauvaise installation de mod_wsgi.

Je l'ai installé par:

sudo apt-get install libapache2-mod-wsgi 

Mais cela est faux! Si vous voulez utiliser Python 3, vous au lieu devez installer le mod_wsgi spécifique pour Python 3, comme ceci:

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

Cela devrait être "au lieu de", pas "aussi". Vous ne pouvez pas avoir les deux installés en même temps qu'Apache ne peut utiliser que l'un ou l'autre, pas les deux. –

0

Il utilise la version Python correcte par la manière.

La machine virtuelle et le chemin Python sont configurés dans Apache (voir l'extrait ci-dessous). En outre, lorsque je surfe sur des pages/itinéraires dans l'application Flask qui ne font rien avec SQLAlchemy, une page est diffusée comme prévu.

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

Vous ne devriez pas utiliser '' python-path'' pour faire référence à '' site-packages''. Le meilleur moyen est d'utiliser '' python-home'' pour faire référence à la racine de l'environnement virtuel. Voir http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html –

+0

En effet! Modification de la configuration pour utiliser correctement python-home maintenant. – Braek