Saya masih mencoba untuk memahami masalah ini. Saya memiliki dan telah membaca banyak posting mengenai sudo apt-get install python-XXX
vs 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:
Jika saya, karena alasan apa pun, instal dulu paket, mis. Numpy, with
sudo apt-get install numpy
, dan kemudian saya nantipip 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 )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 install
diikuti olehpip install
? atau itu hanya bodoh?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 melakukannyapip 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.
sumber
Jawaban:
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 dipip list
. Tentu saja Anda dapat mengimpornya dengan python, tetapi itu tidak muncul di pip.get_installed_distributions (). (Jelas sebaliknya tidak benar. Yaitu jika Anda melakukannyapip install xyz
tidak akan muncul di apt / sinaptik Anda)Setelah
sudo apt-get install python-xyz
jika Anda melakukanpip install xyz
apa 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:
Jika saya lakukan
pip install numpy
lagi, itu mengunduh dan menginstalnya lagi. Jadi Anda bisa berakhir dengan banyak versi berbeda yang tidak dapat Anda akses. Saya bisa melakukanpip install numpy
5x kali, dan kemudian saya bisa melakukanpip uninstall numpy 5x
kali! 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 xyz
menggunakan 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 xyz
dapat 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 pytho
spyder n-hidungdan kemudian perbarui (atau setidaknya beberapa dari mereka) dengan
sudo pip install -U
.NB Tampaknya cukup penting untuk mendapatkan pip baru dari pip (sangat meta)
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)
sumber