2011-01-06 59 views
12

Tôi đang cố gắng thiết lập máy chủ WAMP. Tôi đã có Apache làm việc một cách chính xác, và tôi đã cài đặt mod_wsgi mà không có một hitch.Chạy Python từ virtualenv với Apache/mod_wsgi, trên Windows

Vấn đề là tôi đang sử dụng môi trường ảo (sử dụng virtualenv) cho dự án của mình. Vì vậy, rõ ràng, mod_wsgi là có vấn đề xác định vị trí của tôi cài đặt Django.

Tôi đang cố gắng hiểu cách tôi có thể nhận mod_wsgi để hoạt động tốt với virtualenv. Tài liệu dường như nghĩ rằng điều này là không thể:

Lưu ý rằng chỉ thị WSGIPythonHome chỉ có thể được sử dụng trên hệ thống UNIX và không có sẵn trên hệ thống Windows. Điều này là do trên các hệ thống Windows, vị trí của DLL Python dường như là những gì quy định nơi Python sẽ tìm kiếm các tệp thư viện Python. Người ta không biết tại thời điểm này làm thế nào người ta có thể tạo ra một môi trường cơ bản riêng biệt độc lập với cài đặt Python chính trên Windows.

Từ đây: mod_wsgi + virtualenv docs.

Có ai có ý tưởng nào về cách thực hiện tác phẩm này không?

+2

Nhận xét đó về WSGIPythonHome trên Windows thực sự là sai. Các hạn chế đã được dỡ bỏ, có thể trong mod_wsgi 3.X (không chắc chắn). Nhận xét đã bị xóa. –

Trả lời

12

Bạn có thể kích hoạt môi trường theo lập trình từ Python thêm tệp này vào tệp .wsgi của bạn trước khi nhập bất kỳ thứ gì khác.

Từ virtualenv's docs:

Đôi khi bạn không thể hoặc không muốn sử dụng trình thông dịch Python tạo ra bởi các virtualenv. Ví dụ: trong một môi trường mod_python hoặc mod_wsgi, chỉ có một thông dịch viên.

May mắn thay, thật dễ dàng. Bạn phải sử dụng thông dịch viên tùy chỉnh Python để cài đặt các thư viện . Nhưng để sử dụng thư viện, bạn chỉ cần đảm bảo đường dẫn là chính xác. Tập lệnh có sẵn để sửa đường dẫn. Bạn có thể cài đặt môi trường như:

activate_this = '/path/to/env/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 

này sẽ thay đổi sys.path và thậm chí thay đổi sys.prefix, mà còn cho phép bạn sử dụng một thông dịch viên hiện có. Các mục trong môi trường của bạn sẽ hiển thị đầu tiên trên sys.path, trước các mục chung. Tuy nhiên, điều này không thể hoàn tác việc kích hoạt các môi trường khác hoặc mô-đun đã được nhập. Ví dụ: bạn không nên cố gắng, kích hoạt môi trường trước khi yêu cầu web; bạn nên kích hoạt một môi trường càng sớm càng tốt và không làm lại trong quá trình đó.

+0

Điều này có vẻ tốt, tôi sẽ dùng thử. Nhưng có vẻ như điều đó sẽ sử dụng "interepereter" chính của Python trên hệ thống của tôi, chứ không sử dụng bộ tạo ảo bằng virtualenv, đúng không? Điều này có nghĩa là tôi chỉ có thể sử dụng một phiên bản Python trên hệ thống của mình? (Đây sẽ chỉ là một vấn đề nhỏ). –

+0

Nó sẽ sử dụng thông dịch viên mod_wsgi nhúng vào apache nhưng sẽ đảm bảo sys.đường dẫn được phổ biến đúng cách với các thư viện được cài đặt trong virtualenv – albertov

+2

Searchers - bạn có thể thấy điều này được thực hiện tại đây: http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/ phía dưới nó cho bạn thấy cách để kích hoạt và thiết lập các biến đường dẫn trong wsgi.py – Mendhak

Các vấn đề liên quan