2016-11-12 6 views
2

Ich versuche, mod_wsgi mit pip in Python 2.7.10 auf Mac OS 10.12 in einem virtualenv zu installieren. Ich beabsichtige, es in einem Django 1.10.3 zu verwenden. Wenn ich laufen „BIB installieren mod_wsgi“ Ich bekomme die folgende Ausgabe:pip install mod_wsgi schlägt in virtualenv

Collecting mod_wsgi 
Using cached mod_wsgi-4.5.7.tar.gz 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 247, in <module> 
    APR_INCLUDES = get_apr_includes().split() 
    File "/private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/setup.py", line 219, in get_apr_includes 
    stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/sf/kdqqs98d06326180mss7hggh0000gn/T/pip-build-hgA7s1/mod-wsgi/ 

Ich bin neu in virtualenv so könnte es sein, dass ich fehle nur etwas mit, wie das einzurichten. Ich habe versucht, pip zu aktualisieren, setuptools und ez_setup über pip neu zu installieren.

+0

Haben Sie die Xcode-Befehlszeilen-Tools installiert? Gibt '' xcode-select --install'' an, dass sie installiert sind, wenn sie ausgeführt werden? –

+0

Das Ausführen dieses Befehls veranlasste mich, die Installation auszuführen. Ich ging voran und installierte die Kommandozeilen-Tools. Ich bekomme immer noch das gleiche Problem, wenn ich pip install mod_wsgi ausführen. –

+0

Existiert das Programm ''/usr/sbin/apxs''? Können Sie "apxs" irgendwo auf Ihrem System finden? Kann '' find/-name apxs'' verwenden. Apple bricht die Installation von Apache-Modulen und mod_wsgi bei jedem neuen Haupt-OS-Update und dieses Mal sieht es so aus, als ob sie '' apxs'' nicht an der normalen Stelle installieren. –

Antwort

8

Es gibt zwei Probleme mit der Installation von mod_wsgi auf MacOS X Sierra.

Das erste Problem ist, dass Apple die Apache-Standardinstallation, die sie bereitstellen, völlig unbrauchbar gemacht hat, wenn es darum geht, Apache-Module von Drittanbietern zu installieren. Dies baut auf den Hindernissen auf, die sie bereits in früheren Versionen von MacOS X hatten, was bedeutete, dass man durch die Ringe springen musste, um es zum Laufen zu bringen.

Das Problem in diesem Fall ist, dass Apple die Programme apr-1-config und apu-1-config aus der Xcode-Verteilung entfernt hat. Dies bedeutet, dass apxs fehlschlägt, wenn bestimmte Arten von Abfragen zur vorhandenen Apache-Konfiguration durchgeführt werden. Dies sind Informationen, die benötigt werden, um Module von Drittanbietern für Apache zu erstellen. Ohne zu wissen, wo Header-Dateien installiert sind, schlagen Builds von Apache-Modulen fehl.

Angesichts der Tatsache, dass Apple die Fähigkeit gebrochen hat, zusätzliche Apache-Module in jedem Betriebssystemupdate zu installieren und es nie für die gesamte Lebensdauer des Betriebssystems zu reparieren. Daher ist es unwahrscheinlich, dass sie dieses Problem beheben.

In anderen Foren ein Vorschlag, um das Problem zu bekommen, ist April und APU-Pakete mit brauen zu installieren und Symlink dann die apr-1-config und apu-1-config Programme von denen in den Standort apxs sucht. Dies scheint für mich fehleranfällig zu sein, da es scheint, dass Module dann gegen Brühkopfdateien kompiliert werden können und diese nicht mit der Bibliotheksversion übereinstimmen, die von der Apache-Installation des Betriebssystems bereitgestellt wird. Das könnte zu Abstürzen führen.

Die einzige garantierte Lösung ist daher, die mit dem Betriebssystem gelieferte Apache-Installation nicht zu verwenden.

Eine Option könnte also sein, Brew zu verwenden, um Apache zu installieren und die Brew-Installation von Apache zu verwenden (nicht nur APR und APU von brew).

Eine weitere Option, wenn pip install mod_wsgi Verfahren verwendet wird, ist zunächst die pip installierbar Apache für mod_wsgi zu verwenden.

Verwenden Sie dies sollte nur getan werden, wo keine Wahl haben und Sie sollten immer das System Apache verwenden, wenn Sie können. Im Moment scheinen wir keine Wahl zu haben.

Dies wird Apache in die Python-Installation oder virtuelle Umgebung installieren. Es wird etwas dauern, bis APR/APU/Apache und eventuell weitere benötigte Bibliotheken kompiliert/installiert werden. Ich benutze -vvv, damit Sie es sehen können, die Compilation zu tun, sonst könnten Sie denken, dass es aufgehängt hat.

Sobald dies erledigt ist, führen Sie pip install mod_wsgi.

Dies ist nur nützlich, wenn mod_wsgi-express verwendet wird.Sie können dies nicht verwenden, wenn Sie dann das kompilierte mod_wsgi mit dem Betriebssystem Apache verwenden möchten, da das so erstellte Modul nicht mit dem Betriebssystem Apache kompatibel ist.

Das zweite Problem ist, dass MacOS X Sierra Betriebssystem-APIs für das Abrufen von Prozessaufgabeninformationen geändert hat. Dies bedeutet, dass mod_wsgi 4.5.7 und früher nicht kompiliert werden können. Es gibt einen Fix, der in mod_wsgi 4.5.8 kommt, oder Sie können Code aus dem mod_wsgi github Repository verwenden, bis 4.5.8 bei Bedarf veröffentlicht wird.


UPDATE 1

Managed einen Hack in setup.py enthalten, wenn pip install mod_wsgi tun. Dies wird auch in mod_wsgi 4.5.8 sein. Das bedeutet, dass Sie das System Apache weiterhin verwenden können und keine separate installieren müssen, z. B. indem Sie pip install mod_wsgi-httpd verwenden. Dies löst nicht ähnliche Probleme mit der Methode configure/make für die Installation von mod_wsgi.

+0

Die Installation von Apache via Brew schien den Trick zu machen! Danke für eine so robuste und klare Antwort! –

Verwandte Themen