Python virtualenv dan venv lakukan dan tidak boleh dilakukan

Salah satu daya tarik terbesar Python adalah ekosistem paket pihak ketiga yang luas. Jika ada tugas yang ingin Anda lakukan — konversi format file, scraping dan restrukturisasi halaman web, regresi linier, sebut saja — kemungkinan besar satu atau lebih paket dalam Python Package Index akan memenuhi kebutuhan Anda.

Bagian tersulitnya adalah mengelola akumulasi paket dalam instalasi Python yang diberikan. Terlalu mudah untuk menginstal lusinan paket tanpa berpikir dan pada akhirnya berakhir dengan lingkungan Python yang penuh dengan konflik antara versi alat yang lebih lama dan yang lebih baru, membuat pekerjaan lebih sulit daripada yang seharusnya.

Python hadir dengan sistem otomatis untuk menjaga set paket lokal ke proyek Python tertentu. Lingkungan virtual — milik virtualenvalat di Python 2 dan venvPython 3 — dapat digunakan untuk membuat instance runtime Python yang terpisah dan terisolasi untuk sebuah proyek, dengan pelengkap paketnya sendiri.

Dalam artikel ini, kita akan membahas beberapa kesalahan umum yang dibuat orang — dan membuat mereka menyerah — saat bekerja dengan lingkungan virtual dengan Python. 

Gunakan lingkungan virtual Python 

Kesalahan umum pertama Python programmer membuat dengan virtualenvatau  venvadalah untuk tidak repot-repot dengan itu. Jika semua yang Anda lakukan adalah menyatukan skrip cepat-dan-kotor untuk melakukan satu hal kecil , mengapa repot-repot menyiapkan lingkungan virtual?

Masalahnya adalah, “satu hal kecil” itu sering kali ternyata jauh lebih banyak. Saat penguasaan Python Anda tumbuh, Anda pasti akan menarik lebih banyak modul pihak ketiga untuk menyelesaikan pekerjaan yang lebih canggih. Terlebih lagi, Anda akan merasa semakin sulit untuk menangani ketergantungan pada versi paket sebelumnya, salah satu masalah utama yang diciptakan oleh lingkungan virtual untuk diselesaikan.

Beberapa orang juga mengernyit saat menggunakan virtualenvatau  venvkarena setiap lingkungan virtual adalah salinan kecilnya sendiri dari runtime Python, yang memakan waktu sekitar 25MB. Tapi ruang disk sangat murah akhir-akhir ini, dan menghapus lingkungan virtual semudah menghapus direktorinya (tanpa efek samping). Selain itu, jika Anda memiliki banyak tugas yang berbagi sekumpulan paket yang sama, Anda selalu dapat menggunakan lingkungan virtual yang sama untuk keduanya.

Gunakan virtualenvwrapper untuk mengelola lingkungan virtual Python

Salah satu cara untuk membuat lingkungan virtual tidak terlalu memberatkan adalah dengan menggunakan  virtualenvwrapper. Alat ini memungkinkan Anda untuk mengelola semua lingkungan virtual di ruang kerja Anda dari satu aplikasi baris perintah pusat.

Sebuah nasihat tentang pembuatan lingkungan virtual: Jangan beri nama direktori lingkungan virtual Anda  venv—atau, dalam hal ini, nama paket lain yang ingin Anda gunakan di lingkungan virtual. Ini dapat memiliki efek tak terduga pada impor nanti. Gunakan nama yang mendeskripsikan proyek Anda dengan jelas.

Jangan letakkan file proyek di dalam lingkungan virtual Python

Saat Anda menyiapkan lingkungan virtual, direktori tempatnya berada tidak dimaksudkan untuk menampung apa pun kecuali lingkungan virtual itu sendiri. Proyek Anda termasuk dalam pohon direktorinya sendiri yang terpisah. Ada banyak alasan bagus untuk ini:

  • Pohon direktori proyek Anda mungkin memiliki konvensi penamaan yang bertabrakan dengan elemen lingkungan virtual.
  • Cara mudah untuk menghapus lingkungan virtual adalah dengan menghapus direktori. Menggabungkan file proyek dengan lingkungan virtual berarti Anda harus menguraikan keduanya terlebih dahulu.
  • Beberapa proyek dapat menggunakan lingkungan virtual yang sama.

Salah satu cara untuk mengatur berbagai hal adalah dengan membuat direktori tingkat atas yang menampung berbagai lingkungan virtual, dan direktori tingkat atas lainnya yang menampung proyek. Selama keduanya tetap terpisah, itulah yang penting.

Jangan lupa untuk mengaktifkan lingkungan virtual Python Anda 

Kesalahan umum lainnya yang dilakukan orang dengan lingkungan virtual adalah lupa mengaktifkannya, atau tidak mengaktifkan yang benar.

Sebelum lingkungan virtual dapat digunakan dalam sesi shell tertentu, itu harus diaktifkan , melalui skrip yang dinamai activatedalam Scriptsdirektori lingkungan virtual . Setelah aktivasi, lingkungan virtual diperlakukan sebagai instance Python default sampai Anda menonaktifkannya (dengan menjalankan deactivateperintah).

Sangat mudah untuk melupakan langkah ini pada awalnya, baik karena ini merupakan kebiasaan yang perlu diperoleh dan karena skrip aktivasi berada satu tingkat di bawah direktori lingkungan virtual. Beberapa trik berguna di sini:

  1. Buat pintasan ke skrip aktivasi / deaktivasi di direktori root proyek Anda. Anda dapat menamai pintasan tersebut dengan sesuatu yang sederhana actdan deactagar tidak terlalu menjengkelkan untuk diketik.
  2. Untuk proyek yang Anda kerjakan dari IDE dan bukan baris perintah, buat peluncur proyek — file batch atau skrip shell — untuk aplikasi Python yang dimaksud. Ini memungkinkan Anda memanggil skrip aktivasi, lalu menjalankan skrip Anda sendiri sesudahnya. Anda biasanya tidak perlu menonaktifkan lingkungan skrip setelah dijalankan, karena sesi akan berhenti dengan sendirinya.

Trik terakhir ini menggarisbawahi poin penting tentang aktivasi lingkungan virtual: Mereka hanya berlaku untuk sesi lingkungan tempat mereka menjalankannya. Misalnya, jika Anda meluncurkan dua sesi baris perintah dan mengaktifkan lingkungan virtual dalam satu, sesi baris perintah lainnya akan menggunakan instalasi Python default sistem, bukan lingkungan virtual. Anda tidak mengaktifkan lingkungan virtual untuk sistem secara keseluruhan , tetapi hanya untuk sesi tertentu.

Jangan gunakan  >=untuk pemasangan pin versi paket di lingkungan virtual Python

Tip ini juga berguna di luar lingkungan virtual. Saat Anda memiliki aplikasi dengan requirements.txtfile, Anda harus menentukan paket dengan nomor versi yang tepat . Katakan mypackage==2.2tidak mypackage>=2.2.

Inilah alasannya. Salah satu alasan utama untuk menggunakan lingkungan virtual adalah untuk memastikan penggunaan versi paket tertentu. Jika Anda menggunakan >=alih-alih menggunakan ==, tidak ada jaminan Anda — atau orang lain — akan mendapatkan versi yang sama jika lingkungan perlu dibuat ulang untuk proyek itu. Gunakan nomor versi yang tepat. Anda, masa depan Anda, dan siapa pun yang datang setelah Anda akan berterima kasih.