Pip có ghi đè lên các gói được cài đặt bởi apt-get không?


9

Điều gì xảy ra nếu tôi vô tình pip installmột gói mà tôi đã cài đặt sử dụng apt-gettrước đó? Tôi chỉ đơn giản là có thể sử dụng phiên bản mới nhất (có lẽ là phiên bản tôi đã cài đặt bằng cách sử dụng pip)? Điều gì xảy ra theo cách khác?

Lưu ý: Tôi không sử dụng Python trong môi trường ảo (đơn giản vì tôi không biết tại sao nên - Tôi sử dụng Python làm công cụ phân tích dữ liệu và chủ yếu cố gắng sử dụng phiên bản mới nhất của mọi thứ).


Nếu tôi không sai, bạn không cài đặt các gói tương tự bằng cách sử dụng apt-getpip
Lucio

Corerct, pipcài đặt chúng trong /usr/localthư mục con theo mặc định hoặc bất kỳ thư mục nào khác nếu bạn muốn.
Timo

3
Nhưng điều gì xảy ra, ví dụ, nếu lần đầu tiên tôi làm apt-get install python-pandastheo pip install pandas, hoặc ngược lại? Làm thế nào để cài đặt python toàn cầu của tôi biết sử dụng phiên bản nào trong cả hai phiên bản?
Fred S

1
@FredS: Chạy lệnh sau trong thiết bị đầu cuối, Python sẽ tìm kiếm theo thứ tự cụ thể đó cho một mô-đun:python -c "import sys; print sys.path"
Timo

Câu trả lời:


3

Như @Timo đã đề cập trong bình luận của anh ấy, python -c "import sys; print sys.path"sẽ cung cấp cho bạn đường dẫn tải mô-đun Python để cài đặt Python. Trên bản cài đặt tương đối mới 16.04, có ba thư mục lưu ý (trong số 10 thư mục đã có trong tôi):

  • '' (thư mục của ứng dụng)
  • '/usr/local/lib/python2.7/dist-packages' (nơi pip cài đặt các mô-đun)
  • '/usr/lib/python2.7/dist-packages' (trong đó các mô-đun cài đặt apt)

Tuy nhiên, điều quan trọng nhất cần lưu ý là '/usr/local/lib/python2.7/dist-packages' được ưu tiên cao hơn '/usr/lib/python2.7/dist-packages'.

Nếu bạn lần đầu tiên cài đặt gói Python thông qua apt (-get), nó sẽ cài đặt vào '/usr/lib/python2.7/dist-packages'. Nếu sau này bạn thử và sử dụng pip để cài đặt mô-đun, ban đầu pip sẽ đưa ra cảnh báo rằng sự phụ thuộc đã được đáp ứng, sau đó thoát ra; việc thêm cờ --upTHER sẽ buộc pip cài đặt, cài đặt mô-đun vào '/usr/local/lib/python2.7/dist-packages'. (Lưu ý đầu ra cũng nói rằng phiên bản trong '/usr/lib/python2.7/dist-packages' không được gỡ cài đặt) Sau đó, bạn có thể xác minh rằng phiên bản cài đặt pip là phiên bản đang được sử dụng bằng cách sử dụng sau : python -c "import MODULE; print MODULE.__file__".

Như vậy, điều này cho thấy các gói được cài đặt qua pip sẽ được ưu tiên hơn các gói được cài đặt hệ thống, nhưng sẽ không ghi đè lên bất cứ thứ gì được cài đặt từ apt (-get).


1

Để thêm vào @Bryan Wyatt, có vẻ như mong muốn (và dự định) rằng các mục đã cài đặt / nâng cấp PIP nên được ưu tiên hơn các gói đã cài đặt APT (có thể cũ hơn). Hệ thống của tôi có đường dẫn apt và pip đảo ngược. Nó sẽ là (bỏ qua các mục khác):

  • '/usr/local/lib/python2.7/dist-packages' (nơi pip cài đặt các mô-đun)
  • '/usr/lib/python2.7/dist-packages' (trong đó các mô-đun cài đặt apt)

Tuy nhiên, do một số hành động chưa biết mà tôi phải thực hiện, những đường dẫn này xuất hiện theo thứ tự ngược lại đối với tôi (bỏ qua các mục khác):

  • '/usr/lib/python2.7/dist-packages' (trong đó các mô-đun cài đặt apt)
  • '/usr/local/lib/python2.7/dist-packages' (nơi pip cài đặt các mô-đun)

Nó chỉ ra một cái gì đó tôi đã thêm /usr/lib/python2.7/dist-packagesvào /usr/local/lib/python2.7/dist-packages/easy-install.pth. Đơn giản chỉ cần loại bỏ các dòng từ easy-install.pthcố định sai lầm cho tôi. /usr/lib/python2.7/dist-packagesvẫn còn trong con đường của tôi, vì nó được thêm vào ở giai đoạn sau ở nơi khác.

Là một lưu ý phụ, pprint sẽ hiển thị đường dẫn của bạn đẹp hơn ... tức là:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/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',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
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.