Mengapa menggunakan pip di easy_install? [Tutup]

936

Sebuah tweet yang berbunyi:

Jangan gunakan easy_install, kecuali jika Anda suka menusuk wajah Anda. Gunakan pip.

Mengapa menggunakan pip di easy_install? Bukankah kesalahannya terletak pada PyPI dan penulis paket kebanyakan ? Jika seorang penulis mengunggah tarball sumber sampah (misalnya: file yang hilang, tidak ada setup.py) ke PyPI, maka baik pip dan easy_install akan gagal. Selain perbedaan kosmetik, mengapa orang Python (seperti dalam tweet di atas) tampaknya sangat menyukai pip daripada easy_install?

(Mari kita asumsikan bahwa kita berbicara tentang easy_install dari paket Distribute, yang dikelola oleh komunitas)

Sridhar Ratnakumar
sumber
74
Sebelum saya melihat pertanyaan ini, saya menjawab yang tidak berhubungan dengan mengatakan "jangan gunakan easy_install, gunakan pip". Sekarang saya bertanya-tanya mengapa saya mengatakan itu ...
Daniel Roseman
21
Saya masih mengalami paket yang menyebabkan pip gagal tetapi easy_install menangani dengan baik, jadi saya ingin tahu tentang ini juga.
kwatford
5
pyobjc-core adalah contoh paket yang bekerja dengan easy_install tetapi tidak dengan pip.
Marc Abramowitz
5
Kembali ke python empat tahun kemudian kondisi pengemasan kacau. Ini tahun 2014 dan itu semakin buruk. Dari apa yang saya mengerti setuptools menyerap distutils, meskipun python docs resmi tidak menyadari hal ini, tetapi tidak ada yang akan menjadi bagian dari python 3 , dan pip berkeliaran seperti roda ketiga (pun intended).
Andriy Drozdyuk
3
@drozzy: Anda kebetulan kembali pada waktu yang paling buruk — tepat setelah sekelompok devs inti memutuskan bahwa segala sesuatunya menjadi berantakan sehingga mereka harus terlibat dalam menyelesaikan masalah. setuptoolsbukan bagian dari Python 3 karena pipitu, dan itulah satu-satunya bagian yang dibutuhkan pengguna akhir. (Dan pengembang yang ingin mendistribusikan pada PyPI jelas dapat pip install setuptools, dan segala sesuatu yang mereka inginkan.)
abarnert

Jawaban:

304

Banyak jawaban di sini sudah ketinggalan zaman untuk tahun 2015 (meskipun yang awalnya diterima dari Daniel Roseman tidak). Inilah keadaan saat ini:

  • Paket biner sekarang didistribusikan sebagai roda ( .whlfile) —tidak hanya di PyPI, tetapi di repositori pihak ketiga seperti Paket Ekstensi Christoph Gohlke untuk Windows . pipdapat menangani roda; easy_installtidak bisa.
  • Lingkungan virtual (yang terintegrasi dengan 3.4, atau dapat ditambahkan ke 2.6 + / 3.1 + dengan virtualenv) telah menjadi alat yang sangat penting dan menonjol (dan direkomendasikan dalam dokumen resmi ); mereka termasuk di pipluar kotak, tetapi bahkan tidak berfungsi dengan benar easy_install.
  • The distributepaket yang termasuk easy_installdipertahankan tidak lagi. Perbaikan atas setuptoolsdigabungkan kembali ke setuptools. Mencoba menginstal distributehanya akan menginstal setuptools.
  • easy_install itu sendiri hanya dipertahankan semu.
  • Semua case yang pipdulunya lebih rendah easy_installdari — pemasangan dari source tree yang tidak dibongkar, dari repo DVCS, dll. — Sudah lama hilang; Anda bisa pip install ., pip install git+https://.
  • pipdatang dengan paket Python 2.7 dan 3.4+ resmi dari python.org, dan sebuah pipbootstrap disertakan secara default jika Anda membangun dari sumber.
  • Berbagai bit dokumentasi yang tidak lengkap tentang menginstal, menggunakan, dan membangun paket telah digantikan oleh Panduan Pengguna Kemasan Python . Dokumentasi Python sendiri tentang Menginstal Modul Python sekarang menentang panduan pengguna ini, dan secara eksplisit memanggil pipsebagai "program penginstal yang disukai".
  • Fitur baru lainnya telah ditambahkan pipselama bertahun-tahun yang tidak akan pernah ada easy_install. Sebagai contoh, pipmembuatnya mudah untuk mengkloning paket situs Anda dengan membangun file persyaratan dan kemudian menginstalnya dengan satu perintah di setiap sisi. Atau untuk mengonversi file persyaratan Anda ke repo lokal untuk digunakan untuk pengembangan in-house. Dan seterusnya.

