Apakah Python memiliki sistem manajemen paket / modul?

145

Apakah Python memiliki sistem manajemen paket / modul, mirip dengan bagaimana Ruby memiliki rubygem di mana Anda dapat melakukannya gem install packagename?

Pada Menginstal Modul Python , saya hanya melihat referensi python setup.py install, tetapi mengharuskan Anda untuk menemukan paket terlebih dahulu.

tommy chheng
sumber
3
Jika Anda berpikir indeks paket Python, PyPI harus memiliki instruksi yang lebih jelas tentang cara menginstal paket, silakan pilih dan komentari masalah ini di bitbucket.org/pypa/pypi/issue/149/…
Kolonel Panic
Sementara itu saat ini pada saat itu, tautan dalam pertanyaan ini sekarang ke dokumentasi distutils lawas. Saya mengajukan bugs.python.org/issue26014 untuk membahas bahwa dokumen-dokumen ini harus lebih jelas bahwa mereka tidak lagi cocok untuk digunakan sebagai dokumentasi pengguna akhir (hanya disimpan untuk kepentingan pelaksana alat).
ncoghlan

Jawaban:

213

Kemajuan terbaru

Maret 2014 : Berita baik! Python 3.4 dikirimkan bersama Pip. Pip telah lama menjadi manajer paket standar de-facto Python. Anda dapat menginstal paket seperti ini:

pip install httpie

Wahey! Ini adalah fitur terbaik dari setiap rilis Python. Itu membuat kekayaan perpustakaan komunitas dapat diakses oleh semua orang. Pemula tidak lagi dikecualikan dari penggunaan perpustakaan komunitas karena kesulitan pengaturan.

Namun , masih ada sejumlah frustrasi luar biasa dengan pengalaman pengemasan Python. Secara kumulatif, mereka membuat Python sangat tidak ramah untuk pemula. Juga, sejarah panjang penelantaran (mis. Tidak dikirim dengan manajer paket selama 14 tahun dari Python 2.0 ke Python 3.3) memang merusak komunitas. Saya jelaskan keduanya di bawah ini.

Frustrasi luar biasa

Penting untuk dipahami bahwa meskipun pengguna berpengalaman dapat mengatasi frustrasi ini, mereka adalah penghalang signifikan bagi orang yang baru mengenal Python. Faktanya, kesulitan dan ketidaksopanan pengguna secara umum cenderung menghalangi banyak dari mereka.

Situs web PyPI sangat membantu

Setiap bahasa dengan manajer paket memiliki repositori resmi (atau semi-resmi) untuk komunitas untuk mengunduh dan mempublikasikan paket. Python memiliki Indeks Paket Python, PyPI. https://pypi.python.org/pypi

Mari kita bandingkan halamannya dengan RubyGems dan Npm (pengelola paket Node).

  1. https://rubygems.org/gems/rails halaman RubyGems untuk paket tersebutrails
  2. https://www.npmjs.org/package/express halaman Npm untuk paket tersebutexpress
  3. https://pypi.python.org/pypi/simplejson/ halaman PyPI untuk paket tersebutsimplejson

Anda akan melihat halaman RubyGems dan Npm, keduanya dimulai dengan deskripsi satu baris dari paket tersebut, lalu instruksi ramah yang besar tentang cara menginstalnya.

Sementara itu, celakalah bagi pengguna Python yang malang yang secara naif menelusuri ke PyPI. Di https://pypi.python.org/pypi/simplejson/ , mereka tidak akan menemukan petunjuk yang membantu. Namun demikian, tautan 'Unduh' berwarna hijau besar. Tidak masuk akal untuk mengikutinya. Aha, mereka mengklik! Browser mereka mengunduh .tar.gzfile. Banyak pengguna Windows bahkan tidak bisa membukanya, tetapi jika mereka bertahan akhirnya mereka dapat mengekstraknya, kemudian jalankan setup.pydan akhirnya dengan bantuan Google setup.py install. Beberapa akan menyerah dan menemukan kembali roda ..

