Khôi phục cài đặt Python về mặc định cộng với gói phụ thuộc apt


14

Tôi đã chơi xung quanh rất nhiều với các cài đặt Python của tôi (2 và 3) và cài đặt một loạt các gói, một số sử dụng apt-get, nhưng hầu hết sử dụng pip. Tôi cũng đã nâng cấp nhiều aptgói được cài đặt piplên phiên bản mới hơn.

Câu hỏi của tôi là:
Làm cách nào tôi có thể đảo ngược tất cả các thay đổi đó, xóa tất cả pipcác gói Python đã cài đặt và chỉ giữ bộ gói cài đặt mặc định trong phiên bản kho lưu trữ mặc định của chúng, cộng với các gói được cài đặt bởi apt-getnhưng chỉ phụ thuộc vào phần mềm khác, luôn hạ cấp xuống kho lưu trữ phiên bản nếu cần thiết.

Tôi muốn làm điều này để có một môi trường Python được dọn dẹp cho hệ thống và chỉ có các sửa đổi của tôi trong virtualenvs.

Có thể mà không cần cài đặt lại hệ thống? Làm thế nào tôi sẽ tiếp cận nó?


Câu trả lời:


5

Tôi sẽ bắt đầu bằng cách liệt kê các gói Python được quản lý bởi apt-get(một lớp lót sau mất vài giây để chạy, hãy kiên nhẫn):

$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u

Lưu ý: nếu cần, thay thế 2.7 bằng bất kỳ phiên bản python nào bạn quan tâm.

Tiếp theo, gỡ cài đặt các gói bạn cài đặt bằng tay. Nếu bạn không chắc chắn những gói nào bạn đã cài đặt, bạn có thể lấy danh sách tất cả các gói được cài đặt thủ công bằng cách sử dụng lệnh sau (xem câu hỏi này ):

$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Sau đó gỡ cài đặt các gói Python bạn đã cài đặt thủ công, ví dụ:

$ sudo apt-get remove python-tk python-scipy

Tiếp theo, bạn muốn biết gói nào bạn đã cài đặt bằng pip:

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*

Lệnh này liệt kê nội dung của thư mục cài đặt của pip được sắp xếp theo ngày sửa đổi cuối cùng, giúp bạn dễ dàng tìm thấy các gói bạn đã cài đặt. Ví dụ: tôi đã cài đặt gcloudcông cụ của Google , cài đặt một loạt các gói pip mà tôi không muốn gỡ cài đặt, nhưng nhìn qua danh sách, thật dễ dàng để biết rằng tất cả chúng đều được cài đặt cùng một lúc, vì vậy tôi biết những gì tôi nên cài đặt để lại, và những cái tôi có thể gỡ cài đặt. Trước khi gỡ cài đặt bất kỳ gói pip nào, bạn nên chụp nhanh danh sách các gói được cài đặt:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Sau đó, chỉ cần gỡ cài đặt các gói bạn muốn, ví dụ:

$ sudo pip uninstall py pytest

Cuối cùng, đừng quên rằng một số gói pip có thể đã được cài đặt trong thư mục người dùng của bạn. Có lẽ bạn ổn với điều đó, nhưng nếu không, bạn có thể liệt kê chúng:

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*

Nếu bạn muốn loại bỏ tất cả các gói này, bạn có thể xóa thư mục này. Mặt khác, chỉ cần gỡ cài đặt các gói riêng lẻ, ví dụ:

$ pip uninstall tensorflow

Đừng quên kiểm tra các phiên bản python khác (ví dụ: 3.5).


Tôi muốn đề xuất một thông báo an toàn công cộng rằng việc xóa quá nhiều gói có thể làm tê liệt hệ thống của bạn, nhưng nếu không thì đây là một hướng dẫn tuyệt vời. (Ví dụ, tôi đã vui mừng tôi đã làm mvchứ không phải rmtrên của tôi /usr/local/lib/python3.6bởi vì tôi phát hiện ra một vài phút sau đó tôi cần một số điều trong đó cho chức năng hệ thống khá cơ bản.
CRAQ
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.