2015-06-05 7 views
7

Kann mir jemand eine klare Anleitung zur Installation von mod_wsgi auf Ubuntu für Python 3 geben?Installation von mod_wsgi für Python3 unter Ubuntu

Ich bekam Flask & mod_wsgi erfolgreich mit Python3, und für einen kurzen Moment fühlte ich mich glücklich.

... bis ich bei Apache-Protokoll sah und erkannte, dass ich in dieses Problem haben: https://askubuntu.com/questions/569550/assertionerror-using-apache2-and-libapache2-mod-wsgi-py3-on-ubuntu-14-04-python Version

apt-get ist die Installation eines veraltet von libapache2-mod-wsgi-py3 und diese Fehler in Apache-Protokoll verursacht. (Soll ich dies melden und wenn ja wo?)

In der Verknüpfung verwendet der Techniker pip, um eine aktuellere Version zu installieren.

Interessanterweise scheint er es in eine virtuelle Python3-Umgebung zu installieren. (Wäre dies anders, als mit dem System pip3?)

er auch verwendet pip3 install mod_wsgi, aber pip3 search mod_wsgi kehrt:

(EDIT: nein er es nicht tut, benutzt er Pip nicht PIP3 Kann das richtig sein. ? hat er seine Drähte gekreuzt? wird ignorieren die Tatsache nicht pip, dass er in seiner py3venv ist und einfach das System py2 Installation verwenden? Aber wie auch immer, die nicht die Verwirrung ...) löst

mod_wsgi-metrics   - Metrics package for Apache/mod_wsgi. 
cykooz.recipe.pastewsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi 
mod_wsgi-httpd   - Installer for Apache httpd web server. 
apachemiddleware   - Useful Python middleware for use with mod_wsgi deployments 
tranchitella.recipe.wsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi 
mod_wsgi     - Installer for Apache/mod_wsgi. 

Was ist also mod_wsgi-httpd? Und ist es sicher, dass dies nicht der ist, den ich will?

Schließlich kann jemand einen Link zur Installation von mod_wsgi aus der Quelle bereitstellen?

EDIT: Ich verstehe nicht, warum der Ingenieur pip install mod_wsgi statt pip3 ... verwendet. Das kann doch nicht stimmen. Aber wenn ich PIP3 verwende, erhalte ich:

[email protected]:~$ cd web/piFlask 

[email protected]:~/web/piFlask$ source ./venv3/bin/activate 
(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi 
Downloading/unpacking mod-wsgi 
    Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) egg_info for package mod-wsgi 
    Traceback (most recent call last): 
     File "<string>", line 17, in <module> 
     File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 
     'missing Apache httpd server packages.' % APXS) 
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 

    File "<string>", line 17, in <module> 

    File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 

    'missing Apache httpd server packages.' % APXS) 

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 

---------------------------------------- 
Cleaning up... 
Command python setup.py egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi 
Storing debug log for failure in /home/pi/.pip/pip.log 

Und jetzt versuche ich pip3 install mod_wsgi-httpd, dauert es etwa fünf Minuten zu kompilieren:

(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi-httpd 
Downloading/unpacking mod-wsgi-httpd 
    Downloading mod_wsgi-httpd-2.4.12.5.tar.gz 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) egg_info for package mod-wsgi-httpd 
    apr-1.5.2/ 
    apr-1.5.2/config.layout 
    apr-1.5.2/build.conf 
    apr-1.5.2/emacs-mode 
    : 

So jetzt bin ich besorgt ich eine zweite haben Apache sitzt in meinem Py3 virtualenv.

Aber das beseitigt den Fehler; pip3 install mod_wsgi wird jetzt erfolgreich abgeschlossen.

EDIT: aber jetzt bin ich völlig losgelöst und versuche seinen Anweisungen zu folgen: Ich habe kein /etc/apache2/mods-available/wsgi_express.load, und wenn er vorschlägt, es zu machen, dann scheint das zunächst willkürlich, und zweitens schlägt er den Text vor in ihm, dh LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so - diese Datei existiert nicht auf meinem System.

Ich habe /etc/apache2/mods-available/wsgi.load

wieder in Technologie Ertrinken, kann mir jemand wirft eine Linie?

Antwort

4

Wenn sie die virtuelle Umgebung von Python 3 aktiviert hätten und ihr bin-Verzeichnis in ihrem Pfad wäre, könnten sie wahrscheinlich einfach 'pip' anstelle von 'pip3' ausführen. Sie sollten 'which pip' ausführen, um zu überprüfen, ob es von der erwarteten virtuellen Umgebung stammt.

Das Paket 'mod_wsgi-httpd' dient speziell zur Installation einer eigenständigen Apache-Instanz, um Probleme zu beheben, bei denen der systemweite Apache veraltet ist oder fehlende Header-Dateien enthält oder die systemweite Konfiguration nicht ändern kann . Es ist in der Regel von größerer Relevanz, wenn Sie keinen Root-Zugriff haben, um systemweite Probleme zu beheben, und nur daran interessiert sind, auf einem nicht privilegierten Port zu laufen, und somit keinen Root-Zugriff benötigen. Sie müssten auch 'mod_wsgi-express' aus dem 'mod_wsgi' Paket verwenden, das 'pip' installiert wurde, nachdem 'mod_wsgi-httpd' installiert wurde, da dies die einzige Möglichkeit ist, 'mod_wsgi-httpd' installierte Version von Apache zu verwenden .