Tentu saja semua ini salah. Cara termudah untuk menginstal paket adalah dengan perintah Pip. Tapi PyPI bahkan tidak menyebut Pip. Sebaliknya, itu membawa mereka ke jalan kuno dan membosankan.

Kesalahan: Tidak dapat menemukan vcvarsall.bat

Numpy adalah salah satu perpustakaan Python yang paling populer. Cobalah untuk menginstalnya dengan Pip, Anda mendapatkan pesan kesalahan samar ini:

Kesalahan: Tidak dapat menemukan vcvarsall.bat

Mencoba untuk memperbaikinya adalah salah satu pertanyaan paling populer di Stack Overflow: " error: Tidak dapat menemukan vcvarsall.bat "

Hanya sedikit orang yang berhasil.

Sebagai perbandingan, dalam situasi yang sama, Ruby mencetak pesan ini, yang menjelaskan apa yang terjadi dan bagaimana cara memperbaikinya:

Harap perbarui PATH Anda untuk menyertakan alat bangun atau unduh DevKit dari http://rubyinstaller.org/downloads dan ikuti instruksi di http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Paket penerbitan sulit

Ruby dan Nodejs dikirimkan bersama dengan manajer paket berfitur lengkap, Gem (sejak 2007) dan Npm (sejak 2011), dan telah membina komunitas berbagi yang berpusat di sekitar GitHub. Npm membuat paket penerbitan semudah menginstalnya, ia sudah memiliki paket 64k . RubyGems mencantumkan paket 72k . Indeks paket Python yang terhormat hanya mencantumkan 41rb .

Sejarah

Terbang di hadapan moto " termasuk baterai ", Python dikirim tanpa manajer paket hingga 2014.

Sampai Pip, standar de facto adalah perintah easy_install. Sangat tidak memadai. Tidak ada perintah untuk menghapus paket.

Pip adalah kemajuan besar. Itu sebagian besar fitur Ruby Gem. Sayangnya, Pip - sampai saat ini - ironisnya sulit untuk menginstal. Bahkan, masalahnya tetap menjadi pertanyaan Python teratas di Stack Overflow: " Bagaimana cara saya menginstal pip pada Windows? "

Kolonel Panic
sumber
3
Bagi siapa pun yang tertarik, ada PEP 439 yang mengusulkan cara untuk merampingkan proses pemasangan pip, meskipun saya pikir PEP ini hanya bagian dari strategi yang lebih luas yang sedang dilihat. Lihat juga diskusi di sini .
Cartroo
3
@ Camroo itu berita bagus! Python layak menjadi manajer paket, saya berharap para devs dapat mewujudkannya.
Kolonel Panic
Benar-benar, sudah lama tertunda. Saya pasti berharap itu membuatnya menjadi Python 3.4, setidaknya. Sayangnya saya sangat meragukan bahwa port-nya akan kembali ke 2.x, tetapi setidaknya ada cahaya di ujung terowongan. Semoga saja itu bukan naga yang mendekat ... (^_^)
Cartroo
6
Dalam pertahanan Python, bahasa yang lebih baru seperti Ruby dan Node beruntung dapat mengamati kesalahan bahasa sebelumnya dan menghindarinya. Yang mengatakan, saya benar-benar berharap manajemen paket pada Python akan menerima lebih banyak cinta dan perawatan, jadi saya senang melihat PEP 439 seperti yang ditunjukkan oleh @Cartroo.
Dennis
Saya setuju bahwa manajemen paket Ruby adalah hal yang luar biasa dari sudut pandang saya (pengguna akhir) .. gem install Xsepertinya berfungsi di semua platform. Jadi bagaimana mereka mengelola ini untuk permata yang memerlukan kompilasi kode C pada Windows?
bsa
64

Indeks Paket Python (PyPI) tampaknya standar:

  • Untuk menginstal paket: pip install MyProject
  • Untuk memperbarui paket pip install --upgrade MyProject
  • Untuk memperbaiki versi paketpip install MyProject==1.0

Anda dapat menginstal manajer paket sebagai berikut:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Referensi:

