web-dev-qa-db-fra.com

Comment exécuter uwsgi avec virtualenv

Je suis en train de développer mon premier vrai projet de flacon en python et je suis sur le point de configurer le serveur de construction pour déployer la "Dernière construction" qui est construite à chaque enregistrement.

J'ai mis en place un script de démarrage dans lequel je lance l'application avec uwsgi et cette partie fonctionne correctement. J'ai aussi récemment commencé à utiliser virtualenv et, ce faisant, les packages installés sont ajoutés à mon projet sous projectname\flask\Lib\site-packages.

J'utilise nginx comme serveur Web et la configuration ressemble à ceci:

location / { try_files $uri @graderbuild; }
location @graderbuild {
    include uwsgi_params;
    uwsgi_param UWSGI_CHDIR /usr/local/grader/build;
    uwsgi_param UWSGI_PYHOME /usr/local/grader/build;
    uwsgi_pass 127.0.0.1:3031;
}

Je commence uwsgi en utilisant ceci:

exec /usr/local/bin/uwsgi --master --socket 127.0.0.1:3031
    --wsgi-file restserver.py --callable app --processes 4 --die-on-term
    --threads 2 >> /var/log/grader-build.log 2>&1

Maintenant où je sais si je le fais bien… Actuellement, je déploie tout le dossier sur le serveur de compilation. Je ne veux pas installer des modules python globaux simplement pour que ma construction fonctionne. Vrai ou faux?

L'erreur que je reçois actuellement est:

ImportError: No module named flask_wtf

Si j'ai raison, comment configurer l'installation pour utiliser les packages de site virtualenv? Mon emplacement préféré serait dans le script startup et non dans la config nginx.

37
Asken

Utilisez -H pour définir virtualenv sur le chemin python.

uwsgi -H /path/to/your/virtualenv 

http://uwsgi-docs.readthedocs.org/en/latest/Options.html#virtualenv

48
iMom0

Pour utiliser le virtualenv activé, vous pouvez utiliser cet extrait de configuration dans votre uwsgi.ini:

; If VIRTAL_ENV is set then use its value to specify the virtualenv directory
if-env = VIRTUAL_ENV
virtualenv = %(_)
endif =
12
Beau

Comme user995394 pointe out, il existe un moyen de dire à uWSGI d'utiliser l'environnement virtuel existant . Cependant, lorsque je passe l'option uWSGI au format virtualenv = /full/path/to/my/virtualenv (il provient de la configuration INI), il se plaint du ImportError: No module named site. La solution que j’ai trouvée est que vous lancez uWSGI à partir du dossier où se trouve votre virtualenv et transmettez simplement virtualenv = my_virtualenv_name (le chemin est relatif).

J'utilise uWSGI 2.0.

10
Palasaty

J'ai eu ce problème il y a quelques mois et j'ai un exemple complet de configurations de démonstration ici, y compris nginx, uwsgi commençant automatiquement avec upstart sur linux. 

https://stackoverflow.com/a/27221427/567606

1
tourdownunder

Les réponses des autres n'ont pas aidé et j'ai ajouté le chemin d'accès de virtualenv au fichier de configuration uwsgi.ini. L'erreur a disparu.

pythonpath = /path-to-virtualenv/project/lib/python2.7/site-packages
0
Yaroslav Nikitenko