19 poin oleh GN⁺ 2024-03-26 | 7 komentar | Bagikan ke WhatsApp
  • Memungkinkan Anda beralih dengan mudah di antara beberapa versi Python
  • Mengikuti tradisi alat UNIX dengan tujuan tunggal yang sederhana, tidak mencolok, dan bekerja dengan baik
  • Proyek ini di-fork dari rbenv dan ruby-build lalu dimodifikasi agar sesuai untuk Python

Apa yang dilakukan pyenv

  • Memungkinkan perubahan versi Python global per pengguna.
  • Mendukung versi Python per proyek.
  • Memungkinkan override versi Python menggunakan variabel lingkungan.
  • Dapat mencari beberapa versi perintah Python sekaligus. Berguna untuk pengujian lintas versi Python dengan tox.

Apa yang tidak dilakukan pyenv...

  • Tidak bergantung pada Python itu sendiri. pyenv dibuat sebagai skrip shell murni.
  • Tidak perlu dimuat ke dalam shell. Sebagai gantinya, pyenv menggunakan pendekatan shim dengan menambahkan direktori ke PATH.
  • Tidak mengelola virtualenv. Tentu saja, pengguna dapat membuat virtualenv sendiri atau mengotomatiskannya dengan pyenv-virtualenv.

Cara kerjanya

  • pyenv mencegat perintah Python menggunakan executable shim yang disisipkan ke PATH, menentukan versi Python yang ditetapkan aplikasi, lalu meneruskan perintah ke instalasi Python tersebut.

Memahami PATH

  • Saat Anda menjalankan perintah seperti python atau pip, sistem operasi akan mencari executable dengan nama tersebut dalam daftar direktori pada variabel lingkungan PATH.

Memahami Shims

  • pyenv menyisipkan direktori shims di bagian paling depan PATH. Melalui proses rehashing, pyenv mempertahankan shim untuk semua perintah Python dari semua versi Python yang terinstal.

Memahami pemilihan versi Python

  • Saat sebuah shim dijalankan, pyenv membaca dan menggunakan versi Python dari sumber berikut secara berurutan:
    1. Variabel lingkungan PYENV_VERSION (jika ditentukan).
    2. File .python-version khusus aplikasi di direktori saat ini (jika ada).
    3. File .python-version pertama yang ditemukan dengan menelusuri setiap direktori induk hingga mencapai root sistem file (jika ada).
    4. File global $(pyenv root)/version.

Menemukan lokasi instalasi Python yang disediakan pyenv

  • pyenv meneruskan perintah ke instalasi Python sesuai versi Python yang telah ditentukannya.
  • Setiap versi Python diinstal dalam direktorinya sendiri di bawah $(pyenv root)/versions.

Cara penggunaan

Menginstal versi Python tambahan

  • Gunakan pyenv install untuk memasang versi Python tambahan.

Penyelesaian otomatis ke versi terbaru

  • Semua subperintah Pyenv, kecuali uninstall, otomatis menyelesaikan seluruh prefiks ke versi terbaru.

Versi Python dengan dukungan ekstensi

  • Ada rilis Python yang menerapkan patch buatan pengguna untuk menambahkan dukungan pada lingkungan tertentu.

Berpindah antar versi Python

  • Untuk menggunakan Python yang diinstal oleh Pyenv, jalankan salah satu perintah berikut:
    • pyenv shell
    • pyenv local
    • pyenv global

Menghapus versi Python

  • Seiring waktu, versi-versi Python akan menumpuk di direktori $(pyenv root)/versions.
  • Untuk menghapus versi Python lama, gunakan pyenv uninstall .

Tugas lainnya

  • Untuk melihat daftar semua subperintah yang tersedia, jalankan pyenv commands.

Menghapus pyenv

  • Mudah untuk menonaktifkan Pyenv sementara atau menghapusnya dari sistem.

Plugin Pyenv

  • Dengan plugin, Anda dapat memperluas dan menyesuaikan fungsi Pyenv dengan cara yang sederhana, fleksibel, dan mudah dirawat.

Konfigurasi lanjutan

  • Ada variabel lingkungan yang mengendalikan perilaku Pyenv.

Pengembangan

  • Kode sumber Pyenv di-host di GitHub.
  • Pengujian dijalankan menggunakan Bats.

Opini GN⁺

  • pyenv adalah alat yang sangat berguna untuk mengelola berbagai versi Python. Terutama membantu bagi pengembang yang harus menggunakan versi Python berbeda di beberapa proyek.
  • Alat ini tidak bergantung pada Python itu sendiri dan disusun sebagai skrip shell murni, sehingga dapat diinstal dan dikelola bahkan pada sistem yang belum memasang Python.
  • pyenv tidak mengelola virtualenv secara langsung, tetapi praktis karena dapat mengotomatiskan pengelolaan virtualenv melalui plugin pyenv-virtualenv.
  • Karena instalasi dan cara pakainya relatif sederhana, insinyur perangkat lunak pemula yang membutuhkan pengelolaan versi Python pun dapat menggunakannya dengan mudah.
  • Alat lain yang menyediakan fungsi serupa dengan pyenv adalah conda, yang banyak digunakan khususnya di bidang data science dan machine learning. Karena conda menyediakan manajemen paket dan manajemen lingkungan sekaligus, alat ini dapat direkomendasikan kepada pengguna yang membutuhkan fungsi tersebut.
  • Saat mengadopsi pyenv, perlu berhati-hati agar tidak terjadi konflik jalur jika beberapa versi Python terpasang di sistem. Keuntungan utama menggunakan pyenv adalah kemudahan manajemen versi, tetapi konfigurasi yang salah dapat mengganggu jalur Python default sistem.

