Kembalikan penginstalan Python ke default plus dependensi paket apt

14

Saya sering bermain-main dengan instalasi Python saya (2 dan 3) dan menginstal banyak paket, beberapa menggunakan apt-get, tetapi kebanyakan menggunakan pip. Saya juga telah aptmemutakhirkan banyak paket yang diinstal dengan pipversi yang lebih baru.

Pertanyaan saya adalah:
Bagaimana saya bisa membalikkan semua perubahan itu, menghapus semua pippaket Python yang sudah diinstal dan hanya membiarkan paket default yang sudah diinstal dalam versi repositori default mereka, ditambah yang diinstal oleh apt-gettetapi hanya sebagai ketergantungan dari perangkat lunak lain, selalu diturunkan ke repositori versi jika perlu.

Saya ingin melakukan ini untuk merapikan lingkungan Python untuk sistem dan modifikasi saya hanya dalam virtualenvs.

Apakah itu mungkin tanpa menginstal ulang sistem? Bagaimana saya mendekatinya?

Komandan Byte
sumber

Jawaban:

5

Saya akan mulai dengan mendaftar paket-paket Python yang dikelola oleh apt-get(satu-liner berikut ini membutuhkan beberapa detik untuk dijalankan, bersabarlah):

$ 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

Catatan: jika perlu, ganti 2.7 dengan versi python apa pun yang Anda minati.

Selanjutnya, hapus instalasi paket yang Anda instal secara manual. Jika Anda tidak yakin yang mana yang Anda instal, Anda bisa mendapatkan daftar semua paket yang diinstal secara manual menggunakan perintah berikut (lihat pertanyaan ini ):

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

Kemudian hapus instalasi paket Python yang Anda instal secara manual, misalnya:

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

Selanjutnya, Anda ingin tahu paket mana yang Anda instal menggunakan pip:

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

Perintah ini mencantumkan isi direktori pemasangan pip yang diurutkan berdasarkan tanggal modifikasi terakhir, sehingga memudahkan Anda menemukan paket yang Anda instal sendiri. Sebagai contoh, saya menginstal gcloudalat Google yang menginstal banyak paket pip yang tidak ingin saya hapus, tetapi melihat daftar itu mudah untuk melihat bahwa mereka semua diinstal pada waktu yang tepat, jadi saya tahu mana yang harus saya gunakan. pergi, dan mana yang bisa saya hapus. Sebelum Anda menghapus paket pip, Anda harus mengambil snapshot dari daftar paket yang diinstal:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Kemudian hapus instalasi paket yang Anda inginkan, misalnya:

$ sudo pip uninstall py pytest

Terakhir, jangan lupa bahwa beberapa paket pip mungkin telah diinstal di direktori pengguna Anda. Mungkin Anda setuju dengan itu, tetapi jika tidak, Anda dapat mencantumkannya:

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

Jika Anda ingin menyingkirkan semua paket ini, Anda bisa menghapus direktori ini. Jika tidak, cukup hapus paket-paket individual, misalnya:

$ pip uninstall tensorflow

Jangan lupa untuk memeriksa versi python lainnya (mis. 3.5).

MiniQuark
sumber
Saya akan merekomendasikan pengumuman keselamatan publik yang menghapus terlalu banyak paket dapat melumpuhkan sistem Anda, tetapi sebaliknya ini adalah panduan yang sangat baik. (Misalnya, saya senang saya melakukannya mvdaripada rmpada saya /usr/local/lib/python3.6karena saya menemukan beberapa menit kemudian bahwa saya memerlukan beberapa hal di sana untuk fungsi sistem yang cukup mendasar.
craq