Satu-satunya alasan bagus yang saya tahu untuk digunakan easy_installpada tahun 2015 adalah kasus khusus menggunakan versi Python Apple yang sudah diinstal sebelumnya dengan OS X 10.5-10.8. Sejak 10.5, Apple telah memasukkan easy_install, tetapi pada 10.10 mereka masih belum memasukkan pip. Dengan 10.9+, Anda masih harus menggunakannya get-pip.py, tetapi untuk 10.5-10.8, ini memiliki beberapa masalah, jadi lebih mudah untuk melakukannya sudo easy_install pip. (Secara umum, itu easy_install pipadalah ide yang buruk; itu hanya untuk OS X 10.5-10.8 yang ingin Anda lakukan ini.) Juga, 10.5-10.8 termasuk readlinedalam cara yang easy_installtahu bagaimana untuk berkeliaran tetapi piptidak, jadi Anda juga ingin sudo easy_install readlinejika Anda ingin memutakhirkan itu.

abarnert
sumber
9
@drozzy: Mungkin. Tetapi pertimbangkan bahwa dalam 5 tahun ke depan, jawaban saya akan ketinggalan zaman seperti semua yang lain, sedangkan jawaban Daniel Roseman adalah abadi. Juga, jawaban saya tidak akan sebagus jika tidak bisa menunjuk pada jawaban 5 tahun yang diterima yang menunjukkan mengapa komunitas Python tertinggal pipdalam waktu intervening.
abarnert
2
Perlu dicatat bahwa beberapa versi paket dari pip bersifat buggy, dan pip gagal untuk meningkatkan sendiri. Apakah Anda menganggapnya ironis atau tidak, dalam kasus itu solusi termudah adalah dengan melakukannya easy_install -U pipatau easy_install3 -U pip.
analytik
"tetapi bahkan tidak bekerja dengan benar easy_install" Ini bukan pengalaman saya, meskipun saya belum mencoba dalam beberapa saat karena roda sekarang mendominasi. Tapi biner Christoph Gohlke dulu didistribusikan sebagai telur yang dapat dieksekusi. Memanggil easy_installmereka adalah satu - satunya cara saya bisa menginstal paket-paket itu ke lingkungan virtual, dan itu tidak pernah memberi saya mulas. Dengan cara apa tidak easy_installlagi berfungsi dengan virtual envs?
jpmc26
599

Dari pengantar Ian Bicking sendiri ke pip :

pip awalnya ditulis untuk meningkatkan Easy_install dengan cara berikut

  • Semua paket diunduh sebelum instalasi. Instalasi yang diselesaikan sebagian tidak terjadi sebagai hasilnya.
  • Perhatian diambil untuk menghadirkan hasil yang bermanfaat pada konsol.
  • Alasan untuk tindakan dilacak. Misalnya, jika suatu paket sedang diinstal, pip melacak mengapa paket itu diperlukan.
  • Pesan kesalahan harus bermanfaat.
  • Kode ini relatif ringkas dan kohesif, sehingga lebih mudah digunakan secara terprogram.
  • Paket tidak harus diinstal sebagai arsip telur, mereka dapat diinstal datar (sambil menjaga metadata telur).
  • Dukungan asli untuk sistem kontrol versi lain (Git, Mercurial dan Bazaar)
  • Penghapusan paket.
  • Sederhana untuk menetapkan set persyaratan tetap dan secara andal mereproduksi set paket.
Daniel Roseman
sumber
63
Keuntungan "pesan kesalahan" sangat besar, terutama untuk pengguna yang lebih baru. Easy-install terkenal karena memuntahkan lusinan kesalahan fatal, hanya saja akhirnya berhasil menginstalnya, yang membuatnya sulit digunakan sampai Anda belajar mengabaikan sebagian besar semua yang dikatakannya. Pip tidak mengatakan hal-hal itu sejak awal.
Brandon Rhodes
1
@ Glyph apakah ada keuntungan menggunakan easy_install piplebih sudo apt-get install python-pip?
Dennis
2
Jangan gunakan easy_install di luar virtualenv pada distribusi berbasis paket: workaround.org/easy-install-debian
Federico
11
@ Dennis: Saat menggunakan sudo apt-getUbuntu / Debian akan menginstal paket Python di /usr/lib/python/dist-packagessedangkan sudo pipatau sudo easy_installakan menginstal /local/lib/python/site-packagesdan sayangnya paket Debian / Ubuntu sering memiliki nama yang berbeda yang tidak akrab dengan pip. Solusi terbaik IMHO adalah dengan menggunakan virtualenv dan pipmenginstal paket Anda di sana.
Mark Mikofski
2
Ini perlu pembaruan.
Andriy Drozdyuk
248

Alasan lain — yang belum disebutkan — alasan untuk memilih pip adalah karena itu adalah panas yang baru dan akan terus digunakan di masa depan.

