Python 3.3 termasuk dalam pustaka standar paket baru venv
. Apa fungsinya, dan apa bedanya dengan semua paket lain yang sepertinya cocok dengan regex (py)?(v|virtual|pip)?env
?
1026
Python 3.3 termasuk dalam pustaka standar paket baru venv
. Apa fungsinya, dan apa bedanya dengan semua paket lain yang sepertinya cocok dengan regex (py)?(v|virtual|pip)?env
?
virtualenv
danpyenv
tidak melakukan fungsi yang sama, dan bukan merupakan alternatif satu sama lain. Lihat jawaban saya.Jawaban:
Paket PyPI tidak di perpustakaan standar:
virtualenv
adalah alat yang sangat populer yang menciptakan lingkungan Python terisolasi untuk pustaka Python. Jika Anda tidak terbiasa dengan alat ini, saya sangat merekomendasikan mempelajarinya, karena ini adalah alat yang sangat berguna, dan saya akan membuat perbandingan untuk itu untuk sisa jawaban ini.Ini bekerja dengan menginstal banyak file dalam direktori (misalnya:)
env/
, dan kemudian memodifikasiPATH
variabel lingkungan untuk mengawali denganbin
direktori khusus (misalnya:)env/bin/
. Salinanpython
ataupython3
biner yang tepat ditempatkan di direktori ini, tetapi Python diprogram untuk mencari perpustakaan relatif terhadap jalurnya terlebih dahulu, di direktori lingkungan. Ini bukan bagian dari perpustakaan standar Python, tetapi secara resmi diberkati oleh PyPA (Python Packaging Authority). Setelah diaktifkan, Anda dapat menginstal paket di lingkungan virtual menggunakanpip
.pyenv
digunakan untuk mengisolasi versi Python. Misalnya, Anda mungkin ingin menguji kode Anda terhadap Python 2.7, 3.6, 3.7 dan 3.8, jadi Anda perlu cara untuk beralih di antara mereka. Setelah diaktifkan, ia mengawaliPATH
variabel lingkungan dengan~/.pyenv/shims
, di mana ada file khusus yang cocok dengan perintah Python (python
,pip
). Ini bukan salinan dari perintah yang dikirimkan oleh Python; mereka adalah skrip khusus yang memutuskan versi Python mana yang akan dijalankan berdasarkanPYENV_VERSION
variabel lingkungan, atau.python-version
file, atau~/.pyenv/version
file.pyenv
juga membuat proses mengunduh dan menginstal beberapa versi Python lebih mudah, menggunakan perintahpyenv install
.pyenv-virtualenv
adalah plugin untukpyenv
oleh penulis yang sama denganpyenv
, untuk memungkinkan Anda menggunakanpyenv
danvirtualenv
pada saat yang sama dengan nyaman. Namun, jika Anda menggunakan Python 3.3 atau lebih baru,pyenv-virtualenv
akan mencoba menjalankannyapython -m venv
jika tersedia, alih-alihvirtualenv
. Anda dapat menggunakanvirtualenv
danpyenv
bersama-sama tanpapyenv-virtualenv
, jika Anda tidak menginginkan fitur kenyamanan.virtualenvwrapper
adalah serangkaian ekstensi untukvirtualenv
(lihat dokumen ). Ini memberi Anda perintah sepertimkvirtualenv
,lssitepackages
, dan terutamaworkon
untuk beralih antara berbagaivirtualenv
direktori. Alat ini sangat berguna jika Anda menginginkan banyakvirtualenv
direktori.pyenv-virtualenvwrapper
adalah plugin untukpyenv
oleh penulis yang sama sepertipyenv
, untuk mudah mengintegrasikanvirtualenvwrapper
ke dalampyenv
.pipenv
bertujuan untuk menggabungkanPipfile
,pip
danvirtualenv
menjadi satu perintah pada command-line. Thevirtualenv
direktori biasanya akan ditempatkan di~/.local/share/virtualenvs/XXX
, denganXXX
menjadi hash dari jalur direktori proyek. Ini berbeda darivirtualenv
, di mana direktori biasanya di direktori kerja saat ini.pipenv
dimaksudkan untuk digunakan ketika mengembangkan aplikasi Python (sebagai lawan dari perpustakaan). Ada beberapa alternatifpipenv
, sepertipoetry
, yang tidak akan saya daftarkan di sini karena pertanyaan ini hanya tentang paket-paket yang namanya sama.Perpustakaan standar:
pyvenv
adalah skrip yang dikirimkan dengan Python 3 tetapi ditinggalkan dalam Python 3.6 karena memiliki masalah (belum lagi nama membingungkan). Dalam Python 3.6+, padanan yang tepat adalahpython3 -m venv
.venv
adalah paket yang dikirimkan dengan Python 3, yang dapat Anda jalankan menggunakanpython3 -m venv
(walaupun karena beberapa alasan beberapa distro memisahkannya menjadi paket distro yang terpisah, sepertipython3-venv
di Ubuntu / Debian). Ini melayani tujuan yang sama sepertivirtualenv
, tetapi hanya memiliki sebagian dari fitur-fiturnya ( lihat perbandingan di sini ).virtualenv
terus menjadi lebih populer daripadavenv
, terutama karena mantan mendukung Python 2 dan 3.Rekomendasi untuk pemula:
Ini adalah rekomendasi pribadi saya untuk pemula: mulai dengan belajar
virtualenv
danpip
, alat yang bekerja dengan Python 2 dan 3 dan dalam berbagai situasi, dan mengambil alat lain setelah Anda mulai membutuhkannya.sumber
venv
benar - benar menyelesaikan masalah itu?venv
Anda dapat memutakhirkan ke versi Python baru dengan lebih mudah.Saya hanya akan menghindari penggunaan
virtualenv
after Python3.3 + dan sebagai gantinya menggunakan pustaka yang dikirimkan standarvenv
. Untuk membuat lingkungan virtual baru, Anda harus mengetik:virtualenv
mencoba untuk menyalin biner Python ke direktori bin lingkungan virtual. Namun itu tidak memperbarui tautan file perpustakaan yang disematkan ke biner itu, jadi jika Anda membangun Python dari sumber ke direktori non-sistem dengan nama jalur relatif, biner Python rusak. Karena ini adalah cara Anda membuat salinan Python yang dapat didistribusikan, ini adalah kelemahan besar. BTW untuk memeriksa tautan file perpustakaan tertanam pada OS X, gunakanotool
. Misalnya dari dalam lingkungan virtual Anda, ketik:Akibatnya saya akan menghindari
virtualenvwrapper
danpipenv
.pyvenv
sudah ditinggalkan.pyenv
tampaknya sering digunakan di manavirtualenv
digunakan tetapi saya akan tinggal jauh dari itu juga karena saya pikirvenv
juga melakukan apapyenv
yang dibangun.venv
menciptakan lingkungan virtual di shell yang segar dan kotak pasir , dengan pustaka yang dapat diinstal pengguna , dan multi-python aman . Segar karena lingkungan virtual hanya dimulai dengan pustaka standar yang dikirimkan dengan python, Anda harus menginstal pustaka lain lagipip install
saat lingkungan virtual aktif. Di-sandbox karena tidak ada instalasi pustaka baru ini yang terlihat di luar lingkungan virtual, sehingga Anda dapat menghapus seluruh lingkungan dan memulai lagi tanpa khawatir akan memengaruhi pemasangan pangkalan python Anda. Pustaka yang dapat diinstal pengguna karena folder target lingkungan virtual dibuat tanpasudo
di beberapa direktori yang sudah Anda miliki, jadi Anda tidak perlusudo
izin untuk menginstal perpustakaan ke dalamnya. Akhirnya aman multi-python , karena ketika lingkungan virtual aktif, shell hanya melihat versi python (3.4, 3.5 dll) yang digunakan untuk membangun lingkungan virtual itu.pyenv
mirip denganvenv
yang memungkinkan Anda mengelola beberapa lingkungan python. Namun denganpyenv
Anda tidak dapat dengan mudah mengembalikan pemasangan pustaka ke beberapa keadaan awal dan Anda mungkin akan memerlukanadmin
hak di beberapa titik untuk memperbarui perpustakaan. Jadi saya pikir ini juga yang terbaik untuk digunakanvenv
.Dalam beberapa tahun terakhir saya telah menemukan banyak masalah dalam sistem build (paket emacs, pembangun aplikasi python mandiri, installer ...) yang akhirnya bermuara pada masalah
virtualenv
. Saya pikir python akan menjadi platform yang lebih baik ketika kita menghilangkan opsi tambahan ini dan hanya menggunakanvenv
.sumber
add2virtualenv
tweak AndaPYTHONPATH
dengan menambahkan_virtualenv_path_extensions.pth
file khusus di bawahsite-packages
. Atau Anda dapat memperbaruiPYTHONPATH
variabel lingkungan dalambin/activate
file yang Anda panggil setiap kali Anda mengaktifkan lingkungan virtual. Atau Anda dapat menambahkan symlinks di bawahsite-packages
untuk menunjuk ke direktori tambahan. Kedua alternatif ini lebih transparan ke alat baris perintah tradisional yang banyak digunakan para pengembang untuk memecahkan masalah. Penggunaan kebiasaan.pth
dengan nama tidak berdokumen, membuatnya tampak lebih ajaib IMO.PYTHONPATH
meniadakan kebutuhanadd2virtualenv
. Mengenai kurangnya bantuan pada SO dari komentar pertama Anda, satu-satunya saran saya adalah jawaban yang membenarkan jika mereka memperbaiki masalah Anda, untuk memotivasi orang untuk memecahkan masalah bagi Anda ketika Anda memposting? Setengah jam penyelidikan + penulisan sebagai ganti klik mouse? Kedengarannya seperti perdagangan yang bagus ...pyvenv
sudah usang, bukanpyenv
. Sangat mudah untuk bingung dengan nama-nama alat ini.Saya telah pergi ke
pipenv
lubang kelinci (ini lubang yang dalam dan gelap memang ... ) dan karena jawaban terakhir adalah lebih dari 2 tahun yang lalu , saya merasa sangat berguna untuk memperbarui diskusi dengan perkembangan terbaru tentang topik amplop virtual Python I sudah ditemukan.PENOLAKAN:
Jawaban ini BUKAN tentang melanjutkan debat mengamuk tentang manfaat pipenv versus venv sebagai solusi amplop - saya tidak mendukung keduanya . Ini tentang PyPA mendukung standar yang saling bertentangan dan bagaimana pengembangan virtualenv di masa depan berjanji untuk meniadakan pilihan salah satu atau keduanya. Saya fokus pada dua alat ini justru karena mereka adalah yang diurapi oleh PyPA .
venv
Sebagai catatan OP, venv adalah alat untuk lingkungan virtualisasi. BUKAN solusi pihak ketiga, tetapi alat asli. PyPA mendukung venv untuk membuat VIRTUAL ENVELOPES : " Diubah dalam versi 3.5: Penggunaan venv sekarang direkomendasikan untuk menciptakan lingkungan virtual ".
pipenv
pipenv - seperti venv - dapat digunakan untuk membuat amplop virtual tetapi juga manajemen paket roll-in danfungsionalitas pemeriksaan kerentanan . Alih-alih menggunakan
requirements.txt
,pipenv
memberikan manajemen paket melalui Pipfile . Sebagai PyPA mendukung pipenv untuk MANAJEMEN PAKET , yang tampaknya menyiratkanpipfile
adalah menggantikanrequirements.txt
.NAMUN : pipenv menggunakan virtualenv sebagai alatnya untuk membuat amplop virtual, BUKAN venv yang disahkan oleh PyPA sebagai alat bantu untuk membuat amplop virtual.
Standar yang bertentangan:
Jadi jika menyelesaikan solusi amplop virtual tidak cukup sulit, kami sekarang memiliki PyPA mendukung dua alat berbeda yang menggunakan solusi amplop virtual berbeda. Debat Github yang mengamuk tentang venv vs virtualenv yang menyoroti konflik ini dapat ditemukan di sini .
Resolusi konflik:
Debat Github yang dirujuk dalam tautan di atas telah mengarahkan pengembangan virtualenv ke arah mengakomodasi venv dalam rilis mendatang :
Kesimpulan:
Jadi sepertinya akan ada beberapa konvergensi di masa depan antara dua solusi amplop virtual saingan, tetapi sampai sekarang pipenv - yang menggunakan
virtualenv
- bervariasi secara material darivenv
.Mengingat masalah yang dipecahkan pipenv dan fakta bahwa PyPA telah memberikan restunya, ia tampaknya memiliki masa depan yang cerah. Dan jika virtualenv memenuhi tujuan pengembangan yang diusulkan, memilih solusi amplop virtual seharusnya tidak lagi menjadi kasus pipenv ATAU venv .
sumber
Pembaruan April 2020
Saya mencari yang sama ketika saya menemukan posting ini . Saya pikir ini masalah alat apa yang digunakan cukup membingungkan dan sulit bagi pengguna Python baru seperti saya. Ini langsung dari situs web PyPA mengenai pipenv:
sumber
pipenv
tim telah merilis 2 versi untuk PyPI:2020.5.28
dan baru-baru,2020.6.2
: pypi.org/project/pipenv/#history