it-swarm.com.de

Wie führe ich uwsgi mit virtualenv aus?

Ich entwickle gerade mein erstes echtes Python-Flaschenprojekt und bin dabei, den Build-Server für die Bereitstellung des "Latest Build" einzurichten, der auf jedem Check-In basiert.

Ich habe ein Startskript eingerichtet, in dem ich die Anwendung mit uwsgi starte und dieser Teil funktioniert einwandfrei. Ich habe vor kurzem auch angefangen, virtualenv zu verwenden, und dadurch werden die installierten Pakete unter projectname\flask\Lib\site-packages zu meinem Projekt hinzugefügt.

Ich verwende nginx als Webserver und die Konfiguration sieht folgendermaßen aus:

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;
}

Ich beginne uwsgi mit diesem:

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

Jetzt wo ich weiß, ob ich es richtig mache ... derzeit setze ich den gesamten Ordner auf dem Build-Server. Ich möchte keine globalen Python-Module installieren, nur damit mein Build funktioniert. Richtig oder falsch?

Der Fehler, den ich momentan bekomme, ist:

ImportError: No module named flask_wtf

Wenn ich recht habe, wie konfiguriere ich das Setup für die Verwendung der virtualenv-Site-Pakete? Mein bevorzugter Speicherort wäre im Skript startup und nicht in der Variable nginx.

37
Asken

Verwenden Sie -H, um für virtualenv den Python-Pfad festzulegen.

uwsgi -H /path/to/your/virtualenv 

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

48
iMom0

Um die aktivierte Virtualenv zu verwenden, können Sie dieses Konfigurations-Snippet in Ihrem uwsgi.ini verwenden:

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

Als user995394 point out gibt es eine Möglichkeit, uWSGI die Verwendung der vorhandenen virtuellen Umgebung mitzuteilen. Wenn ich jedoch die uWSGI-Option im Formular virtualenv = /full/path/to/my/virtualenv übergeben habe (es ist von INI config), klagt es über ImportError: No module named site. Die Problemumgehung, die ich gefunden habe, ist, dass Sie uWSGI aus dem Ordner starten, in dem sich Ihre virtualenv befindet, und nur virtualenv = my_virtualenv_name übergeben (d. H. Pfad ist relativ).

Ich verwende uWSGI 2.0.

10
Palasaty

Ich hatte dieses Problem vor einigen Monaten und habe hier ein vollständiges Beispiel für Demokonfigurationen einschließlich Nginx, uwsgi, das automatisch mit Upstart auf Linux gestartet wird. 

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

1
tourdownunder

Andere Antworten haben nicht geholfen, und ich habe der Konfigurationsdatei uwsgi.ini einen Pfad zu virtualenv hinzugefügt. Der Fehler ist verschwunden.

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