Thomas Bratt
sumber
3
Ini adalah jawaban modern.
Gringo Suave
6
Saya mencari di internet selama 20 menit dan jawaban ini tidak ada. Terima kasih banyak. Juga, saya memiliki keraguan serius tentang penggunaan python jika dokumentasinya seburuk ini ... ini seharusnya ada di halaman utama Python atau dapat diakses dari google atau apalah
Chris J
63

Dan hanya untuk memberikan kontras, ada juga pip .

Ignacio Vazquez-Abrams
sumber
2
Terima kasih! mengapa pip tidak disebutkan pada halaman dokumentasi pemasangan modul python?
tommy chheng
Perhatikan bahwa pip tidak mendukung telur, itu hanya menginstal paket sumber. Secara umum, pip melakukan banyak hal lebih baik daripada easy_install, tetapi easy_install mungkin diinstal secara default pada kebanyakan unix, pip tidak.
Jeffrey Harris
8
@Tommy Benar! Jika Python devs peduli dengan pengalaman pengguna, mereka akan mengirim Python dengan manajer paket (seperti pip). Ruby dikirimkan bersama Gem, dan Nodejs dengan Npm. stackoverflow.com/a/13445719/284795
Kolonel Panic
21

Sebagai pengembang dan pengembang Ruby dan Perl-Python, saya belum menemukan easy_install atau pip sama dengan RubyGems atau CPAN.

Saya cenderung menjaga sistem pengembangan saya menjalankan versi modul terbaru ketika pengembang memperbaruinya, dan membekukan sistem produksi saya di versi yang ditetapkan. Baik RubyGems dan CPAN membuatnya mudah untuk menemukan modul dengan mendaftar apa yang tersedia, kemudian menginstal dan kemudian memperbaruinya secara individu atau secara massal jika diinginkan.

easy_install dan pip membuatnya mudah untuk menginstal modul SEKALI saya menemukannya melalui pencarian browser atau belajar tentang itu dengan cara lain, tetapi mereka tidak akan memberi tahu saya apa yang tersedia. Saya dapat secara eksplisit memberi nama modul yang akan diperbarui, tetapi aplikasi tidak akan memberi tahu saya apa yang telah diperbarui atau mereka akan memperbarui semuanya secara massal jika saya mau.

Jadi, fungsionalitas dasar ada di pip dan easy_install tetapi ada fitur yang hilang yang ingin saya lihat yang akan membuatnya lebih ramah dan lebih mudah digunakan dan setara dengan CPAN dan RubyGems.

Manusia Timah
sumber
Jawaban ini sekarang baik dan benar-benar usang.
ncoghlan
11

Hingga akhir tahun 2014, distribusi Anaconda Python dari Continuum Analytics dengan conda manajer paket harus dipertimbangkan. Ini memecahkan sebagian besar masalah serius yang dihadapi orang dengan Python secara umum (mengelola versi Python yang berbeda, memperbarui versi Python, manajemen paket, lingkungan virtual, kompatibilitas Windows / Mac) dalam satu unduhan yang kohesif.

Ini memungkinkan Anda untuk melakukan hampir semua yang Anda inginkan dengan Python tanpa harus mengubah sistem sama sekali. Solusi pilihan saya berikutnya adalah pip + virtualenv, tetapi Anda harus menginstal virtualenv ke dalam sistem Anda Python (dan sistem Anda Python mungkin bukan versi yang Anda inginkan), atau membangun dari sumber . Anaconda membuat seluruh proses ini klik tombol, serta menambahkan banyak fitur lainnya.

anderspitman
sumber
7

Itu akan menjadi easy_install .

Kirk Strauser
sumber
1
Jika Anda ingin melakukan downvote semua orang di halaman yang mengatakan easy_install, periksa tanggalnya terlebih dahulu. Itu nasihat yang sahih ketika diberikan hampir 7 tahun yang lalu . Saya tidak menganggap kita penjawab akan secara teratur mengunjungi kembali ini untuk memperbarui, jadi downvoting itu konyol.
Kirk Strauser
6

Ini disebut setuptools. Anda menjalankannya dengan perintah "easy_install".

Anda dapat menemukan direktori di http://pypi.python.org/

Chris Long
sumber
5

