2015-06-05 23 views
7

Qualcuno potrebbe darmi un chiaro set di istruzioni per l'installazione di mod_wsgi su Ubuntu per Python 3?Installare mod_wsgi per Python3 su Ubuntu

Ho ottenuto la boccetta & mod_wsgi utilizzando con successo Python3 e per un breve momento mi sono sentito felice.

... fino a quando ho guardato log di Apache e sono reso conto che ho eseguito in questo problema: https://askubuntu.com/questions/569550/assertionerror-using-apache2-and-libapache2-mod-wsgi-py3-on-ubuntu-14-04-python

apt-get è l'installazione di una versione non aggiornata di libapache2-mod-wsgi-py3 e questo sta causando gli errori nel registro di Apache. (Devo segnalare questo e se sì dove?)

Nel link, l'ingegnere sta usando pip di installare una versione più up-to-date.

È interessante notare che sembra installarlo in un ambiente Python3 virtuale. (Sarebbe questo essere diverso rispetto all'utilizzo del sistema pip3?)

Anche lui usa pip3 install mod_wsgi, ma pip3 search mod_wsgi rendimenti:

(EDIT: no non lo fa, egli usa pip non PIP3 può che essere di destra. ? ha ha ottenuto i suoi fili incrociati? non è pip intenzione di ignorare il fatto che egli è nel suo py3venv e semplicemente utilizzare l'installazione PY2 del sistema? Ma comunque che non si risolve la confusione ...)

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. 

Quindi cos'è mod_wsgi-httpd? Ed è certo che questo non è quello che voglio?

Infine, qualcuno può fornire un collegamento all'installazione di mod_wsgi dall'origine?

MODIFICA: Non capisco perché l'ingegnere stia utilizzando pip install mod_wsgi anziché pip3 .... Sicuramente non può essere giusto? Ma se io faccio uso PIP3, ottengo:

[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 

E ora provo pip3 install mod_wsgi-httpd, ci vogliono circa cinque minuti per compilare:

(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 
    : 

Così ora mi sono preoccupato ho un secondo Apache che si siede nel mio virtualenv Py3.

Tuttavia questo elimina l'errore; pip3 install mod_wsgi ora viene completato correttamente.

EDIT: ma ora mi sono completamente scollato cercando di seguire le sue istruzioni: non ho uno /etc/apache2/mods-available/wsgi_express.load, e se lui sta suggerendo di farlo, allora per cominciare questo sembra arbitrario, e in secondo luogo il testo che suggerisce di mettere in esso, cioè LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so - questo file non esiste sul mio sistema.

devo /etc/apache2/mods-available/wsgi.load

Drowning in tecnologia ancora una volta, qualcuno mi può una linea di tiro?

risposta

4

Se avessero attivato l'ambiente virtuale Python 3 e la sua directory bin fosse in quel percorso, allora probabilmente potevano semplicemente eseguire "pip" anziché "pip3". Dovresti eseguire "which pip" per verificare se proveniva dall'ambiente virtuale che ti aspetti.

Il pacchetto 'mod_wsgi-httpd' è specifico per l'installazione di un'istanza distinta di Apache stessa per risolvere problemi in cui Apache non è aggiornato o manca i file di intestazione di sviluppo, oppure non può modificare la configurazione di sistema. . In genere è di maggiore rilevanza quando non si dispone dell'accesso root per correggere i problemi relativi al sistema e interessa solo l'esecuzione su una porta non privilegiata e quindi non è necessario l'accesso root. Dovresti anche usare 'mod_wsgi-express' dal pacchetto 'mod_wsgi' che era 'pip' installato dopo che 'mod_wsgi-httpd' era stato installato poiché questo è l'unico modo per usare 'mod_wsgi-httpd' la versione installata di Apache .

Quindi, per "mod_wsgi-httpd" si vorrebbe davvero ignorarlo. Se lo hai già installato, allora 'pip' disinstalla sia esso che 'mod_wsgi'. Quest'ultimo deve essere disinstallato in quanto sarà associato alla versione di Apache di "mod_wsgi-httpd" e il "mod_wsgi.so" non funzionerà con il sistema.

quanto ai passi utenti distinti in collegamento, sembrano corrette, anche se direi che al punto 3, si evidenzia che le LoadModule e WSGIPythonHome linee da aggiungere sono ciò che viene emesso durante l'esecuzione mod_wsgi-express install-module comando. L'output è personalizzato per corrispondere a ciò che dovrebbe essere l'installazione. Quindi non fare i valori, basta usare ciò che l'output del comando.

Se si dispone ancora di un file wsgi.load, eseguire sudo a2dismod wsgi per eliminarlo o in altro modo rimuoverlo manualmente. È un residuo del vecchio sistema mod_wsgi impacchettato.

+0

ho rimosso '' mod_wsgi' e pip mod_wsgi-httpd' utilizzando. Ora sono bloccato. Se eseguo 'pip install mod_wsgi' ottengo lo stesso errore del mio post, dove sto provando' pip3 ... '.l'unica cosa che posso pensare è usare il sistema pip per fare l'installazione, nella speranza che trovi il sistema Apache ...? –

+1

Siamo spiacenti, ho completamente trascurato il problema di apxs. Questo perché non è stato installato il pacchetto "dev" appropriato per Apache dai repository di pacchetti di Ubuntu. Che ciò sia richiesto è menzionato sulla pagina PyPi per mod_wsgi. Senza quel pacchetto mancheranno i file header di Apache e il suo tool di compilazione chiamato 'apxs'. –

+0

Ho trovato la pagina https://pypi.python.org/pypi/mod_wsgi - è frustrante perché dice * "Ad esempio, ..., se stavi usando l'MPM prefork di Apache avresti bisogno ... Se invece tu stavi usando l'MPM dell'operaio di Apache, avresti bisogno ... "* Ma non ho mai sentito parlare di questi termini. Sono questi diversi sapori di Apache? Quindi in qualche modo devo capire che sapore ha il mio Apache e quale sarà il file dev corrispondente ...? –

12

Intendo questa risposta come una "nota per sé che può essere utile agli altri".

apt-get al momento della scrittura installa una versione obsoleta di mod_wsgi.

pip installa una versione aggiornata. Lo fa scaricando il codice sorgente e compilandolo.

Configurare un Python3 virtualenv e attivarlo con source ./venv3/bin/activate, verificare che which pip confermi che ora sta utilizzando questo ambiente. Sembra che pip e pip3 siano intercambiabili.

Nel mio caso il mio ./venv3 si trova nella cartella del flask. E l'unico scopo di mod_wsgi è di avere Apache instradare le richieste http://myfoo.org/flask all'app del pallone. Quindi ha senso installare mod_wsgi in questo venv3.

Tuttavia, per pip per compilarlo correttamente, è necessario prima il sudo apt-get install apache2-dev che fornisce i file di intestazione necessari. Quindi ho richiesto un riavvio. Quindi lo pip install mod_wsgi va a posto.

Poi seguendo le istruzioni del link originale:

(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 

Poi devo creare /etc/apache2/mods-available/wsgi_express.{load,conf} contenente queste 2 righe, rispettivamente.

Infine attivare il modulo e verificare log degli errori di Apache:

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

'sudo apt-get install apache2-dev' quindi' pip install mod_wsgi' era tutto ciò che dovevo fare; nessun riavvio richiesto – Nick

+0

'a2enmod wsgi' non dovrebbe funzionare seguendo le tue istruzioni. 'a2enmod wsgi_express' lo farebbe comunque. –