2014-07-18 33 views
9

Ảnh lớn là tôi muốn máy chủ Ubuntu có nginx, uWGI và Python 3 (virtualenv) để bắt đầu một số dự án.Không thể cài đặt uWSGI trên Ubuntu 14.04 với Python 3.4 (đường dẫn?)

Tôi đã làm theo đề xuất có thể được tìm thấy ở những nơi khác nhau. Khi cố gắng để cài đặt uWSGI sử dụng sudo pip install uwsgi, tôi quan sát được lỗi sau:

plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory 

tôi đã tìm ra [bình luận JFSebastian của] [1] từ tháng 9 năm 2012 về Sự cần thiết để $ sudo apt-get install python2.7-dev - đó là vì Python 2.7 . Vì vậy, tôi đã làm tương tự cho Python 3.4 (có vẻ thành công). Tuy nhiên, tôi vẫn quan sát lỗi.

Khi cố gắng để tìm kiếm các Python.h, tôi có thể tìm thấy:

$ locate Python.h 
/usr/include/python3.4m/Python.h 

gì khác tôi cần thiết lập để làm cho uWSGI cài đặt không? (Tôi khá mới mẻ để Ubuntu Linux, mặc dù tôi đã làm việc với Unix xa trong độ tuổi trung niên;)

Cập nhật:

Tiếp theo lời khuyên của jwalker từ những nhận xét dưới đây, tôi đã làm pip install uwsgi từ bên trong kích hoạt virtualenv và không có sudo. Nhưng sau đó trình cài đặt không thể tạo thư mục con (như build) trong thư mục venv. Tôi đã cố gắng để chmod go+w cho venv, nhưng nó đã không giúp đỡ. Tôi thừa nhận tôi không biết gì về virtualenv và pip, và kiến ​​thức Unix của tôi hơi bị gỉ:

... 
    File "/var/www/hec_project/hec_venv/lib/python3.4/site-packages/pip/req.py", line 218, in build_location 
    _make_build_dir(build_dir) 
    File "/var/www/hec_project/hec_venv/lib/python3.4/site-packages/pip/req.py", line 1527, in _make_build_dir 
    os.makedirs(build_dir) 
    File "/var/www/hec_project/hec_venv/lib/python3.4/os.py", line 237, in makedirs 
    mkdir(name, mode) 
PermissionError: [Errno 13] Permission denied: '/var/www/hec_project/hec_venv/build' 

Storing debug log for failure in /home/hecadmin/.pip/pip.log 
+0

Bạn có chạy lệnh pip đó bằng Python mặc định (2.7) không? – jwalker

+0

@jwalker: Tôi không chắc bạn có ý nghĩa gì về tình huống này. Tôi đã cài đặt 'virtualenv' và Python 3.4 bên trong.Sau đó, tôi đã làm '$ sudo apt-get install python3.4-dev'. Tôi nghi ngờ rằng 'sudo pip install uwsgi' nên được gọi với một số đối số, nhưng tôi đã sử dụng chỉ lệnh đó có thể sử dụng mặc định Python 2 bằng cách nào đó. Tôi không giỏi về 'pip' và nó chính xác là gì, và cách các gói đã cài đặt có thể được cấu hình - cụ thể là uwsgi gọi' gcc'. Tôi biết làm thế nào để chương trình trong C + +, nó là rõ ràng với tôi rằng tôi nên thiết lập các thư mục bao gồm chính xác, nhưng tôi không biết làm thế nào trong trường hợp này. – pepr

+2

Trước hết, nếu bạn đang cài đặt uWSGI vào virtualenv, đừng 'sudo', kích hoạt venv và sau đó chỉ là' pip'. Bây giờ tôi không chắc chắn những gì đã đi sai cho bạn, nhưng điều này làm việc cho tôi trên Ubuntu 12.04: 'sudo apt-get cài đặt python3',' sudo apt-get cài đặt python3-dev', 'virtualenv -p python3 venv',' source venv/bin/activate', 'pip install uwsgi'. – jwalker

Trả lời

20

Cài đặt Python 3:

sudo apt-get install python3 

Cài đặt các tiêu đề Python 3 để xây dựng uWSGI từ nguồn:

sudo apt-get install python3-dev 

Tạo một virtualenv Python 3 trong một subdir venv của thư mục hiện hành (hãy thêm lệnh với sudo nếu dir hiện nay là ưu tiên):

virtualenv -p python3 venv 

Kích hoạt venv là mục tiêu cho pip (. là một phím tắt cho source):

. venv/bin/activate 

Cuối cùng, cài đặt uWSGI (một lần nữa, sudo i f trong một thư mục đặc quyền):

pip install uwsgi 
+0

Tôi đang tìm cách để làm tương tự, nhưng làm thế nào để bạn sau đó thiết lập cho nhiều ứng dụng mỗi trong venv riêng của họ và cài đặt uwsgi cá nhân (trong venv)? Những thứ này có thể được tích hợp với upstart không? Các cá thể uwsgi được quản lý như thế nào trong trường hợp này? – monkut

+1

@monkut Mỗi venv sẽ có một tệp thực thi uwsgi độc lập. Họ có thể trực tiếp đi lên hoặc tốt hơn, đến [giám sát viên] (http://supervisord.org/). – jwalker

5

Bạn đã cài đặt đúng plugin python cho uwsgi chưa?

http://packages.ubuntu.com/precise/uwsgi-plugin-python3

Sau đó, trong cấu hình (file .ini của bạn) đưa python3 như là plugin thay vì python như thế này:

[uwsgi] 
plugins   = python3 

# Rest of your configuration... 
+0

Liên kết được cung cấp cho gói đã hết. Bạn có thể xin cập nhật – mrtipale

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