2015-06-05 28 views
7

Có ai cho tôi một bộ hướng dẫn rõ ràng để cài đặt mod_wsgi trên Ubuntu cho Python 3 không?Cài đặt mod_wsgi cho Python3 trên Ubuntu

Tôi đã nhận được Flask & mod_wsgi thành công bằng cách sử dụng Python3 và trong một thời gian ngắn cảm thấy vui.

... cho đến khi tôi nhìn vào log của Apache và nhận ra rằng tôi đã chạy vào vấn đề này: https://askubuntu.com/questions/569550/assertionerror-using-apache2-and-libapache2-mod-wsgi-py3-on-ubuntu-14-04-python

apt-get được cài đặt một phiên bản ra khỏi ngày libapache2-mod-wsgi-py3 và điều này đang gây ra những sai sót trong log của Apache. (Tôi có nên báo cáo điều này và nếu có ở đâu?)

Trong liên kết, kỹ sư đang sử dụng pip để cài đặt phiên bản cập nhật mới hơn.

Điều thú vị là, anh dường như đang cài đặt nó vào môi trường Python3 ảo. (Điều này có thể là bất kỳ khác biệt so với sử dụng hệ thống pip3?)

Ngoài ra ông sử dụng pip3 install mod_wsgi, nhưng pip3 search mod_wsgi lợi nhuận:

(EDIT: không có ông không, ông sử dụng pip không PIP3 đó có thể đúng. "Anh ta có dây của anh ấy không? Không phải pip sẽ bỏ qua sự thật rằng anh ta đang ở trong py3venv của anh ấy và đơn giản là sử dụng cài đặt py2 của hệ thống? Nhưng vẫn không giải quyết được sự nhầm lẫn ...)

mod_wsgi-metrics   - Metrics package for Apache/mod_wsgi. 
cykooz.recipe.pastewsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi 
mod_wsgi-httpd   - Installer for Apache httpd web server. 
apachemiddleware   - Useful Python middleware for use with mod_wsgi deployments 
tranchitella.recipe.wsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi 
mod_wsgi     - Installer for Apache/mod_wsgi. 

Vì vậy, mod_wsgi-httpd là gì? Và có chắc chắn đây không phải là thứ tôi muốn không?

Cuối cùng, có ai có thể cung cấp liên kết để cài đặt mod_wsgi từ nguồn không?

EDIT: Tôi không hiểu tại sao kỹ sư lại sử dụng pip install mod_wsgi thay vì pip3 .... Chắc chắn điều đó không thể đúng? Nhưng nếu tôi sử dụng PIP3, tôi nhận được:

[email protected]:~$ cd web/piFlask 

[email protected]:~/web/piFlask$ source ./venv3/bin/activate 
(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi 
Downloading/unpacking mod-wsgi 
    Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) egg_info for package mod-wsgi 
    Traceback (most recent call last): 
     File "<string>", line 17, in <module> 
     File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 
     'missing Apache httpd server packages.' % APXS) 
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 

    File "<string>", line 17, in <module> 

    File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 

    'missing Apache httpd server packages.' % APXS) 

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 

---------------------------------------- 
Cleaning up... 
Command python setup.py egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi 
Storing debug log for failure in /home/pi/.pip/pip.log 

Và bây giờ tôi cố gắng pip3 install mod_wsgi-httpd, nó mất khoảng năm phút để biên dịch:

(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi-httpd 
Downloading/unpacking mod-wsgi-httpd 
    Downloading mod_wsgi-httpd-2.4.12.5.tar.gz 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) egg_info for package mod-wsgi-httpd 
    apr-1.5.2/ 
    apr-1.5.2/config.layout 
    apr-1.5.2/build.conf 
    apr-1.5.2/emacs-mode 
    : 

Vì vậy, bây giờ tôi lo lắng tôi đã có một giây Apache ngồi trong ảo hóa Py3 của tôi.

Tuy nhiên, điều đó sẽ loại bỏ được lỗi; pip3 install mod_wsgi hiện đã hoàn tất thành công. EDIT: nhưng bây giờ tôi đã hoàn toàn unstuck cố gắng làm theo hướng dẫn của mình: Tôi không có một /etc/apache2/mods-available/wsgi_express.load, và nếu anh ta đề xuất làm cho nó, sau đó cho một bắt đầu này có vẻ tùy ý, và thứ hai văn bản ông đề nghị đưa trong đó, tức là LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so - tệp này không tồn tại trên hệ thống của tôi.

Tôi có /etc/apache2/mods-available/wsgi.load

Đuối nước trong công nghệ một lần nữa, ai đó có thể ném cho tôi một dòng?

Trả lời

4

Nếu chúng đã kích hoạt môi trường ảo Python 3 và thư mục bin của nó nằm trong đường dẫn đó, thì có khả năng chúng có thể chạy 'pip' thay vì 'pip3'. Bạn nên chạy 'pip nào' để xác minh xem nó có đến từ môi trường ảo mà bạn mong đợi hay không.

Gói 'mod_wsgi-httpd' dành riêng cho việc cài đặt một bản sao Apache riêng biệt để giải quyết các vấn đề mà Apache toàn hệ thống bị lỗi thời hoặc thiếu tệp tiêu đề phát triển hoặc không thể sửa đổi cấu hình hệ thống . Nói chung, nó phù hợp hơn khi bạn không có quyền truy cập root để khắc phục các sự cố hệ thống và chỉ quan tâm đến việc chạy trên một cổng không có đặc quyền và do đó không cần quyền truy cập root. Bạn cũng sẽ phải sử dụng 'mod_wsgi-express' từ gói 'mod_wsgi' được cài đặt 'pip' sau khi 'mod_wsgi-httpd' được cài đặt vì đó là cách duy nhất để sử dụng phiên bản Apache 'mod_wsgi-httpd' đã cài đặt .

