19 पॉइंट द्वारा GN⁺ 2024-03-26 | 7 टिप्पणियां | WhatsApp पर शेयर करें
  • कई Python versions के बीच आसानी से स्विच करने देता है
  • सरल, unobtrusive और भरोसेमंद single-purpose UNIX पारंपरिक टूल के सिद्धांत का पालन करता है
  • यह प्रोजेक्ट rbenv और ruby-build से fork किया गया है और Python के लिए अनुकूलित किया गया है

pyenv क्या करता है

  • user basis पर global Python version बदल सकता है।
  • project-specific Python version को support करता है।
  • environment variables का उपयोग करके Python version को override कर सकता है।
  • एक साथ Python commands के कई versions खोज सकता है। यह tox का उपयोग करके अलग-अलग Python versions के बीच testing के लिए उपयोगी है।

pyenv क्या नहीं करता...

  • Python खुद पर निर्भर नहीं करता। pyenv pure shell scripts से बना है।
  • इसे shell में load करने की जरूरत नहीं होती। इसके बजाय, यह PATH में directory जोड़ने वाले shim approach का उपयोग करता है।
  • virtualenv को manage नहीं करता। हालांकि, उपयोगकर्ता खुद virtualenv बना सकते हैं या pyenv-virtualenv का उपयोग करके इसे automate कर सकते हैं।

यह कैसे काम करता है

  • pyenv PATH में inject किए गए shim executables का उपयोग करके Python commands को intercept करता है, application द्वारा निर्दिष्ट Python version तय करता है, और फिर command को उसी Python installation तक forward करता है।

PATH को समझना

  • जब आप python या pip जैसे commands चलाते हैं, तो operating system PATH environment variable में मौजूद directories की सूची में उस नाम के executable को खोजता है।

Shims को समझना

  • pyenv PATH की शुरुआत में shims directory insert करता है। rehashing प्रक्रिया के जरिए, यह सभी installed Python versions के सभी Python commands के लिए shims बनाए रखता है।

Python version selection को समझना

  • shim चलने पर, pyenv Python version को निम्न sources से इस क्रम में पढ़कर उपयोग करता है:
    1. PYENV_VERSION environment variable (अगर सेट हो)।
    2. current directory की application-specific .python-version file (अगर मौजूद हो)।
    3. file system के root तक पहुंचने तक हर parent directory में खोजकर मिली पहली .python-version file (अगर मौजूद हो)।
    4. global $(pyenv root)/version file।

pyenv द्वारा प्रदान किए गए Python install location को खोजना

  • pyenv द्वारा तय किए गए Python version के अनुसार command को संबंधित Python installation तक भेजा जाता है।
  • हर Python version $(pyenv root)/versions के अंतर्गत अपनी अलग directory में install होता है।

उपयोग

अतिरिक्त Python versions install करना

  • pyenv install का उपयोग करके अतिरिक्त Python versions install करें।

latest version को अपने आप resolve करना

  • uninstall को छोड़कर सभी Pyenv subcommands अपने आप full prefix को latest version में resolve कर देते हैं।

extended support वाले Python versions

  • कुछ Python releases में खास environments के लिए support जोड़ने हेतु user-provided patches लागू किए जाते हैं।

Python versions के बीच स्विच करना

  • Pyenv द्वारा install किए गए Python का उपयोग करने के लिए नीचे दिए गए commands में से कोई एक चलाएं:
    • pyenv shell
    • pyenv local
    • pyenv global

Python version हटाना

  • समय के साथ $(pyenv root)/versions directory में Python versions जमा हो जाते हैं।
  • पुराने Python versions हटाने के लिए pyenv uninstall का उपयोग करें।

अन्य कार्य

  • सभी उपलब्ध subcommands की सूची देखने के लिए pyenv commands चलाएं।

pyenv हटाना

  • Pyenv को अस्थायी रूप से disable करना या system से हटाना आसान है।

Pyenv plugins

  • plugins का उपयोग करके Pyenv की functionality को सरल, flexible और maintainable तरीके से बढ़ाया और customize किया जा सकता है।

advanced configuration

  • ऐसे environment variables मौजूद हैं जो Pyenv के behavior को control करते हैं।

development

  • Pyenv source code GitHub पर host किया गया है।
  • tests चलाने के लिए Bats का उपयोग किया जाता है।

GN⁺ की राय

  • pyenv, अलग-अलग Python versions को manage करने के लिए बेहद उपयोगी टूल है। खासकर उन developers के लिए जो कई projects में Python के अलग versions इस्तेमाल करते हैं।
  • यह टूल Python खुद पर निर्भर नहीं करता और pure shell scripts से बना है, इसलिए Python के बिना install हुए systems पर भी इसे install और manage किया जा सकता है।
  • pyenv सीधे virtualenv को manage नहीं करता, लेकिन pyenv-virtualenv plugin के जरिए virtualenv management को automate किया जा सकता है, जो काफी सुविधाजनक है।
  • इसकी installation और usage अपेक्षाकृत सरल है, इसलिए Python version management की जरूरत वाले शुरुआती software engineers भी इसे आसानी से अपना सकते हैं।
  • pyenv जैसी functionality देने वाला एक और टूल conda है, जो खासकर data science और machine learning क्षेत्र में व्यापक रूप से इस्तेमाल होता है। conda package management और environment management दोनों प्रदान करता है, इसलिए जिन उपयोगकर्ताओं को ये features चाहिए उनके लिए यह उपयुक्त हो सकता है।
  • pyenv अपनाते समय ध्यान रखना चाहिए कि अगर system में Python के कई versions पहले से installed हों, तो path conflicts से बचा जाए। pyenv का बड़ा फायदा version management की आसानी है, लेकिन गलत configuration system के default Python path में दखल दे सकती है।