Saya tidak melihat MacPorts atau Homebrew disebutkan dalam jawaban lain di sini, tetapi karena saya melihat mereka disebutkan di tempat lain di Stack Overflow untuk pertanyaan terkait, saya akan menambahkan US $ 0,02 saya sendiri yang tampaknya banyak orang menganggap MacPorts bukan hanya paket. manajer untuk paket secara umum (saat ini mereka mencantumkan 16311 paket / port, 2931 pencocokan "python", meskipun hanya untuk Mac), tetapi juga sebagai manajer paket yang layak (mungkin lebih baik) untuk paket / modul Python:

Pertanyaan

"... apa metode yang digunakan pengembang python Mac untuk mengelola modul mereka?"

Jawaban

SciPy

"Mac (tidak seperti Linux) tidak datang dengan manajer paket, tetapi ada beberapa manajer paket populer yang dapat Anda instal. Macports ..."

Saya masih memperdebatkan apakah saya akan menggunakan MacPorts sendiri atau tidak, tetapi saat ini saya condong ke arah itu.

Osteoboon
sumber
1
Homebrew sendiri mengatakan: Anda dapat menginstal paket Python dengan (the easy_install usang atau) pip install <your_favorite_package>
Simone
4

Pada Windows menginstal http://chocolatey.org/ kemudian

choco install python

Buka jendela cmd baru dengan PATH yang diperbarui. Selanjutnya, lakukan

choco install pip

Setelah itu kamu bisa

pip install pyside
pip install ipython
...
hansvb
sumber
Saya ingin menjawab ini sebagai komentar atas jawaban Thomas Bratt tetapi saya tidak memiliki reputasi yang cukup ...
hansvb
3

Karena tidak ada yang menyebutkan pipenv di sini, saya ingin menjelaskan pandangan saya mengapa semua orang harus menggunakannya untuk mengelola paket python.

Seperti @ColonelPanic menyebutkan ada beberapa masalah dengan Python Package Index dan juga pip dan virtualenv .

Pipenv memecahkan sebagian besar masalah dengan pip dan menyediakan fitur tambahan juga.

Fitur Pipenv

Pipenv dimaksudkan untuk menggantikan pip dan virtualenv, yang berarti pipenv akan secara otomatis membuat lingkungan virtual yang terpisah untuk setiap proyek sehingga menghindari konflik antara versi python / versi paket untuk proyek yang berbeda.

  • Mengaktifkan build yang benar-benar deterministik, sementara dengan mudah menentukan hanya apa yang Anda inginkan.
  • Menghasilkan dan memeriksa hash file untuk dependensi yang dikunci.
  • Secara otomatis menginstal Python yang diperlukan, jika pyenv tersedia.
  • Secara otomatis menemukan proyek Anda di rumah, secara rekursif, dengan mencari Pipfile.
  • Secara otomatis menghasilkan Pipfile, jika tidak ada.
  • Secara otomatis membuat virtualenv di lokasi standar.
  • Secara otomatis menambah / menghapus paket ke Pipfile ketika mereka tidak diinstal /.
  • Secara otomatis memuat file .env, jika ada.

Jika Anda pernah mengerjakan proyek python sebelumnya, Anda akan menyadari fitur-fitur ini membuat mengelola paket lebih mudah.

Perintah lain

  • checkmemeriksa kerentanan keamanan dan menegaskan bahwa persyaratan PEP 508 dipenuhi oleh lingkungan saat ini. ( yang saya pikir merupakan fitur hebat terutama setelah ini - Paket berbahaya di PyPi )
  • graph akan menampilkan grafik dependensi, dari dependensi yang Anda instal.

Anda dapat membaca lebih lanjut tentang ini di sini - Pipenv .

Instalasi

Anda dapat menemukan dokumentasi instalasi di sini

PS: Jika Anda suka bekerja dengan permintaan Paket Python , Anda akan senang mengetahui bahwa pipenv adalah oleh pengembang yang sama Kenneth Reitz

Vaulstein
sumber
0

Puisi adalah yang Anda cari. Ini mengurus manajemen ketergantungan, lingkungan virtual, berjalan.

0x32e0edfb
sumber