Also, für 'mod_wsgi-httpd' würden Sie es wirklich ignorieren wollen. Wenn Sie es bereits installiert haben, deinstallieren Sie 'pip' sowohl es als auch 'mod_wsgi'. Letzteres muss deinstalliert werden, da es an die 'mod_wsgi-httpd' Apache-Version gebunden ist und die 'mod_wsgi.so' nicht systemweit funktionieren wird.

In Bezug auf separate Benutzer Schritte in Verbindung, sie sehen richtig, obwohl ich sagen würde, dass in Schritt 3, soll hervorgehoben werden, dass die LoadModule und WSGIPythonHome Linien hinzugefügt werden, was ausgegeben wird, wenn mod_wsgi-express install-module Befehl ausgeführt wird. Was ausgegeben wird, wird an Ihre Installation angepasst. Also stellen Sie keine Werte her, verwenden Sie einfach die Ausgabe dieses Befehls.

Wenn Sie noch eine wsgi.load Datei haben, führen Sie sudo a2dismod wsgi aus, um sie loszuwerden oder sie anderweitig manuell zu entfernen. Es ist ein Rest vom alten System verpackt mod_wsgi.

+0

ich entfernt habe 'mod_wsgi' und' mod_wsgi-httpd' mit Pip. Jetzt stecke ich fest. Wenn ich 'pip install mod_wsgi 'installiere, bekomme ich den gleichen Fehler wie in meinem Post, wo ich' pip3 ... 'versuche.Das einzige, was mir einfällt, ist, das System pip zu benutzen, um die Installation zu machen, in der Hoffnung, dass mein System Apache findet ...? –

+1

Sorry, total übersehen das Problem apxs. Das liegt daran, dass Sie das entsprechende "dev" -Paket für Apache nicht von Ubuntu-Paketdepots installiert haben. Dass dies erforderlich ist, wird auf der PyPi-Seite für mod_wsgi erwähnt. Ohne dieses Paket werden Sie die Apache-Header-Dateien und ihr Build-Tool namens "apxs" vermissen. –

+0

Ich fand die Seite https://pypi.python.org/pypi/mod_wsgi - es ist frustrierend, weil es sagt * "Zum Beispiel, wenn Sie das Apache Prefork MPM verwenden würden, müssten Sie ... Wenn Stattdessen benutzt du den Apache Worker MPM, du müsstest ... "Aber ich habe noch nie von diesen Begriffen gehört. Sind diese verschiedenen Aromen von Apache? Irgendwie muss ich herausfinden, welchen Geschmack mein Apache hat und was die entsprechende Dev-Datei wäre ...? –

12

Ich beabsichtige diese Antwort als eine "Notiz an mich selbst, die für andere nützlich sein kann".

apt-get zum Zeitpunkt des Schreibens installiert eine veraltete Version von mod_wsgi.

pip installiert eine aktuelle Version. Dazu lädt man den Quellcode herunter und kompiliert ihn.

Richten Sie ein Python3 virtualenv und aktivieren Sie es mit source ./venv3/bin/activate, überprüfen Sie, dass which pip bestätigt, dass es jetzt diese Umgebung verwendet. Es scheint, dass Pip und Pip3 austauschbar sind.

In meinem Fall ist meine ./venv3 in meinem Kolben-Ordner. Und der einzige Zweck von mod_wsgi ist Apache Route http://myfoo.org/flask Anfragen an meine Kolben App. Es macht also Sinn, mod_wsgi in diese venv3 zu installieren.

Jedoch für pip, um es erfolgreich zu kompilieren, brauche ich zuerst sudo apt-get install apache2-dev, die erforderlichen Header-Dateien bereitstellt. Dann habe ich einen Neustart benötigt. Dann ist pip install mod_wsgi in Ordnung.

Dann folgen Sie den Anweisungen aus dem ursprünglichen Link:

(venv3) 
$ sudo venv3/bin/mod_wsgi-express install-module 
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so 
WSGIPythonHome /home/pi/web/piFlask/venv3 

Dann habe ich jeweils /etc/apache2/mods-available/wsgi_express.{load,conf} enthält diese 2 Zeilen zu erstellen.

schließlich das Modul aktivieren und überprüfen Apache Fehlerprotokoll:

a2enmod wsgi 
sudo service apache2 restart 
cat /var/log/apache2/error.log 
+2

'sudo apt-get installieren apache2-dev' dann' pip install mod_wsgi' war alles was ich tun musste; kein Neustart erforderlich – Nick

+0

'a2enmod wsgi' sollte nicht nach Ihren Anweisungen arbeiten. 'a2enmod wsgi_express' würde aber. –