2015-05-19 17 views
5

Tôi dường như không còn có thể nâng cấp gói đã được cài đặt trong Ubuntu 15.04. Pip vẫn hoạt động, cài đặt gói vào /usr/local/python2.7/dist-packages, nhưng danh sách đường dẫn /usr/python2.7/dist-packages ở trên cùng, và thậm chí PYTHONPATH không thể có được thứ gì đó phía trên dòng đó. Tôi tin rằng điều này hoạt động trong Ubuntus cũ. Tôi đã cố gắng tìm một cái gì đó trong /usr/python/site.py, nhưng có vẻ như làm điều đúng. Việc thêm -S dường như dừng phiên bản không phải cục bộ ở trên cùng. Tôi đã nhìn thấy điều này trên hai máy tính, tôi tin.Pip không thể nâng cấp gói cài sẵn trong ubuntu 15.04

Một số ví dụ về nhu cầu này: Cập nhật để nhận tính năng/sửa lỗi bắt buộc (đối với PILLOW, trong trường hợp của tôi) mà không cần gỡ cài đặt APT một gói gói liệt kê gói đó theo yêu cầu.

Chỉnh sửa: Để làm rõ, câu hỏi là: Tôi muốn sắp xếp lại thứ tự tìm kiếm thư mục để khôi phục hoạt động của Ubuntu 14.10. Có nhiều cách tốt hơn để làm điều này trên nhiều hệ thống, nhưng tôi muốn sử dụng gói dựng sẵn trong apt, chỉ với một hoặc hai (tiềm năng) các gói mới hơn, như IPython và các loại tương tự, thay vì sử dụng virtual-env và Anacoda (cả hai mà tôi sử dụng trên các hệ thống khác). Dường như hành vi mong muốn của tôi là hành vi Debian được ghi lại, vì vậy tôi không chắc chắn tại sao nó lại sắp xếp lại đường dẫn.

Đây là con đường để chứng minh vấn đề, chú ý đến biến PYTHONPATH là ở giữa, với hai thư mục git:

>>> sys.path 
['', 
'/usr/lib/python2.7/dist-packages', 
'/usr/local/lib/python2.7/dist-packages/requests-2.6.0-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/octave_kernel-0.10.0-py2.7.egg', 
'/home/username/git/maya', 
'/home/username/git/udaq/pyUDAQ', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 
'/usr/lib/python2.7/dist-packages/wx-3.0-gtk2'] 

Để tham khảo, tôi có một hệ thống phù hợp với chạy 14.04, và nó có chính xác dự kiến hành vi. Hai số PYTHONPATH dirs đến trước, sau đó sau đó trên địa chỉ dist-packages nằm phía trên được tích hợp sẵn.

+4

Tôi nghĩ rằng việc cho phép 'pip' và' apt' chống lại các gói là một ý tưởng rất tồi. Một cách sạch sẽ hơn nhiều là chuyển sang 'virtualenvs' thay thế. – cel

+0

Tôi muốn có thể giao máy tính cho một người theo chỉ dẫn nhưng không biết nhiều. Nói với anh ta "máy tính xách tay ipython" dễ hơn là phải nói với anh ta để kích hoạt một env ảo đầu tiên. Tuy nhiên, đó là một ý tưởng hay. –

+0

Trong trường hợp đó: chuyển sang 'anaconda' và cài đặt các gói vào môi trường gốc.Sau đó, 'conda' và' pip' bây giờ là các trình quản lý gói của bạn và 'apt' sẽ không can thiệp. – cel

Trả lời

2

Có một -t switch trong pip. Nó cho phép bạn cấu hình một thư mục nơi pip cài đặt các gói.

Bạn có thể thiết lập các thư mục trong một config file và quên đi xác định nó mỗi khi bạn cài đặt hoặc nâng cấp các gói

Nhưng nói chung nó là một ý tưởng tồi để nâng cấp gói cài đặt bởi apt

+0

Tôi không muốn đè bẹp các gói trong '/ usr/python', tôi chỉ muốn tìm kiếm'/usr/local/python' trước tiên. Cảm ơn mặc dù! –

+1

@HenrySchreiner Ok, nhưng sau đó tôi ngạc nhiên, bởi vì đường dẫn từ 'PYTHONPATH' sẽ được thêm vào' sys.path' trước đường dẫn thông dịch chuẩn. Bạn có thể cập nhật bài đăng của mình với nhiều thông tin hơn không? Làm thế nào để bạn sửa đổi 'PYTHONPATH' và đầu ra' in sys.path' là gì? – Alik

+0

@HenrySchreiner [liên kết tài liệu liên quan] (https://docs.python.org/2/tutorial/modules.html#the-module-search-path) – Alik

2

Sử dụng virtualenv:

cài đặt virtualenv

$ sudo apt-get install python-virtualenv 

tạo môi trường trong thư mục MYENV

$ virtualenv MYENV 

môi trường kích hoạt trong vỏ hiện (ứng dụng của bạn sẽ cần điều này cũng vào đó là kịch bản khởi động)

$ . MYENV/bin/activate 

sử dụng pip/python từ venv của bạn nằm trong thư mục MYENV (bạn sở hữu)

(MYENV)$ pip ... 
+0

Nếu bạn đang sử dụng ubuntu và 16.04 hoặc mới hơn, có thể bạn sẽ muốn 'sudo apt-get install virtualenv' thay vì' python-virtualenv' –

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