2014-10-15 16 views
11

Vấn đề của tôi là pip sẽ không cập nhật các gói Python của tôi, mặc dù không có lỗi.Tại sao không phải là pip cập nhật numpy và scipy của tôi?

Nó tương tự như this one, nhưng bây giờ tôi vẫn chắc chắn phải làm gì. Về cơ bản, TẤT CẢ các gói của tôi cho python xuất hiện để được ridiculously lỗi thời, ngay cả sau khi cập nhật tất cả mọi thứ thông qua pip. Dưới đây là các chi tiết:

  • Tôi đang sử dụng pip, phiên bản 1.5.6.
  • Tôi đang sử dụng Python, phiên bản 2.7.5
  • Tôi đang sử dụng Mac OSX, verion 10.9.5.

dùng đó, tôi có:

  • phiên bản numpy tôi là 1.6.2.
  • Phiên bản scipy của tôi là 0.11.0.
  • Phiên bản matplotlib của tôi là 1.1.1.

Ngay cả sau khi tôi thử:

sudo pip uninstall numpy 

Tiếp nối bởi:

sudo pip install numpy 

Cả hai đều hoàn toàn thành công, nhưng khi tôi đi vào python và kiểm tra phiên bản numpy, nó vẫn là người già. (Như tất cả các gói khác).

Bạn không chắc chắn những gì đang xảy ra ở đây? ... Làm thế nào điều này có thể được cố định? P.S. Tôi mới đến điều này, vì vậy tôi có thể cần hướng dẫn rõ ràng. Cảm ơn. Ngoài ra, nếu bất cứ ai muốn, tôi có thể cung cấp một ảnh chụp màn hình của pip vì nó đang cài đặt numpy.

EDIT:

Commands Tôi chạy theo những ý kiến:

$which -a pip 
/usr/local/bin/pip 
$ head -1 $(which pip) 
#!/usr/bin/python 
$ which -a python 
/usr/bin/python 
+1

Bạn có nhiều cài đặt 'python' và' pip' của bạn bị ràng buộc với một giá trị khác. –

+1

Nếu bạn không chắc chắn liệu bạn đã cài đặt thêm một Python cùng với Apple hay chưa, hãy chạy tất cả các lệnh sau đây và cho chúng ta thấy kết quả: 'which -a pip',' head -1 $ (pip) ',' which -a python'. – abarnert

+0

Ngoài ra, bạn có Homebrew, MacPorts, Fink hoặc trình quản lý gói khác không? Làm thế nào bạn cài đặt tất cả các prereqs cho 'matplotlib' và bạn bè? – abarnert

Trả lời

14

Trong OS X 10.9, Apple Python đi kèm với một loạt các gói tin mở rộng được cài đặt sẵn, trong một thư mục có tên /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python . Bao gồm numpy.

Và cách họ đang cài đặt (như thể bằng cách sử dụng easy_install với một phiên bản cổ trước 0.7 của setuptools, nhưng không phải vào một trong các easy_install khu bình thường), pip không biết gì về họ.

Vì vậy, những gì xảy ra là sudo pip install numpy cài đặt một bản sao riêng của numpy vào '/Library/Python/2.7/site-packages' -Nhưng trong sys.path của bạn, thư mục Extras đứng trước thư mục site-packages, vì vậy import numpy vẫn tìm thấy bản sao của Apple. Tôi không chắc tại sao lại thế, nhưng có lẽ đó không phải là thứ mà bạn muốn khỉ.


Vì vậy, bạn khắc phục điều này như thế nào?

Hai giải pháp tốt nhất là:

  • Sử dụng virtualenv, và cài đặt numpy và bạn bè của bạn vào một môi trường ảo, thay vì toàn hệ thống. Điều này có nhược điểm là bạn phải học cách sử dụng virtualenv — nhưng điều đó chắc chắn đáng làm tại một thời điểm nào đó và nếu bạn có thời gian để tìm hiểu nó ngay bây giờ, hãy thực hiện nó.

  • Nâng cấp lên Python 3.x, hoặc từ trình cài đặt python.org hoặc qua Homebrew. Python 3.4 hoặc mới hơn đi kèm với pip và không đi kèm với bất kỳ gói nào được cài đặt sẵn một cách thân thiện với pip. Và, không giống như cài đặt một 2.7 riêng biệt, nó không can thiệp vào Python của Apple ở tất cả; python3python, pip3pip, v.v., tất cả sẽ là các chương trình riêng biệt và bạn không phải tìm hiểu bất kỳ điều gì về cách hoạt động của PATH hoặc bất kỳ điều gì. Điều này có nhược điểm là bạn phải học Python 3.x, trong đó có some major changes, do đó, một lần nữa, một chút của một đường cong học tập, nhưng một lần nữa, chắc chắn giá trị làm tại một số điểm.


