Rye: बिना झंझट वाला Python अनुभव
(rye.astral.sh)- Rye एक project और package management tool था, जिसका उद्देश्य Python installation,
pyproject.tomlprojects, dependencies, virtualenv, और global tool installation को एक ही जगह संभालना था - फिलहाल इसका development बंद हो चुका है, और उन्हीं maintainers द्वारा बनाए गए follow-up project uv का उपयोग करने की सलाह दी जाती है
- मौजूदा users uv migration guide देखकर migrate कर सकते हैं, और Rye अभी भी डाउनलोड किया जा सकता है, लेकिन आगे कोई update planned नहीं है
- updates बंद होने में security updates भी शामिल हैं, इसलिए नए projects या long-term maintenance environments में uv पर switch करने पर विचार करना चाहिए
- Rye जिस integrated Python experience को लक्ष्य बना रहा था, उसमें complex projects और monorepo तक शामिल थे, लेकिन maintenance का focus uv पर शिफ्ट हो गया है
Rye की वर्तमान स्थिति
-
development बंद और uv की सिफारिश
- सभी users को uv इस्तेमाल करने की सलाह दी जाती है
- uv उन्हीं maintainers द्वारा बनाया गया follow-up project है
- uv actively maintained है और Rye की तुलना में कहीं अधिक व्यापक रूप से इस्तेमाल होता है
- मौजूदा Rye users uv migration guide देख सकते हैं
- Rye का उपयोग जारी रखा जा सकता है, लेकिन आगे कोई additional updates planned नहीं हैं
- security updates भी planned नहीं हैं
Rye द्वारा दी जाने वाली सुविधाएँ
- Rye Python के लिए एक project और package management solution था
- इसे Python users के लिए one-stop tool बनाने के लक्ष्य से बनाया गया था
- एक unified experience के भीतर यह निम्न काम संभालता था
- Python installation management
pyproject.tomlआधारित project management- dependency management
- virtualenv management
- global tool installation
- इसे complex projects और monorepo को संभालने के लिए design किया गया था
- introduction video Watch an introduction पर देखा जा सकता है
2 टिप्पणियां
मुझे थोड़ा समय हो गया है, लेकिन यह-वह आज़माने के बाद
Introduction - PDM
का उपयोग कर रहा हूँ।
लगता है Rye भी इस्तेमाल करके देखना चाहिए।
Hacker News की राय
core packaging development का काफ़ी हिस्सा अब uv में हो रहा है, और क्योंकि Rye अंदरूनी रूप से uv का उपयोग करता है, इसलिए uv बेहतर होता है तो Rye भी साथ में बेहतर होता है
उदाहरण के लिए, हाल ही में uv में universal dependency resolution जोड़ा गया है, जिससे एक single resolution result के साथ locked
requirements.txtबनाया जा सकता है जो सिर्फ़ अभी चल रहे system के लिए नहीं बल्कि सभी platforms और operating systems पर काम करता है, और नवीनतम Rye भी इसे support करता हैhttps://github.com/astral-sh/uv
मैं Rye और uv दोनों पर काम कर रहा हूँ, इसलिए कोई सवाल हो तो जवाब दे सकता हूँ
https://github.com/python-poetry/poetry/issues/6409
https://news.ycombinator.com/item?id=39257501
मेरी टीम के हिचकिचाने की एक वजह यही है। हम ML काम करते हैं, तो PyTorch-आधारित project का उदाहरण लें तो हमारी ideal स्थिति यह होगी कि सभी dependencies
pyproject.tomlमें रहें और AArch64 Mac या AMD64 Windows workstation से इन platform configurations के लिए lock files generate किए जा सकें: default MPS PyTorch वाला Mac, CUDA PyTorch वाला Windows, CPU PyTorch वाला AArch64 Linux, CPU PyTorch वाला AMD64 Linux, CUDA PyTorch वाला AMD64 LinuxRuff बनाने के लिए धन्यवाद, linting और formatting दोनों से बहुत संतुष्ट हूँ
pyenv+venv+pipहमेशा दर्दनाक था, लेकिन अब Rye पर आ गया हूँअब बस Rye install करो, GitHub से pull करो,
rye syncचलाओ और काम हो गयाhttps://guac.sh/
https://pypi.org/project/sbom4python/ https://github.com/CycloneDX/cyclonedx-python
हाल ही में जोड़ी गई dependency unpinning capability की वजह से development के दौरान compatibility बनाए रखने की दिशा मिलती है, और reproducibility के लिए सटीक और explicit
requirements.txtgenerate किया जा सकता है, इसलिए vulnerability management और SBOM चरण Poetry जैसे tools की तुलना में काफ़ी आसान हो जाते हैंइसी तरह की वजहों से मैं https://hatch.pypa.io/latest/why/ का उपयोग कर रहा हूँ, और यह भी अच्छा लगता है कि यह
uvके साथ अच्छी तरह फिट बैठता हैRye को लेकर मेरी झिझक की वजह यह है कि यह non-standard Python builds के उपयोग को बहुत मज़बूती से recommend करता है
philosophy page(https://rye.astral.sh/philosophy/) में कहा गया है कि python.org के CPython builds पूरी तरह उपयुक्त नहीं हैं; platform के हिसाब से कहीं सिर्फ़
.msiinstaller मिलता है या कहीं सिर्फ़ tarball, और कई Python distributions काफ़ी बिखरे हुए हैं, जिससे नीचे के ecosystem में तरह-तरह की समस्याएँ पैदा होती हैं। इसलिए यह project indygreg standalone builds का उपयोग करता है, और उम्मीद करता है कि कभी कोई अच्छी तरह maintained और भरोसेमंद Python build आए जो आज की इस अव्यवस्था को बदल देउन indygreg builds की जानकारी यहाँ है: https://gregoryszorc.com/docs/python-build-standalone/main/ और दूसरा Python चुनना भी संभव है: https://rye.astral.sh/guide/toolchains/
लेकिन मुझे उन्होंने जिन समस्याओं का ज़िक्र किया है, उनका लगभग कभी सामना नहीं करना पड़ा। python.org से मिला official Python build भी चला, distro package manager से install किया हुआ सामान्य Python भी चला, और official Docker container image में शामिल Python भी चला
वे खास builds भी शायद ठीक चलते होंगे, लेकिन उनकी non-standard nature की वजह से हिचक होती है। उनके behavior differences की सूची तक है, इसलिए समझ नहीं आता कि जो चीज़ बिना समस्या के चल रही है उसमें अलग तरह की विशेषताएँ क्यों जोड़ी जाएँ। Rye philosophy का उन builds को लेकर इतना आक्रामक होना भी, operating system में पहले से मौजूद Python को default मानने वाले alternatives की तुलना में, इसकी appeal कम कर देता है
source से Python build करने के लिए नए system dependencies चाहिए, बहुत समय लगता है, और अंत में missing header files के बारे में कोई और भी कम समझ आने वाला error मिलता है। उस error को search करने पर
./configureflags मिलते हैं जो upstream GCC द्वारा 2017 में ठीक की गई समस्या के workaround होते हैं, और किसी तरह अंत में build सफल हो जाता हैअगर आपने यह तीसरे तरह की error या manylinux build environments नहीं झेले हैं, तो आपने सचमुच एक पूरी पीड़ादायक दुनिया से बचाव किया है। Windows install scripting या उस page पर “usable CPU instructions limiting” जैसी बातें भी इसी तरह की हैं
Python source code को नियमित रूप से डाउनलोड करके standard production optimization के साथ compile किया जाता है और फिर
/use/local/python${version}में install किया जाता है, और यह Python 3.7 के 2018 में आने के बाद से बहुत लगातार काम कर रहा हैमेरे अनुभव में ये commands इतनी स्थिर और consistent हैं कि इन्हें automate भी किया जा सकता है। लेखक को असल में किस बात से समस्या है या उनकी बुनियादी आपत्ति क्या है, यह जानने की उत्सुकता है
उदाहरण के लिए Python 3.10.14 installer डाउनलोड नहीं किया जा सकता, और आख़िरी Windows installer Python 3.10.11 है, जो 5 अप्रैल 2023 का version है
मुझे Rye पसंद है। यह जो करने का दावा करता है, वही करता है, और
venv/Python version/packaging की पूरी प्रक्रिया को सच में सहज बना देता है, जबकिpyproject.tomlजैसी आधिकारिक Python usage style से परिचित लोगों के लिए यह लगभग पारदर्शी लगता हैसाथ ही, यह Python को Cargo जैसा महसूस कराता है, और Cargo भी इस्तेमाल करने के लिए एक अच्छा tool है
व्यक्तिगत रूप से मुझे लगता है कि pip-tools, Poetry या Pipenv से कहीं बेहतर design था। यह pip और
virtualenvदोनों के प्रति orthogonal था, और दोनों ही पहले से Python में लंबे समय से मौजूद flow का हिस्सा थे। Rye को इस रूप में देखा जा सकता है कि standards-compliant, iterative सुधार वाला approach जीत रहा हैRust की वजह से मिलने वाली speed improvements के अलावा, virtual environment कहाँ रखना है (
.venv) और कई Python versions कैसे install करने हैं, इस पर यह अच्छे defaults देता है। यह छोटी बात लग सकती है, लेकिन wheel के numpy install समस्याएँ हल करने के बाद से ऐसे sensible defaults और built-in pip-tools ही लगभग आख़िरी कमी थे। इसी अर्थ में, binary wheel आने के बाद Anaconda के अस्तित्व का कारण क्या रह गया, यह भी सोचने वाली बात हैअब यह बेहतर हो रहा है, यह देखकर अच्छा लगता है
लगता है Python package managers की संख्या Google chat apps से भी ज़्यादा है
और चयन के लिहाज़ से, बड़े और पुराने संगठनों की बजाय छोटे संगठनों पर भरोसा करने का सुझाव बहुत persuasive नहीं लगता। यानी यह ठीक-ठीक क्या करने का दावा करता है, यह जानना चाहता हूँ। मुझे जो पढ़ने को मिलता है वह बस “अच्छा package manager अच्छा, तेज़ और अच्छा है” जैसा लगता है, इसलिए कोई comparison या philosophy page हो तो अच्छा होगा
HN का cynicism कभी-कभी चौंकाता है
मुझे Rye पसंद है। Cargo या Hex जैसे दूसरी languages के package managers इस्तेमाल करने के बाद मुझे हमेशा यह कमी खलती थी कि Python में वैसा system नहीं है, और Rye ने उस कमी को पूरी तरह भर दिया। अगर आप
venv, Python version, और project dependencies manage करने के लिए कई tools install नहीं करना चाहते, तो Rye एक ही tool में सब कुछ दे देता है, जो बहुत अच्छा हैRye का मुझे अभी अंदाज़ा नहीं है, लेकिन conda भी
venv, Python version, और project dependency management अच्छे से कर सकता हैकिसी नए Python dependency manager से मिलना ऐसा लगता है जैसे कोई नया JavaScript framework अचानक दिख जाए
venvइस्तेमाल कर लोअगर ports संभालने हैं, या program deploy करना है, या library C या OS components पर निर्भर है, तो बेहतर है कि पैसे मिलने के बाद codebase को maintain करने या उसकी ज़िम्मेदारी लेने की आवश्यकता न हो, और सीधे consulting का काम शुरू कर दिया जाए
आजकल Docker में CUDA और PyTorch भी चल सकते हैं। ऐसे threads में जब कोई कहता है “बस Docker इस्तेमाल करो”, तो आम जवाब होता है “मैं Docker सीखना नहीं चाहता”, लेकिन Docker का बिल्कुल भी अनुभव न हो तब भी Python container चलाने में 10 मिनट लगते हैं
pixi(https://pixi.sh/latest/) अच्छा है। यह Python version को pin कर सकता है, conda और PyPI से packages install कर सकता है, और Rust में लिखा गया है
curlसे लेकर bash में pipe करने को कहना, और फिर किसी arbitrary command output परevalचलाने को कहना, थोड़ा बोझिल लगता हैइसका background थोड़ा जटिल है। Anaconda कंपनी के पास Python में लिखा हुआ conda था, और open source ecosystem conda-forge, CI build bots वाला एक conda channel है। बाद में उसी conda-forge umbrella के तहत C++ में लिखा mamba, conda के replacement के रूप में आया, और यह इतना वास्तविक drop-in replacement है कि
alias conda=mambaकाम करना चाहिए। अब conda भी speed बढ़ाने के लिए libmamba को solver के रूप में इस्तेमाल करता हैइसके बाद mamba के लेखक ने इसे pixi के रूप में अलग किया, Rust में दोबारा लिखा, और environment location व activation method को लेकर philosophy बदल दी, लेकिन यह conda environments के साथ पूरी तरह compatible है
conda ने conda चैनल में उपलब्ध न होने पर भी हमेशा
pipके जरिए PyPI पैकेज इंस्टॉल करने का समर्थन किया है, और pixi, uv के जरिए PyPI पैकेजों को सपोर्ट करता है। इसलिए pixi तेज़ है। ब्लॉग पोस्ट के अनुसार mamba से भी कहीं ज़्यादा तेज़ बनाने वाली अन्य optimizations भी हैंअगर आप शुद्ध Python नहीं, ऐसे पैकेज इस्तेमाल करते हैं, तो conda परिवार सही विकल्प है। पैकेज मैनेजर का चयन (conda/mamba/pixi) द्वितीयक है
PyPI की समस्या यह है कि वहाँ gatekeeper की भूमिका कमज़ोर है। इसके साथ शुद्ध Python न होने वाले पैकेजों को standard तरीके से पैकेज करने की कमी भी जुड़ जाती है, जिससे environment leak हो सकता है, और खासकर जब केवल source distribute किया जाए और
setup.pyमें compiler तक शामिल करके environment को bootstrap करने जैसी अजीब चीज़ें की जाएँ, तो reproducibility खत्म हो जाती हैconda पक्ष में conda-forge चैनल काफ़ी अच्छा quality control करता है। यह constraints, license, PyPI distribution में license file छूट जाने की समस्या, environment isolation आदि की जाँच करता है। बेशक, यह पूरी तरह perfect नहीं है, क्योंकि maintainers एक आधिकारिक bot का इस्तेमाल कर सकते हैं जो गलत version constraints वाले PyPI बदलावों को auto-merge कर देता है
अभी वह समस्या जिसे कोई भी tool हल नहीं कर पाया है, PyPI-केंद्रित है। conda में न होने वाले पैकेजों को संभालना पड़ता है, और पैकेज रिलीज़ भी व्यवहार में पहले PyPI पर ही डालना लगभग अनिवार्य है
PyPI-only पैकेजों को conda के जरिए इंस्टॉल करते समय भी उनकी कुछ dependencies conda में हो सकती हैं। मेरी जानकारी में ऐसा कोई पैकेज मैनेजर नहीं है जो PyPI पैकेज dependencies को पूरा करने के लिए conda पैकेजों का इस्तेमाल करता हो। आप मैन्युअली conda पैकेज जोड़कर dependencies पूरी कर सकते हैं, लेकिन सही version constraints लागू न होने का जोखिम रहता है
open source Python पैकेज लिखते समय भी, भले ही configuration केवल conda चैनल पर निर्भर हो, ज़्यादातर मामलों में पहले PyPI पर रिलीज़ करना पड़ता है या करना चाहिए। क्योंकि conda-forge चैनल रिलीज़ व्यवहार में PyPI की मौजूदगी मांगती है। इसलिए मेरे जैसे लोगों के लिए भी Rye अब भी उपयोगी हो सकता है और देखने लायक है
मुझे इस प्रोजेक्ट से बहुत उम्मीद है, लेकिन मैं इसके और mature stage में पहुँचने तक इंतज़ार करने की योजना बना रहा हूँ। Astral टीम की बाकी चीज़ें भी मुझे बहुत पसंद आई हैं, इसलिए उम्मीद बड़ी है
हर बार Python प्रोजेक्ट शुरू करते समय ऐसा लगता है जैसे dependency/virtual environment management की मौजूदा स्थिति फिर से सीखनी पड़ती है