19 puan yazan GN⁺ 2024-03-26 | 7 yorum | WhatsApp'ta paylaş
  • Birden fazla Python sürümü arasında kolayca geçiş yapmayı sağlar
  • Basit, göze batmayan ve iyi çalışan tek amaçlı geleneksel UNIX araçları yaklaşımını izler
  • Bu proje, rbenv ve ruby-build'den çatallanmış ve Python'a uyarlanmıştır

pyenv ne yapar

  • Kullanıcı bazında genel Python sürümünü değiştirebilir.
  • Proje bazında Python sürümü desteği sunar.
  • Ortam değişkenleri kullanarak Python sürümünü geçersiz kılabilir.
  • Aynı anda birden fazla Python komut sürümünde arama yapabilir. Bu, tox kullanarak Python sürümleri arasında test yapmak için yararlıdır.

pyenv ne yapmaz...

  • Python'un kendisine bağımlı değildir. pyenv saf shell script ile yazılmıştır.
  • Shell'e yüklenmek zorunda değildir. Bunun yerine, PATH içine bir dizin ekleyen shim yaklaşımını kullanır.
  • virtualenv yönetmez. Elbette kullanıcı doğrudan virtualenv oluşturabilir veya bunu otomatikleştirmek için pyenv-virtualenv kullanabilir.

Nasıl çalışır

  • pyenv, PATH içine enjekte edilen shim çalıştırılabilir dosyalarını kullanarak Python komutlarını yakalar, uygulamanın belirttiği Python sürümünü belirler ve ardından komutu ilgili Python kurulumuna iletir.

PATH'i anlamak

  • python veya pip gibi bir komutu çalıştırdığınızda, işletim sistemi PATH ortam değişkenindeki dizinler listesinde bu adda bir çalıştırılabilir dosya arar.

Shim'leri anlamak

  • pyenv, PATH'in en başına shims dizinini ekler. rehashing süreci sayesinde, kurulu tüm Python sürümlerindeki tüm Python komutları için shim'leri korur.

Python sürümü seçimini anlamak

  • Bir shim çalıştırıldığında pyenv, kullanacağı Python sürümünü aşağıdaki kaynaklardan şu sırayla okur:
    1. PYENV_VERSION ortam değişkeni (belirlenmişse).
    2. Geçerli dizindeki uygulamaya özel .python-version dosyası (varsa).
    3. Dosya sisteminin köküne ulaşana kadar her üst dizin aranarak bulunan ilk .python-version dosyası (varsa).
    4. Genel $(pyenv root)/version dosyası.

Pyenv'in sağladığı Python kurulumunun yerini bulmak

  • pyenv, belirlediği Python sürümüne göre komutu ilgili Python kurulumuna iletir.
  • Her Python sürümü $(pyenv root)/versions altında kendi dizinine kurulur.

Kullanım

Ek Python sürümleri kurma

  • pyenv install kullanarak ek Python sürümleri kurabilirsiniz.

En son sürümü otomatik çözümleme

  • uninstall dışındaki tüm Pyenv alt komutları, tam önekleri otomatik olarak en son sürüme çözümler.

Genişletilmiş destekli Python sürümleri

  • Belirli ortamlarda destek eklemek için kullanıcı tarafından sağlanan yamaların uygulandığı Python sürümleri vardır.

Python sürümleri arasında geçiş yapma

  • Pyenv'in kurduğu Python'u kullanmak için aşağıdaki komutlardan birini çalıştırın:
    • pyenv shell
    • pyenv local
    • pyenv global

Python sürümünü kaldırma

  • Zamanla $(pyenv root)/versions dizininde Python sürümleri birikir.
  • Eski Python sürümlerini kaldırmak için pyenv uninstall kullanın.

Diğer işlemler

  • Mevcut tüm alt komutların listesini görmek için pyenv commands çalıştırın.

pyenv'i kaldırma

  • Pyenv'i geçici olarak devre dışı bırakmak veya sistemden kaldırmak kolaydır.

Pyenv eklentileri

  • Eklentiler kullanarak Pyenv'in işlevlerini basit, esnek ve bakımı kolay bir şekilde genişletebilir ve özelleştirebilirsiniz.

Gelişmiş yapılandırma

  • Pyenv'in davranışını kontrol eden ortam değişkenleri vardır.

Geliştirme

  • Pyenv kaynak kodu GitHub'da barındırılır.
  • Testler Bats kullanılarak çalıştırılır.

GN⁺ görüşü

  • pyenv, farklı Python sürümlerini yönetmek için oldukça yararlı bir araçtır. Özellikle birden fazla projede farklı Python sürümleri kullanması gereken geliştiriciler için faydalıdır.
  • Araç, Python'un kendisine bağımlı olmadan saf shell script olarak yazıldığı için, Python'un kurulu olmadığı sistemlerde bile kurulup yönetilebilir.
  • pyenv, virtualenv'i doğrudan yönetmez; ancak pyenv-virtualenv eklentisi üzerinden virtualenv yönetimini otomatikleştirebildiği için kullanışlıdır.
  • Kurulum ve kullanım görece basit olduğundan, Python sürüm yönetimine ihtiyaç duyan başlangıç seviyesindeki yazılım mühendisleri için de erişilebilirdir.
  • pyenv'e benzer işlevler sunan diğer araçlardan biri conda'dır; özellikle veri bilimi ve makine öğrenmesi alanlarında yaygın olarak kullanılır. conda, paket yönetimi ile ortam yönetimini birlikte sunduğu için bu tür işlevlere ihtiyaç duyan kullanıcılara önerilebilir.
  • pyenv'i devreye alırken, sistemde birden fazla Python sürümü kuruluysa yol çakışmalarını önlemek için dikkatli olmak gerekir. pyenv'in sağladığı avantaj sürüm yönetimini kolaylaştırmasıdır; ancak hatalı yapılandırma sistemin varsayılan Python yolunu bozabilir.