Infografis di bawah ini — dari bagian Keadaan Pengemasan Saat Ini di Panduan The Hitchhiker untuk Pengemasan v1.0 —menunjukkan bahwa setuptools / easy_install akan hilang di masa mendatang.

masukkan deskripsi gambar di sini

Berikut ini infografis lain dari dokumentasi distribusikan yang menunjukkan bahwa Setuptools dan easy_install akan digantikan oleh hotness baru— distribusikan dan pip . Sementara pip masih menjadi hal yang baru, Distribute bergabung dengan Setuptools pada 2013 dengan merilis Setuptools v0.7.

masukkan deskripsi gambar di sini

Matthew Rankin
sumber
47
Infografis FTW
WineSoaked
34
OTOH, grafik kedua telah usang selama satu tahun. mendistribusikan akan mencapai akhir hidup dan digantikan oleh distutils2 (yang juga akan berada di pustaka standar Python dimulai dengan 3.3). Installer dasar bernama pysetup disediakan sebagai bagian atau distutils2, dan pip akan terus menyediakan fitur tambahan di atas distutils2 di masa depan.
Éric Araujo
7
OMG, terima kasih banyak. Saya telah bingung dengan kemasan python selama bertahun-tahun dan sangat menggembirakan melihat jalan semi-otoritatif ke depan.
aaron
21
"Jawaban" ini sudah ketinggalan zaman dan hanya salah bahkan tidak lucu.
onlynone
172

Dua alasan, mungkin ada lebih banyak:

  1. pip memberikan uninstallperintah

  2. jika instalasi gagal di tengah, pip akan membuat Anda dalam keadaan bersih.

Ned Batchelder
sumber
1
Begitu juga setuptoools sekarang. Erm ... semacam itu. pythonhosted.org/setuptools/…
Andriy Drozdyuk
116

PERSYARATAN file.

Serius, saya menggunakan ini dalam hubungannya dengan virtualenv setiap hari.


TUTORIAL MANAJEMEN DEPENDENSI CEPAT, ORANG

File persyaratan memungkinkan Anda untuk membuat snapshot dari semua paket yang telah diinstal melalui pip. Dengan mengenkapsulasi paket-paket itu dalam lingkungan virtual, Anda dapat membuat basis kode Anda bekerja dari satu set paket yang sangat spesifik dan berbagi basis kode itu dengan yang lain.

Dari dokumentasi Heroku https://devcenter.heroku.com/articles/python

Anda membuat lingkungan virtual, dan mengatur shell Anda untuk menggunakannya. (instruksi bash / * nix)

virtualenv env
source env/bin/activate

Sekarang semua skrip python dijalankan dengan shell ini akan menggunakan paket dan konfigurasi lingkungan ini. Sekarang Anda dapat menginstal paket secara lokal ke lingkungan ini tanpa perlu menginstalnya secara global pada mesin Anda.

pip install flask

Sekarang Anda dapat membuang info tentang paket mana yang diinstal

pip freeze > requirements.txt

Jika Anda memeriksa file itu ke dalam kontrol versi, ketika orang lain mendapatkan kode Anda, mereka dapat mengatur lingkungan virtual mereka sendiri dan menginstal semua dependensi dengan:

pip install -r requirements.txt

Setiap saat Anda dapat mengotomatisasi kebosanan seperti ini luar biasa.

Matthew Schinckel
sumber
1
Ini tampaknya menjadi bagian dari setuptools sekarang juga: pythonhosted.org/setuptools/…
Andriy Drozdyuk
Anda harus menggunakan pipreqsuntuk mendapatkan file requirement.txt. Ini hanya akan memberikan pustaka yang terkait dengan proyek tempat Anda menelepon pipreqs, sehingga requirement.txt akan didasarkan pada proyek dan bukan pada virtualenv.
SeF
83

pip tidak akan menginstal paket biner dan tidak diuji dengan baik pada Windows.

Karena Windows tidak datang dengan kompiler secara default, pip seringkali tidak dapat digunakan di sana. easy_install dapat menginstal paket biner untuk Windows.

fuzzyman
sumber
3
Menarik, saya tidak pernah memikirkan itu. pip juga tidak mendukung fitur "ekstra" setuptools yang paling tidak digunakan oleh orang-orang Zope.
Sridhar Ratnakumar
1
Apakah itu indikasi perlunya lingkungan gcc di windows, daripada bersikeras pip menginstal binari pra-dibangun?
WineSoaked
18
Kompiler "benar" yang digunakan untuk Windows adalah Visual Studio (2008 saya percaya untuk versi terbaru Python). Menginstal ini, bahkan versi gratisnya, memang merepotkan. Cara normal menginstal ekstensi C pada Windows adalah dari binari yang dikompilasi sebelumnya. easy_install mendukung ini, pip tidak.
fuzzyman
8
Ini adalah alasan utama mengapa saya masih menggunakan easy_install.
Randy Syring
14
Pada tahun-tahun sejak jawaban di atas diberikan, sekarang tidak lagi benar bahwa pip tidak dapat menginstal paket biner, pada Windows atau pada platform lain. The wheelFormat distribusi biner membuat itu mungkin. Banyak paket pihak ketiga dengan modul ekstensi C kini juga didistribusikan sebagai roda yang dibuat untuk berbagai platform dan pip dapat menginstalnya secara otomatis. Lihat, misalnya, pythonwheels.com
Ned Deily
76

