Rye: Zahmetsiz Python Deneyimi
(rye.astral.sh)- Rye, Python kurulumu,
pyproject.tomlprojeleri, bağımlılıklar, virtualenv ve genel araç kurulumlarını tek bir yerde ele almayı amaçlayan bir proje ve paket yönetim aracıydı - Şu anda geliştirilmesi durduruldu ve aynı bakımcıların geliştirdiği halef proje uv'nin kullanılması öneriliyor
- Mevcut kullanıcılar uv migration guide'a bakarak geçiş yapabilir; Rye hâlâ indirilebilir, ancak artık başka bir güncelleme planı yok
- Güncellemelerin durması güvenlik güncellemelerini de kapsadığından, yeni projelerde veya uzun süreli bakım gerektiren ortamlarda uv'ye geçiş değerlendirilmeli
- Rye'ın hedeflediği birleşik Python deneyimi, karmaşık projeleri ve monorepo'ları da kapsıyordu, ancak bakım odağı uv'ye kaydı
Rye'ın mevcut durumu
-
Geliştirmenin durdurulması ve uv önerisi
- Tüm kullanıcılara uv kullanmaları öneriliyor
- uv, aynı bakımcıların geliştirdiği halef proje
- uv aktif olarak bakımı yapılan bir proje ve Rye'dan çok daha yaygın kullanılıyor
- Mevcut Rye kullanıcıları uv migration guide'a başvurabilir
- Rye kullanılmaya devam edilebilir, ancak ek güncelleme planı yok
- Güvenlik güncellemeleri de planlanmıyor
Rye'ın sunduğu özellikler
- Rye, Python için bir proje ve paket yönetimi çözümü
- Python kullanıcıları için hepsi bir arada bir araç olmayı hedefleyerek geliştirildi
- Tek bir birleşik deneyim içinde şu işleri ele alıyordu
- Python kurulum yönetimi
pyproject.tomltabanlı proje yönetimi- Bağımlılık yönetimi
- virtualenv yönetimi
- Genel araç kurulumu
- Karmaşık projeleri ve monorepo'ları ele alabilecek şekilde tasarlandı
- Tanıtım videosu Watch an introduction bağlantısından izlenebilir
2 yorum
Bir süredir, şunu bunu kullandıktan sonra
Introduction - PDM
kullanıyorum.
Sanırım Rye'ı da denemem gerekecek.
Hacker News yorumları
Temel paketleme geliştirmelerinin önemli bir kısmı artık uv üzerinde yapılıyor ve Rye da dahili olarak uv kullandığı için uv geliştikçe Rye da gelişiyor
Örneğin yakın zamanda uv'ye evrensel bağımlılık çözümleme eklendi; böylece yalnızca şu anda çalışan sistem için değil, tüm platformlar ve işletim sistemlerinde çalışan tek bir çözümleme sonucuyla kilitlenmiş bir
requirements.txtoluşturmak mümkün oldu ve en güncel Rye da bunu destekliyorhttps://github.com/astral-sh/uv
Rye ve uv geliştiriyorum, sorunuz varsa yanıtlayabilirim
https://github.com/python-poetry/poetry/issues/6409
https://news.ycombinator.com/item?id=39257501
Ekibimin geçişte tereddüt etmesinin nedenlerinden biri bu. ML işi yaptığımız için PyTorch tabanlı projeyi örnek verirsem, istediğimiz durum tüm bağımlılıkları
pyproject.tomliçinde tutup AArch64 Mac veya AMD64 Windows iş istasyonundan şu platform yapılandırmaları için kilit dosyaları üretebilmek: varsayılan MPS PyTorch kullanan Mac, CUDA PyTorch kullanan Windows, CPU PyTorch kullanan AArch64 Linux, CPU PyTorch kullanan AMD64 Linux, CUDA PyTorch kullanan AMD64 LinuxRuff'u yaptığınız için teşekkürler, hem linting hem formatting tarafında fazlasıyla memnunum
pyenv+venv+pipher zaman acı vericiydi, ama artık Rye'a geçtimŞimdi Rye'ı kur, GitHub'dan çek,
rye syncyaz, bittihttps://guac.sh/
https://pypi.org/project/sbom4python/ https://github.com/CycloneDX/cyclonedx-python
Yakın zamanda eklenen bağımlılık sabitlemesini kaldırma özelliği sayesinde geliştirme sırasında uyumluluğu korumaya teşvik edip, yeniden üretilebilirlik için doğru ve açık bir
requirements.txtüretebilmek mümkün; bu da zafiyet yönetimi ve SBOM aşamasını Poetry gibi araçlara göre çok daha kolay hale getiriyorBenzer nedenlerle https://hatch.pypa.io/latest/why/ kullanıyorum ve
uvile iyi uyum sağlaması da hoşuma gidiyorRye'da beni rahatsız eden şeylerden biri, standart dışı Python build'leri kullanımını güçlü biçimde teşvik etmesi
Felsefe sayfasında(https://rye.astral.sh/philosophy/) python.org'daki CPython build'lerinin tamamen yetersiz olduğu, platforma göre yalnızca
.msikurulum dosyası ya da sadece tarball bulunduğu ve çeşitli Python dağıtımlarının ciddi biçimde ayrışarak alt ekosistemde her türlü soruna yol açtığı anlatılıyor. Bu yüzden proje indygreg standalone build'lerini kullanıyor ve bir gün iyi yönetilen, güvenilir Python build'lerinin çıkıp bugünkü karmaşayı ortadan kaldırmasını umuyorBu indygreg build'leriyle ilgili bilgiler burada: https://gregoryszorc.com/docs/python-build-standalone/main/ ve başka Python sürümleri seçmek de mümkün: https://rye.astral.sh/guide/toolchains/
Ama ben onların sözünü ettiği sorunların neredeyse hiçbirini yaşamadım. python.org'dan indirilen resmi Python build'i de çalıştı, dağıtımın paket yöneticisiyle kurulan sıradan Python da çalıştı, resmi Docker container image içindeki Python da çalıştı
O özel build'ler de muhtemelen iyi çalışıyordur, ama standart dışılıkları yüzünden tereddüt ediyorum. Hatta davranış farklılıklarının listesi bile var; sorun olmayan bir şeye neden farklılık ekleniyor anlamıyorum. Rye felsefesinin bu build'leri kullanma konusunda bu kadar istekli olması da, işletim sisteminde zaten bulunan Python'ı varsayılan kullanan alternatiflere kıyasla cazibesini azaltıyor
Python'ı kaynaktan build etmeye kalktığınızda yeni sistem bağımlılıkları gerekiyor, işlem uzun sürüyor ve sonunda eksik header dosyaları hakkında yine anlaşılmaz bir hata alıyorsunuz. Bu hatayı arattığınızda upstream GCC'nin 2017'de düzelttiği bir sorunu dolanan bir
./configurebayrağı buluyorsunuz ve bir şekilde sonuçta başarıyorsunuzEğer bu tür üçüncü hata sınıfını ya da manylinux build ortamını hiç yaşamadıysanız, tam bir acı dünyasını pas geçmişsiniz demektir. Windows kurulumunu script'lemek ya da o sayfadaki “kullanılabilir CPU komutları sınırlamaları” gibi konular da buna dahil
Python kaynak kodunu düzenli olarak indirip standart üretim optimizasyonlarıyla derleyerek
/use/local/python${version}altına kuruyorum; bu yöntem Python 3.7’nin çıktığı 2018’den beri son derece tutarlı çalışıyor.Benim deneyimime göre bu komutlar o kadar kararlı ve tutarlı ki otomasyona bile alınabilir. Yazarın tam olarak hangi noktayı sorun ettiğini ya da temel itirazının ne olduğunu merak ediyorum
Örneğin Python 3.10.14 kurulum paketini indiremiyorsunuz; son Windows kurulum paketi Python 3.10.11, 5 Nisan 2023 tarihli sürüm
Rye’ı seviyorum. Vadettiği işi gerçekten yapıyor;
venv/Python sürümü/paketleme sürecinin tamamını fiilen keyifli hale getiriyor vepyproject.tomlgibi resmî Python kullanım biçimlerine alışkın olanlar için neredeyse görünmez hissettiriyor.Üstelik Python’u Cargo gibi hissettiriyor; Cargo da kullanması keyifli bir araç
Bana göre pip-tools, Poetry ya da Pipenv’den çok daha iyi tasarlanmıştı. Hem pip hem de
virtualenvile ortogoneldi ve ikisi de zaten Python’da uzun süredir yerleşik akışlardı. Rye, tekrar tekrar iyileştirilmiş, standartlara uyan yaklaşımın kazandığını gösteriyor denebilir.Rust sayesinde gelen hız artışının ötesinde, sanal ortamın nereye konacağı (
.venv) ve birden fazla Python sürümünün nasıl kurulacağı konusunda iyi varsayılanlar sunmasını seviyorum. Küçük görünüyor ama wheel’lerin numpy kurulum sorununu çözmesinden beri gerçekte eksik olan şey tam da böyle makul varsayılanlar ve yerleşik pip-tools’tu. Bu açıdan bakınca, ikili wheel’ler geldikten sonra Anaconda’nın varlık sebebinin ne olduğunu da merak ediyorumHiç değilse şimdi düzeliyor olmasına sevindim
Python paket yöneticilerinin sayısı sanki Google sohbet uygulamalarından bile fazla
Ayrıca seçme ölçütü olarak, büyük ve köklü organizasyonlar yerine daha küçük organizasyonlara güvenme önerisi çok ikna edici gelmiyor. Yani tam olarak ne vadettiğini merak ediyorum. Benim okuyabildiğim şey en fazla “iyi paket yöneticisi iyidir, hızlıdır ve iyidir” seviyesinde; bir karşılaştırma ya da felsefe sayfası olsa iyi olurdu
HN’deki alaycılık bazen beni şaşırtıyor.
Rye’ı seviyorum. Cargo ya da Hex gibi diğer dillerin paket yöneticilerini kullandıktan sonra Python’da benzer bir sistemin olmaması hep eksiklik gibi geliyordu; Rye bu ihtiyacı benim için tamamen giderdi.
venv, Python sürümü ve proje bağımlılıklarını yönetmek için birden fazla araç kurmak istemeyen biri olarak her şeyi tek başına Rye’ın halletmesi gerçekten çok hoşRye hakkında henüz bir hissim yok ama conda da
venv, Python sürümü ve proje bağımlılıklarını gayet iyi yönetebiliyorYeni bir Python bağımlılık yöneticisiyle karşılaşmak, yeni bir JavaScript framework’üne rastlamak gibi
venvkullanırsınız.Eğer portlarla uğraşmanız gerekiyorsa, program dağıtmanız gerekiyorsa ya da kütüphane C’ye veya işletim sistemi bileşenlerine bağımlıysa, para alındıktan sonra kod tabanını yönetmek ya da sorumluluğunu taşımak zorunda kalmayacağınız danışmanlık işine geçmek daha iyi olur
Artık Docker içinde CUDA ve PyTorch da çalıştırılabiliyor. Bu tür başlıklarda biri “Docker kullanın yeter” dediğinde sık gelen cevap “Docker öğrenmek istemiyorum” oluyor ama Docker konusunda hiç deneyimi olmayan biri bile 10 dakikada bir Python container’ı ayağa kaldırabilir
pixi(https://pixi.sh/latest/) iyi görünüyor. Python sürümünü sabitleyebiliyor, paketleri conda ve PyPI’dan kurabiliyor ve Rust ile yazılmış
curlile indirip bash’e pipe etmenizi istemesi, sonra da rastgele komut çıktısınaevaldemesi rahatsız ediciArka plan biraz karmaşık. Önce Anaconda şirketinin Python ile yazdığı conda vardı; açık kaynak ekosistemi olan conda-forge ise CI derleme botlarına sahip bir conda kanalı. Sonra yine aynı conda-forge çatısı altında, C++ ile yazılmış mamba conda’ya alternatif olarak ortaya çıktı; bu gerçekten
alias conda=mambaçalıştırılabilecek düzeyde bire bir yerine geçebilen bir alternatif. Şimdi conda da hız kazanmak için çözücü olarak libmamba kullanıyor.Daha sonra mamba’nın yazarı bunu pixi olarak ayırdı; Rust ile yeniden yazarken ortamların konumu ve etkinleştirilme biçimi konusundaki felsefeyi değiştirdi ama conda ortamlarıyla tamamen uyumlu kaldı
conda, conda kanalında olmadığında
pipüzerinden PyPI paket kurulumunu her zaman destekledi; pixi ise PyPI paketlerini uv üzerinden destekliyor. Bu yüzden pixi hızlı. Blog yazısına göre, onu mamba'dan bile çok daha hızlı yapan başka optimizasyonlar da varSaf Python olmayan paketler kullanıyorsanız conda ailesi doğru seçimdir. Paket yöneticisi seçimi (conda/mamba/pixi) ikincildir
PyPI'nin sorunu, yeterli bir bekçilik mekanizmasının olmaması. Buna, saf Python olmayan paketleri standart biçimde paketleme yöntemlerinin yetersizliği eklenince ortam sızıntıları oluyor; özellikle sadece kaynak dağıtıp
setup.pyiçinde derleyiciye kadar ortamı bootstrap eden tuhaf şeyler yapıldığında yeniden üretilebilirlik kayboluyorconda tarafında conda-forge kanalı oldukça iyi kalite kontrolü yapıyor. Kısıtları, lisansları, PyPI dağıtımlarında lisans dosyasının eksik olması sorununu ve ortam yalıtımını kontrol ediyor. Elbette, bakımcıların yanlış sürüm kısıtlarına sahip PyPI değişikliklerini otomatik birleştiren resmî botu kullanabilmesi nedeniyle kusursuz değil
Şu anda hiçbir aracın çözemediği sorun PyPI merkezli. conda'da olmayan paketlerle uğraşmak gerekiyor ve paket sürümlerini de fiilen önce PyPI'de yayımlamak zorunlu hale geliyor
Yalnızca PyPI'de bulunan bir paketi conda üzerinden kurarken, onun bazı bağımlılıkları conda'da olabilir. Bildiğim kadarıyla, PyPI paket bağımlılıklarını karşılamak için conda paketlerini kullanan bir paket yöneticisi yok. Bağımlılıkları elle karşılamak için conda paketleri eklenebilir, ama doğru sürüm kısıtlarının uygulanmaması riski var
Açık kaynak Python paketleri yazarken de, yapılandırma yalnızca conda kanalına dayansa bile çoğu durumda önce PyPI'de sürüm yayımlamak gerekiyor ya da en azından gerekiyor gibi. Çünkü conda-forge kanalındaki sürüm yayını fiilen PyPI varlığını şart koşuyor. Bu yüzden benim gibi biri için de Rye hâlâ faydalı olabilir ve bakmaya değer
Bu proje beni çok heyecanlandırıyor ama daha olgun bir aşamaya gelene kadar beklemeyi planlıyorum. Astral ekibinin çıkardığı diğer şeylerin hepsini sevdiğim için beklentim yüksek
Python projesine her başladığımda bağımlılık/sanal ortam yönetimindeki güncel durumu yeniden öğrenmem gerekiyormuş gibi hissettiriyor