7 yorum

 
koxel 2024-03-26

conda konusunda dikkatli olun; belirli bir ölçeğin üzerindeki şirketlerde
ücretlidir.
Şirket küçük olsa bile, ana yüklenicinin ölçeği büyükse teslim etmek zorlaşır.

 
koxel 2024-03-26

Conda'nın kendisi BSD lisansıyla ücretsizdir ama depo ve paket lisanslarını dikkatle kontrol etmeniz gerekir.

 
tujuc 2024-03-26

asdf’yi en üstte ayarlayıp https://asdf-vm.com/

Proje bazında da local olarak yapılandırdığım oluyor, container da kullanıyorum...

Yeni ortam kurma + yönetme için çok fazla şey çıktığı için pek kullanmıyorum galiba.. hahaha

 
sngwn 2024-03-26

Ben de tam olarak öyle kullanıyorum.
Haha, bana kalırsa pyenv biraz demode kalmış gibi geliyor.

 
joyfui 2024-03-26

rbenv, pyenv, nodenv gibi şeyler sürekli ortaya çıkınca, sonunda anyenv diye bir şey de çıktı. haha
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Hacker News görüşleri
  • pyenv kullanımıyla ilgili uyarı

    • pyenv'nin büyük bir dezavantajı, Python'u kullanıcının makinesinde derlemesidir.
    • Bu durumda ortaya çıkabilecek çok fazla başarısızlık senaryosu vardır.
    • pyenv, yeni başlayanların Python paketleme sorunlarını çözmesi için bir araç değil, yapılandırmayı standartlaştırmak için uzmanlara yönelik bir araçtır.
    • Kullanıcılar çoğu zaman pyenv'nin yol açtığı sorunları yaşıyor, ancak bunun farkında olmuyor.
  • Python programcılarının çektiği sıkıntılar

    • Python programcılarının yaşadığı gereksiz zorluklar şaşırtıcıdır.
    • Python'un birden fazla sürümünü kurmak zorunda olmak mantıksızdır.
    • Python programlarının her yerde çalıştığı fikri pratik değildir.
    • Her şey kırılgandır; doğru dil sürümü olmadan çalışmaz.
    • Bağımlılık sorunları o kadar ciddidir ki paket yöneticisinin yöneticisine ihtiyaç duyulan bir durum ortaya çıkar.
  • Python programlarını kararlı tutan araçlar

    • Python programlarının ilk yazıldıkları zamanki gibi çalışmasını garanti etmeye yarayan araçların listesi.
    • requirements.txt, pip, pipenv, pyenv, virtualenv gibi çeşitli araçlar vardır.
  • Mise aracı tanıtımı

    • Rust ile yazılmış Mise, asdf'ye benzer ama daha hızlıdır ve varsayılan olarak shim kullanmaz.
    • Runtime'ları paralel olarak kurar ve gerekli eklentileri indirir.
    • asdf veya pyenv'den daha iyi bir araç olarak kullanılabilir.
  • ASDF'nin avantajları

    • ASDF, yalnızca Python'u değil Rust, Go, Node gibi birçok dili ve çeşitli araçları da destekler.
  • pyenv kullanım deneyimi paylaşımı

    • pyenv kullanımının başında sorun yoktu, ancak birden fazla Python sürümü kurduktan sonra problemler ortaya çıktı.
    • pyenv yerine Python'u python.org'dan indirip sanal ortamları python<version> -m venv /my/virtual/env ile yönetmek daha kararlıdır.
  • Kişisel Python yönetim yığını

    • Python sürümleri pyenv ile yönetiliyor, her proje için venv kullanılarak yeni bir sanal ortam oluşturuluyor.
    • Proje başlatma ve bağımlılık yönetimi için Poetry kullanılıyor.
    • Dropbox kullanılıyorsa .venv klasörü yok sayma listesine ekleniyor.
    • Pyenv, Ubuntu için gereken tüm bağımlılıklar toplandıktan sonra iyi çalışıyor.
  • Mise ile runtime bağımlılıklarını yönetme

    • Python, Node, Ruby, Terraform ve çoğu runtime bağımlılığını aynı şekilde ele almak için mise kullanılıyor.
    • Python sanal ortamları da etkinleştirilebiliyor.
  • macOS iş akışı paylaşımı

    • Gerekli Python ikilileri python.org'dan indiriliyor ve virtualenv ile sanal ortam kuruluyor.
    • Proje yönetimi için pyproject.toml ve pip-compile kullanılıyor.
    • Python proje yönetimi alanında çok fazla değişiklik oldu, ancak bu iş akışıyla bunların hepsi görmezden gelinebildi.
 
edunga1 2024-03-26

Bu durumda ortaya çıkabilecek çok fazla başarısızlık modu var.

Sanırım burası gerçekten çok can yakan nokta.