uninstall Python diinstal oleh kompilasi sumber?

18

Saya telah menginstal Python 2.7.9 pada Ubuntu 14.04 dengan menyusun sumbernya , oleh .configre, makedan make altinstall. make altinstallkarena saya tidak ingin menimpa default Python 2.7.6. 2.7.9 saya sudah terpasang /usr/local/bin/python2.7dan ada banyak file lain di direktori lain di bawah /usr/local. Dari README dalam paket instalasi sumber:

Pada sistem Unix dan Mac jika Anda berniat untuk menginstal beberapa versi Python menggunakan awalan instalasi yang sama (--prefix argumen ke skrip configure) Anda harus berhati-hati agar executable python utama Anda tidak ditimpa dengan pemasangan versi yang berbeda.

Semua file dan direktori yang diinstal menggunakan "make altinstall" berisi versi utama dan minor dan karenanya dapat hidup berdampingan. "make install" juga menciptakan $ {awalan} / bin / python yang merujuk ke $ {awalan} /bin/pythonX.Y.

Jika Anda ingin memasang beberapa versi menggunakan awalan yang sama, Anda harus memutuskan versi mana (jika ada) yang merupakan versi "utama" Anda. Instal versi itu menggunakan "make install". Instal semua versi lain menggunakan "make altinstall".

Misalnya, jika Anda ingin menginstal Python 2.5, 2.6 dan 3.0 dengan 2.6 sebagai versi utama, Anda akan menjalankan "make install" di direktori 2.6 build Anda dan "make altinstall" di yang lain.

Sekarang saya ingin menghapus instal saya sendiri 2.7.9.

  1. Untungnya saya masih memiliki kode sumber, tetapi sayangnya, Makefile tidak memiliki bagian uninstall

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Kemudian saya mencoba cara lain: pertama buat deb dari sumber dan kompilasi, instal deb (semoga menimpa file yang diinstal dari make altinstall), dan kemudian uninstall deb.

    Tapi ketika saya membuat file deb oleh checkinstall, saya tidak yakin apakah dan bagaimana saya harus lakukan secara berbeda untuk make altinstalldari untuk make install. Apa yang saya coba adalah:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...

    Saya bertanya-tanya bagaimana saya bisa membuat deb sehingga menginstal deb akan menduplikasi proses instalasi make altinstall?

  3. Atau apa cara Anda menghapus instalan python 2.7.9 saya?

Catatan: paket sumber di tautan pertama juga memiliki setup.py, install-shselain itu README.

StackExchange untuk Semua
sumber
Python tidak menginstal di banyak tempat. Saya hanya akan menghapus file secara manual.
Faheem Mitha
terima kasih. apa tempat yang tidak banyak itu?
StackExchange for All
Lihatlah salah satu paket biner. Ini pada dasarnya tempat yang sama, saya pikir, kecuali yang /usr/localdigunakan sebagai ganti /usr. dpkg -L python2.7dan dpkg -L python2.7-minimal. Dan apa yang Anda butuhkan 2.7.9?
Faheem Mitha
Saya mendengar bahwa itu memiliki pip secara default. Tetapi setelah menginstal, saya tidak menemukan itu memiliki pip.
StackExchange for All
Anda dapat menginstal pip apt-get install python-pip.
Faheem Mitha

Jawaban:

20

Perintah berikut akan menghapus make altinstallpython -ed Anda :

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

Anda mungkin juga harus melakukannya

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

Meskipun make altinstalltelah melayani saya dengan baik jika "sistem python" memiliki nomor major.minor berbeda dari yang Anda instal, itu tidak berfungsi dengan baik jika hanya nomor mikro (posisi ketiga) berbeda. Angka itu dikecualikan dari biner yang diinstal, dan Anda berakhir dengan dua versi pythonX.Y. Ini selalu menjadi masalah, tetapi begitu distribusi mulai dikirimkan dengan utilitas sistem berbasis pada 2.7.X masalah ini menjadi lebih parah karena 2.7 seharusnya menjadi yang terakhir dari seri Python2.

IMO pendekatan terbaik untuk memecahkan masalah ini adalah mencegahnya menjadi satu: konfigurasikan python untuk menginstal di direktori yang tidak digunakan oleh python lain. Di sistem saya, mereka gagal /opt/python/X.Y.Z.

Untuk menggunakan Python yang diinstal di sana, Anda gunakan [virualenv][1]untuk membuat lingkungan baru:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

atau gunakan [virtualenvwrapper][2]. Saya memiliki beberapa alias untuk versi terbaru dari seri yang saya kerjakan.

Jika Anda menggunakan toxuntuk menguji terhadap beberapa versi (Anda harus) alias berikut ini akan membantunya menemukan berbagai versi:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(ini adalah versi terbaru, saya menggunakan pengaturan yang sedikit berbeda dengan mempertahankan tautan dari /opt/python/2.7yang terbaru /opt/python/2.7.9, dan untuk nomor minor lainnya juga, dalam proses mengunduh, membangun, dan menginstal versi python baru)

Instalasi ini tidak pernah digunakan secara langsung. Mereka selalu digunakan sebagai dasar untuk virtualenvlingkungan saja, maka saya tidak peduli bahwa mereka tidak berada dalam PATH normal saya.

Anthon
sumber
2
Jangan hapus /usr/local/lib/python2.7! Semua modul python global dipasang oleh pip langsung di /usr/local/lib/python2.7/dist-packages. Semua modul itu akan rusak!
abhaga
2
@abhaga Anda tidak harus menginstal dengan pipluar dari virtualenvpada setiap instalasi linux
Anthon
Kita juga tidak boleh menghapus paket dengan menghapus file dan direktori secara manual. :) Ini adalah praktik yang baik dan selalu ada saat-saat ketika kita perlu melanggarnya. Tetapi penting untuk mengetahui bahwa tidak aman untuk menghapus direktori itu.
abhaga
Di CentOS7 saya, ada beberapa yang berbeda: 1. include harus: /usr/local/include/python2.7, tanpa bin; 2. file man adalah /usr/local/share/man/man1/python2.7.1; 3. File lain: /usr/local/bin/python2.7-config
Bin S
7

Mulai dari daftar @ Anthon rm, dan menerapkan saran @ bin-s untuk mencari file yang lebih baru, saya datang dengan skrip bash ini untuk menghapus Python-3.6.6 saya sepenuhnya (yang telah diinstal dari sumber dengan make altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

Gunakan dengan hati-hati (mis. Tambahkan -Iopsi dalam rm cmd untuk memverifikasi setiap pembunuhan).

ankostis
sumber
sangat bagus. Sekarang python3.X tidak muncul ketika saya mengetik python3 dan tekan tab
Prometheus
1

Biasanya semua file diinstal dalam hampir satu menit. Anda dapat menggunakan "find" untuk memeriksa semua file yang diinstal hampir bersamaan, kemudian "rm" secara manual. Semoga bermanfaat.

find /usr/local/ -type f -newer <some latest old file>
Bin S
sumber