2015-06-01 20 views
10

Bài đăng đầu tiên của tôi và tôi mới sử dụng cả Python lẫn Apache, vì vậy hãy dễ dàng thực hiện với tôi. Tôi có một ứng dụng web Python trong một môi trường conda phục vụ nội dung tốt bằng cách sử dụng Flask. Bây giờ tôi cần phải phục vụ mọi thứ với Apache thay vì Flask. Tôi có thể chạy Apache để chạy Python với mod_wsgi, nhưng chỉ với virtualenv. Tôi đã thử cài đặt virtualenv với Anaconda, nhưng tôi đã nhận được cảnh báo rằng thiết lập như vậy không được hỗ trợ và không được khuyến nghị. Vì vậy, câu hỏi của tôi là:Làm cách nào để sử dụng môi trường conda với mod_wsgi?

Làm cách nào để thiết lập Apache để chạy ứng dụng của tôi trong môi trường conda?

Here, có một phần làm việc với môi trường ảo và nói rằng tôi cần nhập một dòng vào tệp wsgi của tôi hiển thị vị trí cần tìm activate_this.py. Môi trường ảo virtualenv có activation_this.py, nhưng môi trường conda thì không. Có vẻ như không có hướng dẫn đúng để kích hoạt môi trường ảo, tôi chỉ gặp lỗi 500 trong trình duyệt của mình và "Lỗi nhập: không có mô-đun có tên là bình" trong error_log httpd của tôi.

Đây là trong file httpd.conf của tôi:

<VirtualHost *:80> 
    DocumentRoot /var/www 
    WSGIScriptAlias/var/www/tsm.wsgi 
    <Directory /var/www/tsm> 
    Order allow,deny 
    Allow from all 
    </Directory> 
</VirtualHost> 

Và đây là tsm.wsgi:

import sys 
import site 
site.addsitedir('~/.conda/envs/tsm/lib/python2.7/site-packages') 
sys.path.insert(0, '/var/www/tsm/server/time_series_machine') 
sys.stdout = sys.stderr 
from app import app as application 

Bất kỳ ý tưởng? Cảm ơn vì bất kì sự giúp đỡ nào của bạn.

Trả lời

1

Mod_wsgi của bạn sẽ cần phải được biên dịch với Anaconda Python để bắt đầu và không phải Python hệ thống của bạn. Nói cách khác, bạn không thể sử dụng các gói mod_wsgi được cung cấp bởi hệ thống nhưng sẽ cần tự biên dịch nó. Sau đó làm theo những gì nó nói trong:

Đó là, sử dụng chế độ daemon và sử dụng tùy chọn python-home-WSGIDaemonProcess.

Lưu ý rằng đã có báo cáo cho thấy rằng Anaconda Python bị hỏng theo một cách nào đó và sẽ không hoạt động với các hệ thống muốn nhúng Python. Vì vậy, có thể không làm việc anyway.

BTW, bạn không thể sử dụng '~' trong đường dẫn trong tệp kịch bản WSGI của mình theo cách bạn đang thực hiện. Nó sẽ không được mở rộng để trở thành thư mục chính. Nhưng sau đó, làm theo bài đó và bạn sẽ không cần điều đó.

+1

Cảm ơn! Tôi nghĩ rằng ... Tôi nghĩ rằng nó cố định. Tôi đang chạy vào các lỗi khác bây giờ, nhưng tôi nghĩ rằng tôi có một máy chủ Apache bằng cách sử dụng mod_wsgi trong một môi trường conda. Tôi đã xóa mod_wsgi, tải xuống mã nguồn, nguồn kích hoạt môi trường conda của tôi, được biên dịch và cài đặt với "python setup.py install" và sau đó tôi khởi động máy chủ với mod_wsgi-express start-server trên 0.0.0.0:8080. Tôi có thể thấy trang ở đó ... một con rắn trong chai? Nhưng bây giờ khi tôi thử tải một tập tin .py cụ thể tôi nhận được lỗi này: – Nathaniel

+1

Xin lỗi, nhấn enter thay vì shift-enter, sau đó mất quá nhiều thời gian để sửa câu trả lời của tôi. Dù sao, tôi nghĩ nó hoạt động; Tôi vừa mới gặp lỗi khác khi cố gắng chạy helloWorld.py đơn giản và tôi sẽ làm việc đó ngay bây giờ, gửi một câu hỏi khác sau nếu tôi không thể tìm ra. Cảm ơn một lần nữa. – Nathaniel

7

Tôi đã trễ bữa tiệc nhưng tôi cũng gặp vấn đề tương tự. Đối với những gì giá trị của nó, tôi không cần phải biên dịch lại bất cứ điều gì và đã có thể có được điều này để làm việc bằng cách đưa vào một cái gì đó như thế này trong cấu hình VirtualHost của tôi bằng cách sử dụng mod_wsgi hệ thống cài đặt:

WSGIDaemonProcess mysite python-path=/path/to/anaconda2/lib/python2.7/site-packages 

Lưu ý rằng điểm này đến site-packages thư mục.

2

Để thêm vào câu trả lời @ khủng long, bạn cũng có thể cài đặt mod_wsgi vào gốc môi trường conda của bạn:

# Instal `mod_wsgi` 
$ pip install mod_wsgi 

# Find the full path to installed `mod_wsgi` 
$ which mod_wsgi-express 

# Install and register the `mod_wsgi` module with Apache 
$ sudo /full/path/to/installed/mod_wsgi-express install-module 

Sau đó bạn có thể tạo ra môi trường conda cho nhiều trang web:

# Create 3 conda environments 
conda create -n mysite1 python django 
conda create -n mysite2 python django 
conda create -n mysite3 python django 

Và thiết WSGIDaemonProcess trong tệp cấu hình trang web Apache để sử dụng môi trường thích hợp cho mỗi trang web:

# /etc/apache2/sites-enabled/mysite1.conf 
WSGIDaemonProcess mysite1 python-path=/path/to/anaconda3/envs/mysite1/lib/python3.5/site-packages 

# /etc/apache2/sites-enabled/mysite2.conf 
WSGIDaemonProcess mysite2 python-path=/path/to/anaconda3/envs/mysite2/lib/python3.5/site-packages 

# /etc/apache2/sites-enabled/mysite3.conf 
WSGIDaemonProcess mysite3 python-path=/path/to/anaconda3/envs/mysite3/lib/python3.5/site-packages 
+0

@ graham-dumpleton Bạn có thể cung cấp giải thích cho bản chỉnh sửa không? Tôi đã thử nó trên một máy địa phương và tôi nhận được lỗi trong tập tin đăng nhập apache của tôi nói 'ImportError: Không có mô-đun tên 'django''. – ostrokach

+0

Sử dụng '' python-path'' để tham chiếu đến '' site-packages'' không phải là phương pháp hay nhất. Bạn nên sử dụng tùy chọn '' python-home'' để tham khảo phần trên cùng của môi trường ảo Python. Tham chiếu đến '' site-packages'' có thể ẩn các vấn đề khác nhau như mod_wsgi của bạn thực sự được biên dịch cho một phiên bản hoặc cài đặt Python khác. http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html –

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