7 टिप्पणियां

 
koxel 2024-03-26

conda के बारे में ध्यान रखें, कुछ निश्चित आकार की कंपनियों में
यह paid है.
कंपनी छोटी हो तब भी अगर मूल क्लाइंट का आकार बड़ा हो, तो डिलीवरी देना मुश्किल हो जाता है

 
koxel 2024-03-26

conda खुद BSD के तहत मुफ़्त है, लेकिन repository और package licenses को ध्यान से देखना चाहिए।

 
tujuc 2024-03-26

मैं ऊपर लेवल पर asdf सेट करके रखता हूँ https://asdf-vm.com/

और project के हिसाब से कभी local में configure करता हूँ, कभी container का इस्तेमाल भी करता हूँ...

नया environment सेटअप + manage करने के लिए अब बहुत कुछ आ गया है, इसलिए इन दिनों इसे ज़्यादा इस्तेमाल नहीं कर रहा हूँ.. हाहा

 
sngwn 2024-03-26

मैं भी ठीक ऐसे ही इस्तेमाल करता/करती हूँ.
हाहाहा, व्यक्तिगत रूप से मुझे लगता है कि pyenv अब थोड़ा पुराना-सा महसूस होता है.

 
joyfui 2024-03-26

rbenv, pyenv, nodenv जैसी चीज़ें लगातार आती रहीं, तो आखिरकार anyenv जैसा कुछ भी आ गया। हा हा
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Hacker News राय
  • pyenv के उपयोग पर चेतावनी

    • pyenv की एक बड़ी कमी यह है कि यह उपयोगकर्ता की मशीन पर Python को compile करता है.
    • इस स्थिति में बहुत सारे failure modes हो सकते हैं.
    • pyenv शुरुआती लोगों के लिए Python packaging समस्याएँ हल करने का टूल नहीं है, बल्कि configuration को standardize करने के लिए experts का टूल है.
    • कई बार उपयोगकर्ता pyenv से पैदा हुई समस्याओं का सामना करते हैं, लेकिन उन्हें इसका एहसास नहीं होता.
  • Python programmers की परेशानी

    • Python programmers को झेलनी पड़ने वाली अनावश्यक कठिनाइयों पर आश्चर्य.
    • Python के कई versions install करने पड़ना तर्कसंगत नहीं लगता.
    • Python programs के हर जगह काम करने का विचार व्यावहारिक नहीं है.
    • सब कुछ इतना fragile है कि सही language version के बिना काम नहीं करता.
    • dependency समस्याएँ इतनी गंभीर हैं कि package manager के manager की ज़रूरत पड़ती है.
  • Python programs को स्थिर रखने वाले टूल

    • ऐसे टूल्स की सूची जो यह सुनिश्चित करते हैं कि Python programs वैसे ही काम करें जैसे वे पहली बार लिखे गए थे.
    • requirements.txt, pip, pipenv, pyenv, virtualenv आदि जैसे कई टूल मौजूद हैं.
  • Mise टूल का परिचय

    • Rust में लिखा गया Mise, asdf जैसा है लेकिन तेज़ है और default रूप से shims का उपयोग नहीं करता.
    • यह runtimes को parallel में install करता है और ज़रूरी plugins डाउनलोड करता है.
    • इसे asdf या pyenv से बेहतर टूल के रूप में इस्तेमाल किया जा सकता है.
  • ASDF के फायदे

    • ASDF सिर्फ Python ही नहीं, बल्कि Rust, Go, Node जैसी कई languages और विभिन्न tools को support करता है.
  • pyenv उपयोग का अनुभव

    • pyenv इस्तेमाल करने की शुरुआत में कोई समस्या नहीं थी, लेकिन Python के कई versions install करने के बाद समस्याएँ आने लगीं.
    • pyenv की जगह python.org से Python डाउनलोड करके python<version> -m venv /my/virtual/env के ज़रिए virtual environment manage करना अधिक स्थिर है.
  • व्यक्तिगत Python management stack

    • Python versions को manage करने के लिए pyenv, और हर project के लिए नया virtual environment बनाने हेतु venv का उपयोग.
    • project initialization और dependency management के लिए Poetry का उपयोग.
    • अगर Dropbox इस्तेमाल करते हैं, तो .venv फ़ोल्डर को ignore list में जोड़ते हैं.
    • Ubuntu पर ज़रूरी सभी dependencies इकट्ठा करने के बाद Pyenv अच्छी तरह काम करता है.
  • Mise के साथ runtime dependency management

    • Python, Node, Ruby, Terraform आदि अधिकांश runtime dependencies को एक ही तरीके से संभालने के लिए mise का उपयोग.
    • Python virtual environments को भी activate किया जा सकता है.
  • macOS workflow साझा

    • python.org से आवश्यक Python binaries डाउनलोड करना, और virtualenv का उपयोग करके virtual environment सेट करना.
    • pyproject.toml और pip-compile के साथ project management.
    • Python project management क्षेत्र में बहुत बदलाव हुए हैं, लेकिन इस workflow के साथ इन सबको नज़रअंदाज़ किया जा सका.
 
edunga1 2024-03-26

इस स्थिति में होने वाले failure modes बहुत ज़्यादा हैं।

मुझे लगता है कि यही हिस्सा सबसे ज़्यादा तकलीफ़देह है।