cài đặt apt-get python-xxx vs pip cài đặt


8

Tôi vẫn đang cố gắng để hiểu vấn đề này Tôi đang gặp phải và đã đọc rất nhiều bài viết liên quan đến sudo apt-get install python-XXXvs pip installvà tôi hiểu ý chính của nó (apt-get là một repo gói, được quản lý bởi một nhóm người hoàn toàn khác với pip, auto -cung cấp cùng với mọi thứ khác khi có bản cập nhật, đó là nhị phân, v.v.). Tuy nhiên, có một vài điều cụ thể mà tôi không hiểu và không thể tìm thấy câu trả lời:

  1. Nếu tôi, vì bất kỳ lý do gì, đầu tiên cài đặt một gói, ví dụ như numpy, với sudo apt-get install numpy, và sau đó tôi sau pip install numpy. Chuyện gì xảy ra Numpy có được cài đặt lại ở nơi khác với phiên bản khác không (ví dụ: .local / lib), vậy bây giờ tôi có hai phiên bản độc lập không? Cái nào được sử dụng khi tôi nhập? (nếu tôi hiểu chính xác thì nó là riêng biệt và apt-get là toàn hệ thống, nhưng tôi đã thấy các câu trả lời mâu thuẫn cho câu hỏi này, ví dụ ở đây )

  2. Tôi nhận thấy rất nhiều gói trên apt-get khá cũ so với pip. ví dụ: tại thời điểm viết ipython 2.3.0 so với 4.0.3, numpy 1.10.2 so với 1.10.4, spyder 2.3.5 so với 2.3.8. Có bất kỳ lợi thế để đầu tiên sudo apt-get installtheo sau bởi một pip install? Hay đó chỉ là ngu ngốc?

  3. Tôi nhận thấy rằng pip của tôi là 1.5.6 - đây là phiên bản mới nhất hiện tại nếu bạn làm như vậy sudo apt-get install python-pip. trong khi đó trên pip là 8.0.2! Tôi tin rằng điều này đã gây ra sự cố cho tôi, bởi vì với phiên bản cũ đó, bạn có thể cài đặt cùng một gói nhiều lần và nó không cảnh báo. Và bằng cách nào đó nó không viết lên cái cũ. Tôi nhận ra điều này bởi vì tôi có thể tiếp tục gỡ cài đặt cùng một gói (ví dụ như numpy) và nó vẫn luôn ở đó khi tôi làm pip show numpy. Và thật kỳ lạ, luôn hiển thị cùng một thư mục (.local /), nhưng với các phiên bản khác nhau: S Vì vậy, tôi có hai câu hỏi liên quan đến điều này:

    a. cách tốt nhất để cài đặt pip là gì? Tôi hiện đang nghiêng về phía sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. Có khôn ngoan không? Có vẻ hơi vô lý với tôi.

    b. bây giờ tôi biết rất nhiều gói của tôi bị rối với các bản cài đặt trùng lặp, có thể là do một số gói đã được cài đặt với apt-get và sau đó nhiều lần với pip 1.5.6, cách tốt nhất để kiểm tra trùng lặp và dọn sạch nó là gì? Tôi đoán không an toàn khi sử dụng tập lệnh để gỡ cài đặt tất cả và cài đặt lại?

Tái bút: Tôi không chắc liệu tôi nên đăng câu hỏi này dưới dạng câu hỏi mới hay phản hồi cho vấn đề ban đầu của mình. Vì câu hỏi này ngắn gọn hơn rất nhiều và chung chung, tôi cảm thấy nó sẽ tốt hơn. Xin lỗi nếu tôi nhầm.


Bản sao có thể có của apt get install vs pip install
muru

Tôi thực sự tham khảo bài đăng đó trong câu hỏi của mình, nó rất hữu ích trong việc xóa đi rất nhiều sự nhầm lẫn của tôi, nhưng nó không trả lời các câu hỏi của tôi ở trên (ít nhất là tôi không thể nhìn thấy nó)
bản ghi nhớ

Ồ, trong câu hỏi khác của bạn. Tôi chỉ nhìn vào danh sách các bài viết được liên kết và không thấy nó ở đó.
muru

Câu trả lời:


8