Vì vậy, đối với 'mod_wsgi-httpd', bạn thực sự muốn bỏ qua nó. Nếu bạn đã cài đặt nó, sau đó 'pip' gỡ bỏ cài đặt cả nó và 'mod_wsgi'. Sau này cần phải được gỡ cài đặt vì nó sẽ bị ràng buộc với phiên bản Apache 'mod_wsgi-httpd' và 'mod_wsgi.so' sẽ không hoạt động với toàn bộ hệ thống.

Để tách riêng các bước của người dùng trong liên kết, chúng trông chính xác, mặc dù tôi sẽ nói ở bước 3, cần đánh dấu rằng các dòng LoadModuleWSGIPythonHome sẽ được thêm vào là đầu ra khi chạy lệnh mod_wsgi-express install-module. Đầu ra là gì tùy chỉnh để phù hợp với những gì cài đặt của bạn nên được. Vì vậy, không tạo nên giá trị, chỉ cần sử dụng những gì mà đầu ra lệnh.

Nếu bạn có tệp wsgi.load vẫn còn ở xung quanh, hãy chạy sudo a2dismod wsgi để loại bỏ hoặc xóa bằng tay thủ công. Nó là một trái từ hệ thống cũ mod_wsgi đóng gói.

+0

Tôi đã gỡ bỏ 'mod_wsgi' và' pip mod_wsgi-httpd' sử dụng. Bây giờ tôi đang bị mắc kẹt. Nếu tôi 'pip install mod_wsgi' tôi nhận được lỗi tương tự như trong bài viết của tôi, nơi tôi đang cố gắng' pip3 ... '.điều duy nhất tôi có thể nghĩ đến là sử dụng pip hệ thống để thực hiện cài đặt, với hy vọng rằng tôi tìm thấy hệ thống Apache ...? –

+1

Xin lỗi, hoàn toàn bị bỏ qua vấn đề apxs. Đó là vì bạn chưa cài đặt gói 'dev' thích hợp cho Apache từ kho gói của Ubuntu. Điều này được yêu cầu được đề cập trên trang PyPi cho mod_wsgi. Nếu không có gói đó, bạn sẽ thiếu các tệp tiêu đề Apache và công cụ xây dựng của nó được gọi là 'apxs'. –

+0

Tôi tìm thấy trang https://pypi.python.org/pypi/mod_wsgi - nó bực bội vì nó nói * "Ví dụ, ..., nếu bạn đang sử dụng Apache prefork MPM, bạn sẽ cần ... Nếu thay vào đó bạn đang sử dụng MPM của công nhân Apache, bạn sẽ cần ... "* Nhưng tôi chưa bao giờ nghe nói đến những điều khoản này. Có phải những hương vị khác nhau của Apache không? Vì vậy, bằng cách nào đó tôi phải tìm ra hương vị của Apache của tôi là gì và tập tin dev tương ứng sẽ là gì ...? –

12

Tôi dự định câu trả lời này là "ghi chú cho bản thân có thể được sử dụng cho người khác".

apt-get tại thời điểm viết lượt cài đặt phiên bản lỗi thời mod_wsgi.

pip cài đặt phiên bản cập nhật. Nó thực hiện điều này bằng cách tải xuống mã nguồn và biên dịch nó.

Thiết lập virtualenv Python3 và kích hoạt nó bằng source ./venv3/bin/activate, xác minh rằng which pip xác nhận rằng hiện đang sử dụng môi trường này. Có vẻ như pip và pip3 có thể hoán đổi cho nhau.

Trong trường hợp của tôi, ./venv3 nằm trong thư mục bình của tôi. Và mục đích duy nhất của mod_wsgi là phải có đường dẫn Apache http://myfoo.org/flask yêu cầu đến ứng dụng bình của tôi. Vì vậy, bạn nên cài đặt mod_wsgi vào số venv3 này.

Tuy nhiên, đối với pip để biên dịch thành công, trước tiên tôi cần sudo apt-get install apache2-dev cung cấp các tệp tiêu đề cần thiết. Sau đó, tôi yêu cầu khởi động lại. Sau đó, pip install mod_wsgi hoàn tất.

Sau đó theo các hướng dẫn từ các liên kết ban đầu:

(venv3) 
$ sudo venv3/bin/mod_wsgi-express install-module 
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so 
WSGIPythonHome /home/pi/web/piFlask/venv3 

Sau đó, tôi phải tạo /etc/apache2/mods-available/wsgi_express.{load,conf} chứa những 2 dòng tương ứng.

Cuối cùng cho phép các module và kiểm tra log lỗi của Apache:

a2enmod wsgi 
sudo service apache2 restart 
cat /var/log/apache2/error.log 
+2

'sudo apt-get cài đặt apache2-dev' sau đó' pip install mod_wsgi' là tất cả những gì tôi cần làm; không cần khởi động lại – Nick

+0

'a2enmod wsgi' sẽ không hoạt động theo hướng dẫn của bạn. 'a2enmod wsgi_express' sẽ mặc dù. –