7 komentar

 
koxel 2024-03-26

Untuk conda, perlu diperhatikan bahwa di perusahaan dengan skala tertentu
berbayar.
Meski perusahaannya kecil, kalau skala klien utamanya besar, jadi serba sulit untuk memasoknya

 
koxel 2024-03-26

Conda sendiri gratis dengan lisensi BSD, tetapi pastikan untuk benar-benar memeriksa lisensi repositori dan paketnya.

 
tujuc 2024-03-26

Saya menaruh asdf di level paling atas https://asdf-vm.com/

Lalu untuk tiap proyek kadang dikonfigurasi secara local, kadang juga memakai container...

Karena sekarang sudah banyak cara baru untuk menyusun + me-manage environment, saya jadi jarang memakainya juga sih.. hahaha

 
sngwn 2024-03-26

Saya juga memakainya persis seperti itu.
Haha, secara pribadi saya merasa pyenv agak terasa jadul.

 
joyfui 2024-03-26

Karena hal-hal seperti rbenv, pyenv, nodenv terus bermunculan, pada akhirnya muncul juga yang namanya anyenv. haha
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Opini Hacker News
  • Peringatan tentang penggunaan pyenv

    • pyenv memiliki kelemahan besar karena mengompilasi Python di mesin pengguna.
    • Ada sangat banyak mode kegagalan yang bisa muncul dalam situasi ini.
    • pyenv bukan alat untuk pemula dalam menyelesaikan masalah packaging Python, melainkan alat untuk para ahli guna menstandarkan konfigurasi.
    • Banyak pengguna mengalami masalah akibat pyenv, tetapi sering kali tidak menyadarinya.
  • Penderitaan programmer Python

    • Ada rasa heran terhadap kesulitan tidak perlu yang dialami programmer Python.
    • Harus memasang beberapa versi Python terasa tidak rasional.
    • Konsep bahwa program Python bisa berjalan di mana saja tidaklah praktis.
    • Semuanya rapuh sehingga tidak bisa berjalan tanpa versi bahasa yang tepat.
    • Masalah dependensi sangat serius sampai terasa perlu manajer untuk manajer paket.
  • Alat untuk menjaga program Python tetap stabil

    • Daftar alat yang menjamin program Python tetap berjalan sama seperti saat pertama kali ditulis.
    • Ada berbagai alat seperti requirements.txt, pip, pipenv, pyenv, virtualenv, dan lainnya.
  • Pengenalan alat Mise

    • Mise yang ditulis dengan Rust mirip seperti asdf, tetapi lebih cepat dan secara default tidak memakai shims.
    • Ia memasang runtime secara paralel dan mengunduh plugin yang dibutuhkan.
    • Ini bisa digunakan sebagai alat yang lebih baik daripada asdf atau pyenv.
  • Kelebihan ASDF

    • ASDF mendukung bukan hanya Python, tetapi juga berbagai bahasa dan alat lain seperti Rust, Go, dan Node.
  • Berbagi pengalaman menggunakan pyenv

    • Pada awal penggunaan pyenv tidak ada masalah, tetapi setelah memasang beberapa versi Python, masalah mulai muncul.
    • Daripada pyenv, lebih stabil mengunduh Python dari python.org dan mengelola lingkungan virtual dengan python<version> -m venv /my/virtual/env.
  • Stack pribadi untuk mengelola Python

    • Mengelola versi Python dengan pyenv, lalu membuat lingkungan virtual baru untuk tiap proyek menggunakan venv.
    • Inisialisasi proyek dan pengelolaan dependensi dilakukan dengan Poetry.
    • Jika menggunakan Dropbox, tambahkan folder .venv ke daftar pengecualian.
    • Pyenv bekerja dengan baik di Ubuntu setelah semua dependensi yang diperlukan dikumpulkan.
  • Mengelola dependensi runtime dengan Mise

    • Menggunakan mise untuk menangani sebagian besar dependensi runtime seperti Python, Node, Ruby, dan Terraform dengan cara yang sama.
    • Lingkungan virtual Python juga bisa diaktifkan.
  • Berbagi workflow macOS

    • Mengunduh biner Python yang diperlukan dari python.org, lalu menyiapkan lingkungan virtual dengan virtualenv.
    • Mengelola proyek dengan pyproject.toml dan pip-compile.
    • Ada banyak perubahan di ruang pengelolaan proyek Python, tetapi workflow ini memungkinkan semuanya diabaikan.
 
edunga1 2024-03-26

Ada sangat banyak mode kegagalan yang bisa terjadi dalam situasi ini.

Sepertinya di sinilah letak bagian yang paling menyakitkan.