apt-get install python-xxx vs pip install

8

Saya masih mencoba untuk memahami masalah ini. Saya memiliki dan telah membaca banyak posting mengenai sudo apt-get install python-XXXvs pip install, dan saya mengerti intinya (apt-get adalah paket repo, dikelola oleh sekelompok orang yang berbeda untuk di-pip, otomatis -tanggal bersamaan dengan yang lainnya ketika ada pembaruan yang tersedia, itu biner, dll) Namun ada beberapa hal tertentu yang saya tidak mengerti dan belum dapat menemukan jawaban untuk:

  1. Jika saya, karena alasan apa pun, instal dulu paket, mis. Numpy, with sudo apt-get install numpy, dan kemudian saya nanti pip install numpy. Apa yang terjadi? apakah numpy dipasang lagi di tempat lain dengan versi yang berbeda (mis. di .local / lib), jadi sekarang saya punya dua versi independen? Yang mana yang digunakan ketika saya mengimpor? (jika saya mengerti benar itu terpisah dan apt-get adalah sistem luas, tapi saya telah melihat balasan yang bertentangan untuk pertanyaan ini, misalnya di sini )

  2. Saya perhatikan banyak paket di apt-get sudah cukup tua dibandingkan dengan pip. misalnya pada saat penulisan ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. Apakah ada manfaat untuk pertama sudo apt-get installdiikuti oleh pip install? atau itu hanya bodoh?

  3. Saya perhatikan bahwa pip saya 1.5.6 - ini adalah terbaru saat ini jika Anda melakukannya sudo apt-get install python-pip. sedangkan pada pip 8.0.2! Saya percaya ini telah menyebabkan masalah bagi saya, karena dengan versi yang lama Anda dapat menginstal paket yang sama berulang-ulang dan itu tidak memperingatkan. Dan entah bagaimana itu tidak menulis yang lama. Saya menyadari hal ini karena saya dapat terus menghapus paket yang sama (misalnya numpy) dan itu masih selalu ada ketika saya melakukannya pip show numpy. Dan anehnya, selalu menampilkan folder yang sama (.local /), tetapi dengan versi yang berbeda: S Jadi saya punya dua pertanyaan yang berkaitan dengan ini:

    Sebuah. apa cara terbaik untuk menginstal pip? Saat ini saya condong ke arah sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. Apakah itu bijaksana? Sepertinya agak konyol bagi saya.

    b. sekarang saya tahu banyak paket saya kacau dengan instalasi duplikat, mungkin karena beberapa diinstal dengan apt-get dan kemudian beberapa kali dengan pip 1.5.6, apa cara terbaik untuk memeriksa duplikat dan membersihkannya? Saya kira itu tidak aman untuk menggunakan skrip untuk mem-uninstall semua dan menginstal ulang?

PS Saya tidak yakin apakah saya harus memposting ini sebagai pertanyaan baru atau sebagai respons terhadap masalah awal saya. Karena pertanyaan ini jauh lebih ringkas dan umum saya merasa akan lebih baik terpisah. Maaf jika saya salah.

memo
sumber
Kemungkinan duplikat apt get install vs pip install
muru
Saya sebenarnya merujuk posting itu dalam pertanyaan saya, itu sangat membantu dalam membersihkan banyak kebingungan saya, tetapi itu tidak menjawab pertanyaan saya di atas (setidaknya saya tidak bisa melihatnya)
memo
Oh, dalam pertanyaan Anda yang lain. Saya hanya melihat daftar posting yang ditautkan dan tidak melihatnya di sana.
muru

Jawaban:

8

Untuk arsip, setelah banyak coba-coba inilah yang saya temukan (kalau dipikir-pikir, ada yang masuk akal, ada yang agak membingungkan).

  • Jika Anda sudo apt-get install python-xyz, paket akan muncul di pip list. Tentu saja Anda dapat mengimpornya dengan python, tetapi itu tidak muncul di pip.get_installed_distributions (). (Jelas sebaliknya tidak benar. Yaitu jika Anda melakukannya pip install xyztidak akan muncul di apt / sinaptik Anda)

  • Setelah sudo apt-get install python-xyzjika Anda melakukan pip install xyzapa yang terjadi tergantung pada versi pip yang Anda miliki.

TUA v1.5.6 (pengiriman versi saat ini pada PPA Ubuntu):

  • Versi pip ini (1.5.6) hanya akan menginstal salinan xyz baru di lokasi yang berbeda. Anda berakhir dengan banyak salinan dan ini menyebabkan kekacauan besar. misalnya:

    • numpy dari apt-get adalah 1.8.2 di /usr/local/lib/python2.7/dist-packages
    • numpy dari pip adalah 1.10.4 di ~ / .local / lib / python2.7 / paket-situs
  • Jika saya lakukan pip install numpylagi, itu mengunduh dan menginstalnya lagi. Jadi Anda bisa berakhir dengan banyak versi berbeda yang tidak dapat Anda akses. Saya bisa melakukan pip install numpy5x kali, dan kemudian saya bisa melakukan pip uninstall numpy 5xkali! Jelas Anda dapat memperhatikan untuk tidak melakukan itu, tetapi kadang-kadang skrip instalasi perangkat lunak lain sedikit ceroboh dan dapat mengacaukan segalanya. Tidak dapat dipercaya bahwa Ubuntu secara resmi mengirimkan versi pip ini.

V8.0.2 BARU (versi saat ini di pip itu sendiri):

  • versi pip yang lebih baru (mis. 8.0.2 yang ada di pip) akan menolak untuk menginstal paket yang sama dengan mengatakan persyaratan sudah terpenuhi. Jadi, Anda tidak dapat menginstal versi baru. Ini adalah perilaku yang baik (lebih lanjut tentang mendapatkan versi pip ini nanti).

  • Dalam hal ini Anda hanya dapat memutakhirkan, yaitu menginstal dengan flag -U.

  • Namun ketika Anda mencoba pip install -U xyzmenggunakan paket yang terinstal dengan sudo apt-get, Anda akan mendapatkan kesalahan izin karena apt-get diinstal di / usr / dan Anda perlu akses root untuk menulis di sana.

  • Jadi AFAIK Anda tidak punya pilihan selain untuk sudo pip install -U xyzdapat memperbaruinya. Dalam hal ini pip menginstal paket terbaru ke tempat yang sama dengan sudo apt-get menulisnya. misalnya dalam case saya /usr/local/lib/python2.7/dist-packages. Ini bagus.

  • Perlu juga disebutkan bahwa paket-paket di apt seringkali lebih tua daripada yang ada di pip (mis. Numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)

Jadi pikiran saya saat ini adalah untuk mendapatkan hal-hal besar dengan sudo apt-get, sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pythospyder n-hidung

dan kemudian perbarui (atau setidaknya beberapa dari mereka) dengan sudo pip install -U.

NB Tampaknya cukup penting untuk mendapatkan pip baru dari pip (sangat meta)

sudo apt-get install python-pip
sudo pip install -U pip

PS Saya menyadari virtualenv tetapi saya tidak perlu untuk itu sekarang. Saya hanya membutuhkan satu lingkungan pengembangan.

Dan berikut ini adalah skrip kecil untuk membuang daftar paket, versi dan path (tetapi hanya berfungsi pada modul pip yang diinstal, bukan yang dari apt-get)

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
memo
sumber