2008-08-07 24 views

Trả lời

12

Có hai cách chính để chạy Python trên Apache. Cách đơn giản nhất là sử dụng CGI và viết các kịch bản Python bình thường trong khi thứ hai đang sử dụng một khung công tác web như Django hoặc giá treo.

Sử dụng CGI rất đơn giản. Đảm bảo tệp cấu hình Apache của bạn có thiết lập cgi-bin. Nếu không, hãy làm theo tài liệu của họ (http://httpd.apache.org/docs/2.0/howto/cgi.html). Tại thời điểm đó, tất cả những gì bạn cần làm là đặt các kịch bản Python của bạn vào thư mục cgi-bin và đầu ra tiêu chuẩn sẽ trở thành đáp ứng HTTP. Tham khảo tài liệu của Python để biết thêm thông tin (https://docs.python.org/library/cgi.html).

Nếu bạn muốn sử dụng khung web, bạn sẽ cần phải thiết lập mod_python hoặc FastCGI. Các bước này phụ thuộc vào khung bạn muốn sử dụng. Django cung cấp hướng dẫn rõ ràng về cách thiết lập mod_python và Django với Apache (http://www.djangoproject.com/documentation/modpython/)

+2

Thông tin về mod_python đã bị xóa khỏi trang dự án Django, vì bây giờ họ khuyên bạn nên sử dụng mod_wsgi - https://docs.djangoproject.com/en/1.5/howto/deployment/wsgi/modwsgi/ –

8

Có, mod_python khá khó hiểu khi thiết lập. Đây là cách tôi đã làm nó.

Trong httpd.conf:

LoadModule python_module modules/mod_python.so 

<Directory "/serverbase/htdocs/myapp"> 
    AddHandler mod_python .py 
    PythonHandler myapp 
    PythonDebug On 

và trong thư mục ứng dụng của bạn:

$ /serverbase/htdocs/myapp$ ls -l 
total 16 
-r-xr-xr-x 1 root sys  6484 May 21 15:54 myapp.py 

Lặp lại cấu hình cho từng chương trình python bạn muốn có chạy dưới mod_python.

5

Bạn có đang chạy Python trên UNIX hoặc Windows không?

Phương án thay thế cho mod_python và FastCGI là mod_wsgi. Bạn có thể tìm hiểu thêm tại modwsgi

Tôi đã xây dựng và cài đặt ứng dụng này trên Solaris mà không gặp sự cố. Trước đây tôi đã thử mod_python nhưng gặp sự cố với các thư viện được chia sẻ như một phần của bản dựng. Có sẵn good install docs.

0

Vấn đề đối với tôi không nằm trong Apache được thiết lập, nhưng trong việc hiểu cách mod_apache thực sự sử dụng các tệp .py. Các câu lệnh mức mô-đun (bao gồm cả các câu lệnh trong phần if __name__=='__main__') là không thực hiện - Tôi giả định rằng lệnh stdout chạy tập lệnh tại dòng lệnh sẽ là máy chủ sẽ xuất, nhưng đó không phải là cách nó hoạt động.

Thay vào đó, tôi đã viết một hàm cấp mô-đun có tên là index() và đã trả về chuỗi này làm HTML của trang. Nó cũng có thể có chức năng mô-đun cấp khác (ví dụ, otherFunction()) mà có thể được truy cập như phân đoạn hơn nữa trong URI (ví dụ, testScript/otherFunction cho file testScript.py.)

Rõ ràng, điều này có ý nghĩa hơn stdout quan niệm ban đầu của tôi . Khả năng thực sự tốt hơn khi sử dụng Python như một ngôn ngữ kịch bản và không phải là một ngôn ngữ đánh dấu khổng lồ.