Erste Fläschchen zu verwenden Python ist3 (Apache/mod_wsgi)
Habe ich einen einfachen "Hallo Welt" Kolben-app läuft.
Bin ich auf Ubuntu 14.04 mit Apache 2.4. Ich habe installiert mod_wsgi.
Habe ich einen ~/web/piFlask/venv/
zu halten, ein virtualenv-erstellt Python2 mit Kolben installiert.
Aber ich möchte meine flaskapp importieren Sie eine Python ist3.x-Modul habe ich geschrieben.
Was muss ich tun, um dies möglich zu machen?
Habe ich versucht die Schaffung einer ~/web/piFlask/venv3/
und ändern ~/web/piFlask/piFlask.wsgi
:
import os, sys
PROJECT_DIR = '/home/pi/web/piFlask'
activate_this = os.path.join(PROJECT_DIR, 'venv3/bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, PROJECT_DIR)
from piFlask import app as application
application.debug = True
Aber ich glaube nicht, dass dies ausreichend ist. Diese .wsgi ist in der Tat eine Python-Datei ausgeführt werden, die von mod_wsgi, die ich bin sicher, dass wird ein Py2.x-interpreter zu tun die Ausführung.
Also wenn ich verstehen richtig, mod_wsgi feuert bis das system in Python, um dies auszuführen .wsgi, die wiederum in das Feuer bis mein ~/web/piFlask/venv/
- interpreter, um tatsächlich die Anforderung nicht verarbeiten.
Ich denke, dass ich überzeugen konnte, mod_wsgi verwenden entweder eine system-Python ist3 oder meine eigenen venv3/... durch Einstellung WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages
in /etc/apache2/mods-available/wsgi.conf
Aber ich fand eine Anleitung irgendwo, die sagt, Sie haben zu kompilieren mod_wsgi für Py3, und der Boden schnell heraus fällt zu diesem problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtig, mod_wsgi kompiliert werden muss für eine bestimmte Python-version, da es nie tatsächlich ausgeführt wird 'python' executable. Anstatt den Python-Bibliothek verknüpft ist, in mod_wsgi.
Dem Endergebnis kann man nicht mischen Python-3-code innerhalb einer Anwendung, die Sie mit Hilfe der Python-2-interpreter.
Würden Sie haben zu prüfen, wodurch der code lauffähig sowohl unter Python 2 und 3 und dann könnte man auswählen, welche diejenigen, die Sie verwenden möchten, und verwenden Sie eine version von mod_wsgi zusammengestellt für die version, die Sie wählen, zu verwenden.
libapache2-mod-wsgi-py3
-- könnte ich stattdessen tun: 1. a2disable mod_wsgi, 2. deinstallieren mod_wsgi mit pip, 3. install libapache2-mod-wsgi-py3 mit pip3?Brauchte eine Weile, obwohl es wirklich einfach am Ende. Leider habe ich verloren, meine bash-Geschichte also, wenn Sie einen Fehler finden, bitte einen Kommentar hinterlassen oder Bearbeiten in der Korrektur.
Hinweis, dass ich bereits kam mod_wsgi arbeiten, also musste ich es entfernen:
EDIT: Wegen apt-get installieren, ein veraltetes Paket (die Ergebnisse in einen kleinen Fehler schleichen Apache-error-log), die ich nicht zum Zeitpunkt des Schreibens dieses empfehlen:
Statt, richten Sie zuerst Ihre py3 virtuellen Umgebung (und könnte genauso gut in installieren Kolben in Sie, während Sie gerade dabei sind)
Nun Folgen Installation mod_wsgi für Python ist3 auf Ubuntu zu installieren mod_wsgi in diesem venv, und ...
Diese wurde aus dem original-apt-get-Ansatz, jetzt ist es nicht relevant:
Schließlich muss ich ändern, meine ~/web/flaskapp/flaskapp.wsgi, so dass es unterstützt nun auch Python ist3:
Nur eine Erinnerung daran, wie Apache verwendet mod_wsgi für das ausführen dieser Datei, wenn der Benutzer seinen browser http://myfoo.org/flask:
Diskussion: Es scheint ein bisschen chaotisch, dass ich die Installation mod_wsgi Modul in Apache, aber es befindet sich in einem venv3, die in meinem flaskapp Ordner. Aber das ist zumindest sichergestellt Apache -> mod_wsgi -> (verwendet den korrekten, d.h. venv3 Python) -> {zum starten meiner FlaskApp}.
Die alternative wäre ein update der system Python, und verwenden, statt venv.
Ich fing an zu laufen, Python ist3.5.2 mit Kolben 0.12 in einer venv auf einem Ubuntu 16.04 (virtuelle Maschine).
@Graham wies darauf hin, aktivieren Sie die venv von WSGI-Skript-Datei ist nicht der bevorzugte Weg. Mehr info hier: http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html
Nur für jemand anderes auf der Suche nach Informationen über dieses bin ich dabei, alle Schritte zusammen:
Hinweis: mein app-name ist blazing, Pfad ~/jan/blazing. Ersetzen Sie mit Ihrer eigenen.
AUSGABE:
LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/jan/rasend/venv"
HINZUFÜGEN: LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so"
HINZUFÜGEN:
dann
HINZUFÜGEN:
und
HINZUFÜGEN:
Oder wenn Sie andere Websites laufen und hätte gerne eine Flasche als einen der Virtuellen hosts, können Sie diese conf-Datei:
und stellen Sie sicher, dass Ihre
PROJECT_DIR
imflaskapp.wsgi
Punkte auf Ihr PROJEKTNAME.py.aktivieren Sie die virtuelle site, und laden Sie apache:
schließlich:
WSGIRestrictStdout Off
als das ist die Standardeinstellung.Entnommen aus dem P i s Antwort. Das nun folgende funktioniert und behebt das problem: