Come uso Python con apache2?


13

Sto cercando di far funzionare Python con Apache, ma non riesco ad avere successo con CGI o mod_python.

Qualcuno conosce un buon tutorial o qualcosa del genere?

Grazie.

Risposte:


17

mod_pythonè sostanzialmente non gestito - dovresti esaminare mod_wsgi. Installa il pacchetto libapache2-mod-wsgi, quindi rilascialo sudo a2enmod wsgiper abilitarlo.

Proprio come un rapido esempio per farlo funzionare, aggiungi qualcosa di simile nel tuo /etc/apache2/sites-enabled/default :

WSGIScriptAlias /test /path/to/python/file.py

E nel file /path/to/python/file.py:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return "Hello World"

Dopo aver riavviato Apache2, qualsiasi richiesta a /test verrà trasformata in una chiamata application()nel tuo file python.

Per ulteriori informazioni, consultare WSGI (WebServer Gateway Interface), il modo in cui Python si integra con i web server.

Bonus / Aggiornamento:

Python (non sorprende) ha un piccolo server WSGI nella libreria standard per il test. Se lo aggiungi nella parte inferiore del file, puoi eseguirlo come qualsiasi vecchio eseguibile a scopo di test e quindi lasciare che Apache subentri alla produzione:

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('', 8080, application)
    print "Serving on http://localhost:8080"

    httpd.serve_forever()

Ho ricevuto quanto segue come errore, fuori dal registro di Apache. Per quanto ne so, pensa che non stia ottenendo una stringa.
Vallery,

[Sab 05 17:06:14 2011] [errore] [client 127.0.0.1] mod_wsgi (pid = 2844): si è verificata un'eccezione durante l'elaborazione dello script WSGI '/var/www/file.py'. [Sab 05 17:06:14 2011] [errore] [client 127.0.0.1] Traceback (ultima chiamata più recente): [Sab 05 Mar 17:06:14 2011] [errore] [client 127.0.0.1] File " /var/www/file.py ", riga 2, nell'applicazione [Sab 05 mar 17:06:14 2011] [errore] [client 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sab 05 mar 17:06:14 2011] [errore] [client 127.0.0.1] TypeError: oggetto stringa byte atteso per stato, valore del tipo int trovato
Vallery

Ah. Colpa mia. Sono abituato ai framework che fanno tutte le cose difficili per me;). Ho aggiornato il 200to '200 OK'per python.org/dev/peps/pep-0333
Morten Siebuhr

Fantastico, funziona. Ultima domanda: come posso visualizzarlo in HTML? Il mio browser mostra il ritorno in chiaro, ignorando il markup.
Vallery

1
Aspetta, capito: cambia text / plain in text / html.
Vallery
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.