UPDATE: setuptoolstelah diserap distributesebagai lawan dari sebaliknya, karena beberapa pemikiran. setuptoolsup-to-date dengan distutilsperubahan terbaru dan format roda. Karenanya, easy_installdan pipkurang lebih setara sekarang.

Sumber: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

pengguna3341691
sumber
5
Mengapa ini tidak lebih ditingkatkan? Jawabannya sudah usang!
Andriy Drozdyuk
5
ya, jawaban teratas sudah ketinggalan jaman
WKordos
2
Oleh karena itu, easy_install dan pip kurang lebih setara sekarang . easy_installmasih apa yang sudah lama dan pip sangat meningkat. easy_installhanya bagian dari setuptoolsdan bisa dibilang salah satu yang terburuk yang mengapa pip bertujuan untuk menggantinya.
Piotr Dobrogost
25

Sebagai tambahan untuk jawaban fuzzyman:

pip tidak akan menginstal paket biner dan tidak diuji dengan baik pada Windows.

Karena Windows tidak datang dengan kompiler secara default, pip seringkali tidak dapat digunakan di sana. easy_install dapat menginstal paket biner untuk Windows.

Berikut ini trik di Windows:

  • Anda dapat menggunakan easy_install <package>untuk menginstal paket biner untuk menghindari membangun biner

  • Anda dapat menggunakan pip uninstall <package>bahkan jika Anda menggunakan easy_install.

Ini hanya solusi untuk saya di windows. Sebenarnya saya selalu menggunakan pip jika tidak ada binari yang terlibat.

Lihat doku pip saat ini: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Saya akan bertanya di milis apa yang direncanakan untuk itu.

Ini pembaruan terbaru:

Cara baru yang didukung untuk menginstal binari akan menjadi wheel! Itu belum dalam standar, tetapi hampir. Versi saat ini masih berupa alfa: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Saya akan menguji wheeldengan membuat installer OS X untuk PySidemenggunakan wheelbukan telur. Akan kembali dan melaporkan tentang ini.

sorakan - Chris

Pembaruan cepat:

Transisi ke wheelhampir berakhir. Sebagian besar paket mendukung wheel.

Saya berjanji untuk membuat roda PySide, dan saya melakukannya pada musim panas lalu. Bagus sekali!

PETUNJUK: Beberapa pengembang gagal sejauh ini untuk mendukung format roda, hanya karena mereka lupa untuk mengganti distutilsdengan setuptools. Seringkali, mudah untuk mengonversi paket-paket tersebut dengan mengganti satu kata ini di setup.py.

Christian Tismer
sumber
2
diperbarui di atas - Saya pikir penantiannya hampir berakhir ;-)
Christian Tismer
Saya harus memperbarui ini, lagi, karena roda telah menjadi standar pada musim semi 2014. Sebenarnya, saya pikir utas lama seperti itu tidak boleh diubah ad infinitum, karena - jawaban lama cukup bagus - mudah untuk mengganti semuanya ketika kenyataan berubah. Tapi apakah itu adil, ketika alasan awal untuk sebuah pertanyaan hilang?
Christian Tismer
3

Hanya bertemu satu kasus khusus yang saya harus menggunakan easy_installbukan pip, atau saya harus menarik kode sumber secara langsung.

Untuk paket GitPython, versi dalam pipterlalu lama, yang mana 0.1.7, sedangkan yang dari easy_installadalah yang terbaru 0.3.2.rc1.

Saya menggunakan Python 2.7.8. Saya tidak yakin tentang mekanisme yang mendasari easy_installdan pip, tetapi setidaknya versi dari beberapa paket mungkin berbeda satu sama lain, dan kadang-kadang easy_installadalah satu dengan versi yang lebih baru.

easy_install GitPython
Landys
sumber
6
Saya memeriksa ini sekarang (lihat cap waktu), dan itu tidak lagi benar: Baik pip dan easy_install bekerja sama, menghasilkan GitPython 0.3.5 hari ini. (Diuji pada OS X Yosemite, hanya). Apa platform Anda? Harap perbarui entri Anda karena sekarang menyesatkan.
Christian Tismer