Giả sử không ai trong số những người là có thể, tôi nghĩ là lựa chọn đơn giản nhất là sử dụng easy_install thay vì pip, cho các gói bạn muốn cài đặt phiên bản mới hơn của bất kỳ của "extras" của Apple. Bạn có thể nhận được danh sách đầy đủ của những người đó bằng cách xem những gì trong số /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python. Khi bạn nâng cấp numpy, bạn cũng có thể muốn nâng cấp scipymatplotlib; Tôi nghĩ mọi thứ khác không liên quan. (Tất nhiên, bạn có thể nâng cấp PyObjC hoặc dateutil hoặc bất kỳ điều gì khác mà bạn quan tâm, nhưng bạn không phải.)

Đây không phải là giải pháp lý tưởng; có rất nhiều lý do easy_install là kém hơn pip (ví dụ: không có trình gỡ cài đặt, vì vậy bạn sẽ phải nhớ đường dẫn đó ở đâu /Library/blah/blah là (hoặc tìm lại bằng cách in ra sys.path từ bên trong Python). t thường đề nghị easy_install cho bất cứ điều gì ngoại trừ readlinepip bản thân (và sau đó chỉ với Python của Apple). Nhưng trong trường hợp này, tôi nghĩ nó đơn giản hơn so với lựa chọn thay thế khác.

+0

Tôi vừa xóa thư mục mặc định và hệ thống có thể tìm thấy thư mục trong "/Library/Python/2.7/site-packages/numpy/" và nó hoạt động! Bạn có nghĩ việc này an toàn không? –

+1

@Comptrol: Nếu bạn đang cố gắng sử dụng Python có gói trang web, bạn có thể đã để lại mọi thứ, nhưng nếu có, hãy cài đặt lại NumPy với 'pip' của Python nên sửa nó (và, ngay cả khi nó không, lỗi sẽ cho bạn biết cách sửa nó theo cách thủ công). Nếu bạn đang cố gắng sử dụng một Python khác, thì các gói site đó cũng không quan trọng, vì vậy nó an toàn. – abarnert

2

Đổi tên numPy và các phiên bản scipy cài đặt bởi Apple trong/System /Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/ để nó bắt đầu sử dụng các phiên bản mới hơn được cài đặt bởi Pip

4

Câu hỏi cũ, nhưng Tôi tìm thấy nó khi cố gắng giải quyết vấn đề này, sẽ đăng giải pháp của tôi.

Tôi thấy chẩn đoán của @ abarnert là chính xác và hữu ích, nhưng tôi không thích bất kỳ giải pháp nào: Tôi thực sự muốn nâng cấp phiên bản mặc định của numpy. Thách thức là các thư mục những kẻ đang ở trong (mà @abarnert đề cập) không thể được xúc động ngay cả bởi sudo, như họ đang ở trong nhóm "bánh xe" này. Trong thực tế, nếu bạn đến đó và làm sudo rm -rf blah, nó sẽ cho bạn một sự cho phép bị từ chối lỗi.

Để làm được việc này, chúng ta phải có hành động quyết liệt:

  1. Khởi động lại máy tính trong chế độ phục hồi
  2. Tìm nhà ga và gõ csrutil disable
  3. Khởi động lại bình thường, sau đó nâng cấp NumPy với pip2 install --user --upgrade numpy (và giống với bất kỳ gói nào khác có vấn đề này)
  4. Lặp lại các bước a và b, lần này thay đổi "tắt" thành "bật"

Lưu ý: "tắt csrutil" là hoạt động kinh doanh nghiêm trọng có thể làm mất ổn định máy của bạn, tôi sẽ chỉ sử dụng nó khi thật cần thiết và kích hoạt lại càng sớm càng tốt. Nhưng AFAIK là cách duy nhất để nâng cấp các gói Python trong một thư mục bánh xe.

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