Jak używać Pythona z Apache2?

13

Próbuję sprawić, aby Python działał z Apache, jednak nie udaje mi się ani CGI, ani mod_python.

Czy ktoś zna dobry tutorial czy coś takiego?

Dzięki.

Galeria
źródło

Odpowiedzi:

17

mod_pythonjest w zasadzie nieobsługiwany - powinieneś zajrzeć mod_wsgi. Zainstaluj pakiet libapache2-mod-wsgi, a następnie wydaj go, sudo a2enmod wsgiaby go włączyć.

Jako szybki przykład uruchomienia, umieść coś takiego w swoim /etc/apache2/sites-enabled/default:

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

I w pliku /path/to/python/file.py:

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

Po ponownym uruchomieniu Apache2 każde żądanie /testzmieni się w wywołanie application()w pliku Pythona.

W celu dalszego czytania zapoznaj się z WSGI (WebServer Gateway Interface), sposobem , w jaki Python integruje się z serwerami WWW.

Bonus / aktualizacja:

Python (co nie dziwi) ma mały serwer WSGI w standardowej bibliotece do testowania. Jeśli dodasz to na dole pliku, możesz uruchomić go jako dowolny stary plik wykonywalny do celów testowych, a następnie pozwolić Apache przejąć produkcję:

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

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

    httpd.serve_forever()
Morten Siebuhr
źródło
Dostałem następujący błąd z dziennika apache. O ile mi wiadomo, wydaje się, że nie otrzymuje łańcucha.
Vallery
[Sob. 05 17:06:14 2011] [błąd] [klient 127.0.0.1] mod_wsgi (pid = 2844): Wystąpił wyjątek podczas przetwarzania skryptu WSGI „/var/www/file.py”. [Sob. Mar 05 17:06:14 2011] [błąd] [klient 127.0.0.1] Traceback (ostatnie połączenie ostatnie): [sob. Mar 05 17:06:14 2011] [błąd] [klient 127.0.0.1] plik „ /var/www/file.py ”, wiersz 2, w aplikacji [sob. mar 05 17:06:14 2011] [błąd] [klient 127.0.0.1] start_response (200, [(„ Content-Type ”,„ text / zwykły ')]) [sob. mar 05 17:06:14 2011] [błąd] [klient 127.0.0.1] TypeError: oczekiwany obiekt ciągu bajtu dla statusu, znaleziono wartość typu int
Vallery
Ach Mój błąd. Jestem przyzwyczajony do frameworków, które robią dla mnie wszystkie trudne rzeczy;). Zaktualizowałem 200do '200 OK'per python.org/dev/peps/pep-0333
Morten Siebuhr
Świetnie, to działa. Ostatnie pytanie: jak ustawić wyświetlanie w HTML? Moja przeglądarka wyświetla zwrot w postaci zwykłego tekstu, ignorując znaczniki.
Vallery
1
Czekaj, rozumiem: zmień tekst / zwykły na tekst / HTML.
Vallery