Bagaimana cara menggunakan Python dengan apache2?

13

Saya mencoba membuat Python bekerja dengan Apache, namun saya gagal untuk sukses dengan CGI atau mod_python.

Adakah yang tahu tutorial yang bagus atau apa?

Terima kasih.

Vallery
sumber

Jawaban:

17

mod_pythonpada dasarnya tidak terawat - Anda harus melihat mod_wsgi. Instal paket libapache2-mod-wsgi, lalu terbitkan sudo a2enmod wsgiuntuk mengaktifkannya.

Sama seperti contoh cepat untuk menjalankannya, masukkan sesuatu seperti ini di /etc/apache2/sites-enabled/default:

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

Dan di dalam file /path/to/python/file.py:

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

Setelah memulai kembali Apache2, setiap permintaan untuk /testakan berubah menjadi panggilan application()dalam file python Anda.

Untuk bacaan lebih lanjut, lihat ke WSGI (WebServer Gateway Interface), yang cara Python terintegrasi dengan web-server.

Bonus / Pembaruan:

Python (tidak mengejutkan) memiliki server WSGI kecil di perpustakaan standar untuk pengujian. Jika Anda menambahkan ini di bagian bawah file Anda, Anda dapat menjalankannya sebagai semua executable lama untuk tujuan pengujian, dan kemudian biarkan Apache mengambil alih untuk produksi:

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
sumber
Saya mendapat yang berikut sebagai kesalahan, dari log apache. Sejauh yang saya tahu, itu berpikir itu tidak mendapatkan string.
Vallery
[Sabtu 05 Mar 17:06:14 2011] [kesalahan] [klien 127.0.0.1] mod_wsgi (pid = 2844): Pengecualian terjadi saat memproses skrip WSGI '/var/www/file.py'. [Sabtu 05 Mar 17:06:14 2011] [kesalahan] [klien 127.0.0.1] Traceback (panggilan terakhir terakhir): [Sabtu 05 Mar 17:06:14 2011] [kesalahan] [klien 127.0.0.1] File " /var/www/file.py ", baris 2, dalam aplikasi [Sabtu 05 17:06:14 2011] [kesalahan] [klien 127.0.0.1] start_response (200, [('Tipe-Konten', 'teks / plain ')]) [Sabtu 5 Maret 17:06:14 2011] [kesalahan] [klien 127.0.0.1] TypeError: objek byte string yang diharapkan untuk status, nilai dari tipe int ditemukan
Vallery
Ah. Salahku. Saya terbiasa dengan kerangka kerja melakukan semua hal yang rumit untuk saya;). Saya telah memperbarui 200ke '200 OK'per python.org/dev/peps/pep-0333
Morten Siebuhr
Bagus, itu berhasil. Pertanyaan terakhir: bagaimana cara membuatnya ditampilkan dalam html? Browser saya menunjukkan pengembalian dalam plaintext, mengabaikan markup.
Vallery
1
Tunggu, mengerti: ubah teks / polos menjadi teks / html.
Vallery