Apa perbedaan antara pyenv, virtualenv, anaconda?

157

Saya seorang programmer ruby ​​yang mencoba belajar python. Saya keluarga yang cantik dengan pyenv karena ini seperti copy dan paste dari rbenv. Pyenv membantu memungkinkan memiliki lebih dari satu versi python dalam suatu sistem dan juga mengisolasi python tanpa menyentuh bagian sensitif dari sistem.

Saya kira setiap instalasi python datang dengan paket pip. Yang masih belum saya mengerti adalah, ada banyak python libs di luar sana yang menyarankan untuk menggunakan virtualenv dan anaconda ini. Saya bahkan dapat menemukan plugin virtualenv untuk pyenv.

Sekarang saya semakin bingung dengan tujuan dari kedua pyenv dan virtualenv ini. lebih buruk di dalam pyenv ada plugin virtualenv.

pertanyaan saya adalah:

  • Apa perbedaan antara pyenv dan virtualenv?
  • Apakah ada perbedaan dalam menggunakan perintah pip di dalam pyenv dan virtualenv?
  • apa yang dilakukan pyenv virutalenv ini?

penjelasan Anda dengan contoh akan sangat dihargai.

channa ly
sumber

Jawaban:

166

Sunting: Layak disebutkan di pipsini juga, condaserta pipmemiliki persamaan dan perbedaan yang relevan dengan topik ini .

pip: Pengelola Paket Python.

  • Anda mungkin menganggapnya pipsebagai python yang setara dengan gemperintah ruby
  • pip tidak disertakan dengan python secara default.
  • Anda dapat menginstal Python menggunakan homebrew , yang akan menginstal pip secara otomatis:brew install python
  • Versi terakhir OSX tidak menyertakan pip secara default. Untuk menambahkan pip ke versi python sistem mac Anda, Anda bisasudo easy_install pip
  • Anda dapat menemukan dan menerbitkan paket python menggunakan PyPI: The Python Package Index
  • File persyaratan.txt sebanding dengan ruby gemfile
  • Untuk membuat file teks persyaratan, pip freeze > requirements.txt
  • Catatan, pada titik ini, kami telah menginstal python di sistem kami, dan kami telah membuat file requirement.txt yang menguraikan semua paket python yang telah diinstal di sistem Anda.

pyenv: Pengelola Versi Python

  • Dari dokumen : pyenv memungkinkan Anda beralih dengan mudah di antara beberapa versi Python. Sederhana, tidak mengganggu, dan mengikuti tradisi UNIX dari alat tujuan tunggal yang melakukan satu hal dengan baik. Proyek ini bercabang dari rbenv dan ruby-build, dan dimodifikasi untuk Python.
  • Banyak orang ragu untuk menggunakan python3 .
  • Jika Anda perlu menggunakan versi python yang berbeda, pyenvmemungkinkan Anda mengelola ini dengan mudah.

virtualenv: Pengelola Lingkungan Python.

  • Dari dokumen : Masalah dasar yang sedang ditangani adalah salah satu dependensi dan versi, dan izin secara tidak langsung. Bayangkan Anda memiliki aplikasi yang membutuhkan LibFoo versi 1, tetapi aplikasi lain memerlukan versi 2. Bagaimana Anda dapat menggunakan kedua aplikasi ini? Jika Anda menginstal semuanya ke /usr/lib/python2.7/site-packages (atau apa pun lokasi standar platform Anda), mudah untuk berakhir dalam situasi di mana Anda secara tidak sengaja memutakhirkan aplikasi yang seharusnya tidak ditingkatkan.
  • Untuk membuat virtualenv, cukup panggil virtualenv ENV, di mana ENVadalah direktori untuk menempatkan lingkungan virtual baru.
  • Untuk menginisialisasi virtualenv, Anda perlu source ENV/bin/activate. Untuk berhenti menggunakan, cukup panggil deactivate.
  • Setelah Anda mengaktifkan virtualenv, Anda mungkin menginstal semua persyaratan paket ruang kerja dengan menjalankan file pip install -rproyek requirements.txt.

Anaconda: Manajer Paket + Manajer Lingkungan + Perpustakaan Ilmiah Tambahan.

  • Dari dokumen : Anaconda 4.2.0 menyertakan instalasi Python yang mudah (2.7.12, 3.4.5, dan / atau 3.5.2) dan pembaruan lebih dari 100 paket Python ilmiah dan analitik pra-bangun dan teruji yang mencakup NumPy, Pandas , SciPy, Matplotlib, dan IPython, dengan lebih dari 620 lebih paket tersedia melalui sederhanaconda install <packagename>
  • Sebagai pengembang web, saya belum pernah menggunakan Anaconda. Ini ~ 3GB termasuk semua paket.
  • Ada minicondaversi yang lebih ramping , yang sepertinya bisa menjadi opsi yang lebih sederhana daripada menggunakan pip+ virtualenv, meskipun saya tidak memiliki pengalaman menggunakannya secara pribadi.
  • Meskipun condamemungkinkan Anda untuk menginstal paket, paket ini terpisah dari paket PyPI, jadi Anda mungkin masih perlu menggunakan pip sebagai tambahan tergantung pada jenis paket yang perlu Anda instal.

Lihat juga:

Wade Williams
sumber
5
Ini mungkin bisa menggunakan penyegaran sekarang, cf stackoverflow.com/a/49084152/14420
matt wilkie
10
Bisakah ini diperbarui untuk dimasukkan ke pipenv karena saat ini tampaknya alat pengemasan Python yang direkomendasikan secara resmi dari Python.org?
Wavesailor
1
Apa masalah dengan menginstal perpustakaan yang hanya sebesar 3GB? Anda tidak ingin menerapkan semua pustaka itu, tetapi hanya karena Anda memiliki pustaka senilai 3GB, bukan berarti Anda perlu menerapkan semuanya. Dan itu adalah jumlah kecil ruang hard drive saat ini. Saat ini saya menggunakan instalasi anaconda dan saya mengelola lingkungan saya dengan venv, tetapi saya sedang mempertimbangkan apakah akan menggunakan conda untuk lingkungan virtual saya juga (saya rasa saya tidak akan melakukannya - venv tampak seperti alur kerja yang lebih lancar bagi saya).
David
@David Saya agak terlambat, tetapi dapatkah Anda mengembangkan venv tampak seperti alur kerja yang lebih lancar bagi saya ?
AMC
@David Secara pribadi, meskipun saya setuju bahwa 3GB tidak terlalu besar saat ini, selalu ada sesuatu yang bisa dikatakan tentang pengalaman minimalis. Untuk yang kedua, mengapa menggunakan venv dan memasang conda pada saat bersamaan? Bukankah itu membuat conda tidak ada gunanya?
Aditya
3

Analogi sederhana:

  • pyenv ~ rbenv
  • pip ~ bundler
  • virtual env ~ gemset di rvm. Ini dapat dikelola oleh bundler secara langsung tanpa gemset.

Karena saya menggunakan python3, saya lebih suka lingkungan virtual built-in python3 bernama venv . venv sederhana dan mudah digunakan. Saya akan merekomendasikan Anda untuk membaca dokumen resminya. Dokumennya pendek dan ringkas.

Di ruby, kami tidak benar-benar membutuhkan lingkungan virtual karena bundler mengurusnya. Baik virtual env dan bundler sangat bagus, namun, mereka memiliki solusi berbeda untuk menyelesaikan masalah yang sama.

channa ly
sumber