Saya baru-baru ini belajar bagaimana menggunakan virtualenv dan virtualenvwrapper dalam alur kerja saya, tetapi saya telah melihat pyenv yang disebutkan dalam beberapa panduan tetapi saya tidak bisa mendapatkan pemahaman tentang apa itu pyenv dan bagaimana perbedaannya / mirip dengan virtualenv. Apakah pyenv pengganti yang lebih baik / lebih baru untuk virtualenv atau alat gratis? Jika yang terakhir apa fungsinya secara berbeda dan bagaimana keduanya (dan virtualenvwrapper jika berlaku) bekerja bersama?
python
virtualenv
virtualenvwrapper
pyenv
kebenaran1
sumber
sumber
pyenv
bingung denganpyvenv
Jawaban:
Pyenv dan virtualenv adalah alat yang sangat berbeda yang bekerja dengan cara berbeda untuk melakukan hal yang berbeda:
Pyenv adalah ekstensi bash - tidak akan berfungsi di Windows - yang memotong panggilan Anda ke python, pip, dll., Untuk mengarahkan mereka ke salah satu dari beberapa rantai alat sistem python. Jadi Anda selalu memiliki semua pustaka yang telah Anda instal dalam versi python yang dipilih tersedia - karena itu baik untuk pengguna yang harus beralih di antara versi python yang berbeda.
VirtualEnv , adalah python murni sehingga bekerja di mana-mana, itu membuat salinan, opsional versi tertentu, python dan pip lokal ke lingkungan aktif yang mungkin atau mungkin tidak termasuk tautan ke rantai-alat sistem saat ini, jika tidak Anda bisa instal subset perpustakaan yang diketahui ke dalam lingkungan itu. Karena itu hampir pasti jauh lebih baik untuk pengujian dan penyebaran karena Anda tahu persis perpustakaan mana, di mana versi, digunakan dan perubahan global tidak akan berdampak pada modul Anda.
venv python> 3.3
Perhatikan bahwa dari Python 3.3 dan seterusnya ada implementasi built-in dari VirtualEnv yang disebut venv (dengan, pada beberapa instalasi, pembungkus yang disebut pyvenv - pembungkus ini sudah tidak digunakan lagi dalam Python 3.6 ), yang mungkin harus digunakan sebagai preferensi. Untuk menghindari kemungkinan masalah dengan pembungkus, sering kali merupakan ide yang baik untuk menggunakannya secara langsung dengan menggunakan
/path/to/python3 -m venv desired/env/path
atau Anda dapat menggunakanpy
pemilih python yang luar biasa pada Windowspy -3 -m venv desired/env/path
. Itu akan membuat direktori yang ditentukan dengandesired/env/path
configure dan mengisi itu dengan tepat. Secara umum sangat mirip dengan menggunakan VirtualEnv.Alat tambahan
Ada sejumlah alat yang perlu disebutkan, dan dipertimbangkan, karena mereka dapat membantu dengan penggunaan satu atau lebih hal di atas:
sumber
venv
, sekarang di perpustakaan standar?virtualenv
memungkinkan Anda untuk membuat instalasi Python khusus misalnya dalam subdirektori proyek Anda. Setiap proyek Anda dengan demikian dapat memiliki sendiripython
(atau bahkan beberapa) di bawah virtualenv masing-masing. Tidak masalah bagi beberapa / semua virtualenvs untuk bahkan memiliki versi yang samapython
(misalnya 2.7.16) tanpa konflik - mereka hidup secara terpisah dan tidak saling mengenal. Jika Anda ingin menggunakan salah satu daripython
itu, Anda harus melakukannyaactivate
(dengan menjalankan skrip yang akan sementara memodifikasi AndaPATH
untuk memastikan bahwabin/
direktori virtualenv yang lebih dulu). Dari titik itu, panggilanpython
(ataupip
dll.) Akan memanggil versi virtualenv sampai Andadeactivate
(yang mengembalikanPATH
).pyenv
beroperasi pada skala yang lebih luas daripadavirtualenv
- ia menyimpan daftar instalasi Python (dan dapat digunakan untuk menginstal yang baru) dan memungkinkan Anda untuk mengonfigurasi versi Python mana yang akan dijalankan ketika Anda menggunakanpython
perintah. Kedengarannya mirip tetapi penggunaan praktis agak berbeda. Ia bekerja dengan menambahkanpython
skrip shim ke AndaPATH
(secara permanen) dan kemudian memutuskan mana yang "nyata"python
untuk dipanggil. Anda bahkan dapat mengkonfigurasi pyenv untuk memanggil salah satu python virtualenv Anda (dengan menggunakanpyenv-virtualenv
plugin). Versi Python yang Anda instal menggunakanpyenv
go ke$(pyenv root)/versions/
direktori (secara default, root pyenv adalah ~ / .pyenv) jadi lebih 'global' daripada virtualenv. Biasanya, Anda tidak dapat menduplikasi versi Python yang diinstal melaluipyenv
, setidaknya melakukannya bukan ide utama.Untuk membuat virtualenv dengan versi Python tertentu, Anda perlu memiliki versi itu di suatu tempat di sistem Anda (apakah itu pada
PATH
atau tidak) dan pada dasarnya mengkloningnya ke dalam virtualenv yang baru dibuat. Tentu saja, salah satu cara untuk mendapatkan versi tertentu adalah menginstalnya melaluipyenv
. Setelah selesai, masing-masing virtualvv bebas untuk menyimpang dengan memasang modul (atau versi) yang berbeda ke dalamnya.Pendeknya:
virtualenv
memungkinkan Anda untuk membuat instalasi python lokal dan independen dengan mengkloning dari yang sudah adapyenv
memungkinkan Anda untuk menginstal berbagai versi python secara bersamaan (baik di seluruh sistem atau hanya untuk pengguna lokal) dan kemudian memilih yang mana dari banyak ular sanca untuk dijalankan pada waktu tertentu (termasuk yang dibuat oleh virtualenv atau Anaconda)sumber