Làm cách nào để phát hiện và xóa các gói Python được cài đặt qua pip?


73

Tôi đã vô tình cài đặt các gói Python vào hệ thống của mình bằng cách sử dụng pipthay vì apt-get. Tôi đã làm điều này theo hai cách:

  • sử dụng phiên bản cũ hơn của virtualenv, tôi đã quên nối thêm --no-site-packageskhi tạo virtualenv - sau đó khi tôi gọi pip install, các gói Python được cài đặt vào hệ thống thay vì virtualenv
  • trong một Virtualenv được thiết lập chính xác, tôi đã gõ sudo pip install somepackage- sudo được cài đặt vào hệ thống chứ không phải virtualenv

Tôi tình cờ nhận thấy điều này vì tôi đã gõ pip freezebên ngoài virtualenv và phát hiện ra một số gói Python được liệt kê không nên có. Vì vậy, bây giờ câu hỏi của tôi là:

  • Làm cách nào để xác định tất cả các gói Python đã được cài đặt sai trên hệ thống (nghĩa là các gói Python xuất hiện trong pip freezedanh sách, nhưng không được cài đặt cùng apt-get)?
  • Làm thế nào để tôi loại bỏ chúng?

Câu trả lời:


56

Ubuntu Oneiric (và tôi cũng mong đợi các phiên bản mới hơn) cài đặt các gói pip /usr/local/lib/python2.7/dist-packagesaptcác gói tới /usr/lib/python2.7/dist-packages. Vì vậy, chỉ cần kiểm tra thư mục cũ và sudo pip uninstallmọi gói bạn tìm thấy ở đó.


12
Tôi đã đi tàn bạo và ban hành sudo rm -r /usr/local/lib/python2.7. Càng xa càng tốt.
Apterx

@Apteryx, tôi cũng làm như vậy /usr/local/lib/python3.5và sau một thời gian nâng cấp update-notifier-commongói không thành công do thiếu sixgói Python 3 . Tôi đã kết thúc cài đặt sixvới sudo -H pip3 install six.
Alexey

2
@Apteryx chúa chết tiệt! Tôi đã làm như vậy và bây giờ toàn bộ hệ thống của tôi là tất cả lên! bởi vì hầu hết mọi thứ trong ubfox đều dựa vào python!
yukashima huksay

Tôi đã nhận thấy rằng bây giờ tôi có một loạt các thực thi bị hỏng trong /usr/local/bin/một thời gian trước đây tôi chỉ gỡ bỏ /usr/local/lib/python3.5và chuyển sang conda ).
Alexey

22

Pip hiện đang bỏ qua các lệnh gỡ cài đặt cố gắng gỡ cài đặt thứ gì đó thuộc sở hữu của HĐH. Nó không có lỗi, giống như với một gói bị thiếu. Vì vậy, bây giờ bạn có thể gỡ cài đặt với quy trình sau:

pip freeze > dump.txt

Chỉnh sửa tệp bị đổ để xóa bất kỳ -edòng "cài đặt có thể chỉnh sửa" nào, mọi thứ sau ==dấu ( %s;==.*;;gtrong vim), hoán đổi các dòng mới cho khoảng trắng ( %s;\n; ;gtrong vim). Sau đó, bạn có thể gỡ cài đặt tất cả các gói không thuộc sở hữu với

cat dump.txt | xargs sudo pip uninstall -y

Tôi đã phải làm thủ tục này hai lần, vì một vài gói đã được cài đặt ~/.local/libquá.


1
Đây phải là câu trả lời được chấp nhận cho tôi
Nam G VU

3
Bất cứ ai cũng muốn có một chiếc áo lót không dây:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez

4
Cẩn thận! Điều này phụ thuộc vào việc hệ điều hành của bạn có gửi phiên bản đặc biệt hay không pip. Trên archlinux pipvui vẻ gỡ cài đặt các gói hệ thống. Mặt khác, piptrên debian jessie phàn nàn và lỗi:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.

1
bạn có cần sudo không - đây chắc chắn phải là câu trả lời được chấp nhận
Jonathan

6

AFAIK sudo pip installsẽ cài đặt vào /usr/local/lib/pythonVERSION/dist-packages. Bạn cần chạy sudo pip uninstallđể gỡ cài đặt các gói hệ thống rộng. Dường như pip freezetìm kiếm siêu dữ liệu gói và sẽ liệt kê mọi thứ được cài đặt, tức là cả từ pip cũng như apt-get bên ngoài virtualenvs. Có -ltùy chọn bên trong môi trường ảo để liệt kê các gói chỉ áp dụng cho môi trường ảo đó nhưng dường như đó là trường hợp mặc định cũng như trong môi trường ảo. Tôi nghĩ bạn chỉ có thể xóa các gói liên quan trên /usr/local/lib/pythonVERSION/dist-packagesnhưng phương pháp không thuận tiện lắm tôi đoán.


5

Để xóa gói được cài đặt qua pip, chỉ cần nhấn Ctrl+ Alt+ Ttrên bàn phím để mở Terminal. Khi nó mở ra, chạy lệnh bên dưới.

pip uninstall < package-name >

Để tìm kiếm các gói

pip search <package you want to search for>

Để xác định gói Python nào đã được cài đặt bằng pip, bằng freezelệnh, lệnh này sẽ cung cấp cho bạn danh sách các gói đã cài đặt và các phiên bản của chúng. Tôi sẽ đề nghị loại bỏ tất cả các trường hợp và cài đặt lại bằng sudo apt-getlệnh

sudo apt-get install python3

Làm cách nào để xác định gói Python nào được cài đặt bằng pip và gói apt-get nào? Tôi có thể vẫn còn pip uninstallnếu tôi sử dụng sudo pip installở nơi đầu tiên?
david.libremone

@ d3vid pip freezechỉ hiển thị các gói được cài đặt (AFAICS).
Oli

1
@oli pip đóng băng, chính xác ít nhất, cũng liệt kê các gói được cài đặt bởi apt, như các câu trả lời khác ở đây mô tả.
nealmcb

0

Tôi cần dọn sạch không gian đĩa khỏi các gói Python một cách an toàn. Mặc dù đây là một gói hoàn toàn sạch, tôi cũng cần phải di chuyển các phiên bản Python để tôi không cần các gói cũ. Tôi đã sử dụng cách sau để nhận tất cả tên gói của mình, bỏ qua 2 dòng đầu tiên và lấy cột đầu tiên và gỡ cài đặt mà không có sự tương tác của người dùng:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

-2

Điều này có liên quan đến Homebrew. Tôi không gặp vấn đề gì với pyodbc trên Mac Air cho đến khi tôi cài đặt Homebrew và sử dụng nó cho một vài thứ. Tôi tìm thấy chủ đề này trên github kết thúc bằng một giải pháp hiệu quả với tôi.

"Nếu bạn có Homebrew, chỉ cần cài đặt các tiêu đề ODBC:

$ brew install unixodbc

và chạy lại "pip install pyodbc". "

Điều này 100% đã giải quyết vấn đề cho tôi và chỉ mất một chút thời gian. Cho nó một shot.


có lẽ bạn cần phải đăng bài này tại Hỏi khác nhau? apple.stackexchange.com
david.libremone
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.