Đối với tài liệu lưu trữ, sau nhiều thử nghiệm và lỗi, đây là những gì tôi đã tìm thấy (nhìn lại, một số bit có ý nghĩa, một số khác khá khó hiểu).

  • Nếu bạn sudo apt-get install python-xyz, gói sẽ xuất hiện trong pip list. Tất nhiên bạn có thể nhập nó bằng python, nhưng nó không xuất hiện trong pip.get_installed_distribution (). (Rõ ràng điều ngược lại là không đúng. Tức là nếu bạn làm điều pip install xyzđó sẽ không xuất hiện trong apt / synap của bạn)

  • Sau khi sudo apt-get install python-xyzbạn làm pip install xyznhững gì xảy ra phụ thuộc vào phiên bản pip bạn có.

OLD v1.5.6 (phiên bản hiện tại vận chuyển trên Ubuntu PPA):

  • Phiên bản pip (1.5.6) này sẽ chỉ cài đặt một bản sao mới của xyz ở một vị trí khác. Bạn kết thúc với nhiều bản sao và điều này gây ra một mớ hỗn độn lớn. ví dụ:

    • numpy từ apt-get là 1.8.2 tại /usr/local/lib/python2.7/dist-packages
    • numpy từ pip là 1.10.4 tại ~ / .local / lib / python2.7 / site-gói
  • Nếu tôi làm pip install numpylại, nó sẽ tải xuống và cài đặt lại. Vì vậy, bạn có thể kết thúc với nhiều phiên bản khác nhau mà bạn không thể thực sự truy cập. Tôi có thể làm pip install numpy5x lần, và sau đó tôi có thể làm pip uninstall numpy 5xlần! Rõ ràng bạn có thể chú ý không làm điều đó, nhưng đôi khi các tập lệnh cài đặt của phần mềm khác hơi bất cẩn và có thể làm mọi thứ rối tung lên. Không thể tin được rằng Ubuntu chính thức xuất xưởng phiên bản pip này.

NEW v8.0.2 (phiên bản hiện tại trên chính pip):

  • các phiên bản mới hơn của pip (ví dụ 8.0.2 trên pip) sẽ từ chối cài đặt gói tương tự cho biết yêu cầu đã được đáp ứng. Vì vậy, bạn không thể cài đặt một phiên bản mới. Đây là hành vi tốt (nhiều hơn về việc nhận phiên bản pip này sau).

  • Trong trường hợp này, bạn chỉ có thể nâng cấp, tức là cài đặt với cờ -U.

  • Tuy nhiên, khi bạn cố gắng pip install -U xyzcài đặt gói sudo apt-get, bạn sẽ gặp lỗi quyền vì apt-get đã được cài đặt trong / usr / và bạn cần quyền truy cập root để ghi vào đó.

  • Vì vậy, AFAIK bạn không có lựa chọn nào khác ngoài sudo pip install -U xyzviệc có thể cập nhật nó. Trong trường hợp này, pip cài đặt gói mới nhất vào cùng một nơi với sudo apt-get đã viết nó. ví dụ: trong trường hợp của tôi /usr/local/lib/python2.7/dist-packages. Điều này là tốt

  • Cũng đáng chỉ ra rằng các gói trên apt thường khá cũ hơn các gói trên pip (ví dụ: numpy v1.8.2 so với 1.10.4, scipy 0.14.1 so với 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs. 2.3.8)

Vì vậy, suy nghĩ hiện tại của tôi là có được những điều lớn lao sudo apt-get, ví dụ như sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pythogián điệp n-mũi

và sau đó cập nhật chúng (hoặc ít nhất là một số trong số chúng) với sudo pip install -U.

NB Có vẻ khá quan trọng để có được pip mới từ pip (rất meta)

sudo apt-get install python-pip
sudo pip install -U pip

PS Tôi biết về virtualenv nhưng tôi không có nhu cầu về nó ngay bây giờ. Tôi chỉ cần một môi trường phát triển.

Và đây là một đoạn script nhỏ để kết xuất danh sách các gói, phiên bản và đường dẫn (nhưng chỉ hoạt động trên các mô-đun được cài đặt pip, không phải các mô-đun từ apt-get)

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.