रूबी के बंडल / पर्ल के कार्टन के लिए पायथन समतुल्य क्या हैं?


93

मुझे virtualenv और पाइप के बारे में पता है। लेकिन ये बंडलर / कार्टन से थोड़े अलग हैं।

उदाहरण के लिए:

  • पिप को शेबंग या स्क्रिप्ट को सक्रिय करने के लिए पूर्ण पथ लिखते हैं
  • पाइप में execउप कमांड नहीं है ( bundle exec bar)
  • virtualenv एक स्थानीय निर्देशिका में पायथन दुभाषिया की नकल करता है

क्या हर पायथन डेवलपर virtualenv / pip का उपयोग करता है? क्या पायथन के लिए अन्य पैकेज प्रबंधन उपकरण हैं?


4
नहीं, प्रत्येक पायथन उपयोगकर्ता virtualenv का उपयोग नहीं करता है। मुझे व्यक्तिगत रूप से इसकी कभी आवश्यकता नहीं है।
फ्रेड फू

मैं कुछ के बारे में पता नहीं कर रहा हूँ वास्तव में (, जो मैं अब तक नहीं पता था BTW) रूबी बंडलर की तरह। मैं जो कुछ भी करना चाहता हूं, वह वर्चुअनव और पाइप और सेटप्टूल - या डिस्टुटिल्स या जो भी वितरण प्रणाली मैं Google में पहले पाती हूं उसका उपयोग करना है :) मैं एक उत्तर के बारे में भी उत्सुक हूं, लेकिन यह ज्यादातर समय मेरा समाधान है।
ब्रैंडज़ी

pipenvऔर shovelनीचे दिए गए और अधिक आधुनिक विकल्प हैं क्योंकि यह प्रश्न पूछा गया था।
जिम मेयर

न तो पिपेनव और न ही फावड़ा बराबर हैं। फावड़ा की तरह फावड़ा की तरह कुछ भी नहीं है, और अधिक रेक की तरह। पायथन निर्भरता प्रबंधन काफी पीछे है। हालांकि इसे एक दिन पाइप में मिला दिया जाएगा ( pypi.org/project/pipfile ) ...
नोमस प्राइम

जवाबों:


72

क्या मैंने बंडलर के बारे में पढ़ा है - बिना virtualenv के पाइप आपके लिए ठीक काम करना चाहिए। आप इसे नियमित मणि आदेश और बंडलर के बीच के रूप में सोच सकते हैं। सामान्य चीजें जो आप पाइप से कर सकते हैं:

  1. संकुल स्थापित करना (मणि स्थापित करना)

    pip install mypackage
  2. निर्भरताएँ और थोक-स्थापित (रत्न)

    संभवतः पाइप का आवश्यकताओं का उपयोग करने का सबसे आसान तरीका है। फ़ाइल का उपयोग करें। मूल रूप से यह संभव संस्करण बाधाओं के साथ आवश्यक पैकेजों की एक सामान्य सूची है। यह कुछ इस तरह लग सकता है:

    nose==1.1.2
    django<1.3
    PIL

    बाद में जब आप उन निर्भरताओं को स्थापित करना चाहते हैं, जो आप करेंगे:

    $ pip install -r requirements.txt

    आवश्यकताओं-फ़ाइल सिंटैक्स में अपने सभी मौजूदा पैकेजों को देखने का एक सरल तरीका है:

    $ pip freeze

    आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं ।

  3. निष्पादन (बंडल निष्पादन)

    निष्पादन योग्य फ़ाइलों के साथ आने वाले सभी अजगर पैकेज आमतौर पर सीधे इंस्टॉल के बाद उपलब्ध होते हैं (जब तक कि आपके पास कस्टम सेटअप न हो या यह एक विशेष पैकेज हो)। उदाहरण के लिए:

    $ pip install gunicorn
    $ gunicorn -h 
  4. कैश से स्थापित करने के लिए पैकेज रत्न (बंडल पैकेज)

    नहीं है pip bundleऔर pip zip/unzip। लेकिन मुझे यकीन नहीं है कि कई लोग इसका उपयोग करते हैं।

ps यदि आप पर्यावरण अलगाव के बारे में परवाह करते हैं तो आप पाइप के साथ एक साथ virtualenv का उपयोग कर सकते हैं (वे करीबी दोस्त हैं और पूरी तरह से एक साथ काम करते हैं)। डिफ़ॉल्ट रूप से पाइप संकुल प्रणाली को चौड़ा करता है जिसे व्यवस्थापक अधिकारों की आवश्यकता हो सकती है।


46
बंडलर के बारे में महान बात यह है कि वर्चुअन भाग को एकीकृत किया गया है और ज्यादातर मामलों में कोई व्यवस्थापक अधिकार की आवश्यकता नहीं है। वास्तव में, बंडल अच्छी तरह से एकमात्र रत्न हो सकता है जिसकी विश्व स्तर पर आवश्यकता है। bundle install --path vendorस्थानीय रूप से सब कुछ स्थापित करता है और bundle execयह पता लगाने के लिए पर्याप्त स्मार्ट है। स्पष्ट पर्यावरण परिवर्तनों की कोई आवश्यकता नहीं है।
देबिल्स्की

11
मुझे नहीं लगता कि बिंदु # 3 सही है। बस एक रूबी निष्पादन योग्य चलाने के साथ या बिना किया जा सकता है bundle exec। इसका पूरा बिंदु bundle execयह है कि यह Gemfileनिष्पादन योग्य चलाने से पहले पर्यावरण को बदल देता है । पिप के पास कोई समकक्ष नहीं है bundle exec, हालांकि virtualenv हो सकता है।
सीन मैकेसी

@SeanMackesey जब भी आप virtualenv पर्यावरण के सक्रियण को चलाते हैं तो आप तुरंत ही पर्यावरण के अंदर हो जाते हैं जैसे कि python env में एक को इंगित करता है, न कि विश्व स्तर पर एक को स्थापित करने के लिए, pythonpath env के संबंध में सही है, सभी एप्लिकेशन भी उस env से चलते हैं।
शैबालिन

8
बंडलर के बारे में मुख्य बात यह है कि यह अब एक डिफैक्टो मानक है, आप बहुत अधिक गारंटी दे सकते हैं कि लगभग किसी भी आकार की रूबी परियोजना, इसमें एक Gemfileरूट होगा, और आप कर सकते हैं bundle installऔर आप जाने के लिए अच्छा है, या bundle --deploymentयह ' मशीन को माणिक के आवश्यक संस्करण उपलब्ध कराने के लिए थोड़ा और सर्वर के साथ बस चलाना चाहिए। अजगर के पास बस एक समतुल्य नहीं है। उपकरण वहाँ हैं, सांस्कृतिक सर्वव्यापकता नहीं है।
ओसोडो

14

आप पिपेनव का उपयोग कर सकते हैं , जिसमें बंडल के साथ समान इंटरफ़ेस है।

$ pip install pipenv

Pipenv अपने आप virtualenv बनाता है और Pipfileया से निर्भरता स्थापित करता है Pipfile.lock

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

आप जैसे virtualenv गुंजाइश के साथ कमांड चला सकते हैं bundle exec

$ pipenv run python3 -c "print('hello!')"

3

क्लोन क्लोनिंग करने वाला है

वर्तमान में जो पाइप में है वह केवल requirements.txtआपके पास पहले से मौजूद फ़ाइल को पढ़ता है, लेकिन यह बहुत पुराना है। यह भी पूरी तरह से बराबर नहीं है: यह एक बनाने पर जोर देता है virtualenv। Bundler, मैं देखता हूं, केवल वही पैकेज इंस्टॉल करता है जो गायब हैं, और आपको अपने सिस्टम पासवर्ड को इंस्टॉल करने या फिर से शुरू करने के लिए अपना sudo पासवर्ड देने का विकल्प देता है, जो कि pbundler की विशेषता नहीं लगती है।

हालांकि, git पर संस्करण बुंडलर के व्यवहार के बहुत करीब होने के लिए लगभग पूर्ण पुनर्लेखन है ... जिसमें "चीज़सेफ" शामिल है और अब आवश्यकताओं का समर्थन नहीं कर रहा है। यह दुर्भाग्यपूर्ण है, क्योंकि आवश्यकताओं के बाद। यह पायथनलैंड में डी वास्तविक मानक है, और इसे मानकीकृत करने के लिए ऑफिशियल बीडीएफएल-स्टांप्ड कार्य भी है । जब यह लागू होता है, तो आप यह सुनिश्चित कर सकते हैं कि pbundler जैसा कुछ वास्तविक मानक बन जाएगा। काश, अभी तक कुछ भी स्थिर नहीं है जो मुझे पता है (लेकिन मैं गलत साबित होना पसंद करूंगा )।


ऐसा लगता है कि यह परियोजना गायब हो गई है। कविता पर विचार करें: stackoverflow.com/a/61771381/115075
bb।

1

मैं एक ने लिखा है - https://github.com/Deepwalker/pundler । PIP पर इसका pundleनाम पहले से ही लिया गया था।

यह requirements(_\w+)?.txtआपकी इच्छित निर्भरता के रूप में फ़ाइलों का उपयोग करता है और frozen(_\w+)?.txtजमे हुए संस्करणों के साथ फाइलें बनाता है ।

(_\w+)?बात के बारे में - यह envs है। आप आवश्यकताएँ_ PUNDLEENV=testtest.txt बना सकते हैं और फिर आवश्यकताओं के साथ अपने रन में इस डिप्स का उपयोग करने के लिए उपयोग कर सकते हैं ।

और virtualenv के बारे में - आपको एक की आवश्यकता नहीं है, इसकी पंडाल पहले सिर में बंडल से क्या लेती है।


1

पायथन कविता 2020 तक रूबी बंडलर के सबसे करीब है (और 2018 से पहले से ही)। यह पहले से ही दो साल से अधिक पुराना है, अभी भी बहुत सक्रिय है, महान प्रलेखन है। किसी को curl-pipe-python-स्टाइल स्थापित करने के अनुशंसित तरीके के बारे में शिकायत हो सकती है , लेकिन विकल्प हैं, उदाहरण के लिए macOS पर होमब्रे।

यह दृश्यों के पीछे virtualenvs का उपयोग करता है (बंडलर के विपरीत), लेकिन यह लॉक-फाइल प्रदान करता है और उपयोग करता है, उप निर्भरता का ख्याल रखता है, निर्दिष्ट संस्करण बाधाओं का पालन करता है और स्वचालित रूप से पुराने पैकेजों को अपडेट करने की अनुमति देता है। आपके पसंदीदा शेल के लिए भी स्वतः पूर्णता है।

एक pyproject.toml फ़ाइल के उपयोग के साथ, यह बंडलर (रत्नों के करीब) की तुलना में थोड़ा आगे भी जा रहा है। यह जावास्क्रिप्ट और टाइपस्क्रिप्ट के npm और यार्न के साथ भी तुलनीय है।

Poetrify (एक पूरक परियोजना) Poetry के लिए आवश्यकताओं से परियोजनाओं को pyproject.toml में परिवर्तित करने में मदद करता है।

लॉक फ़ाइल को आवश्यकताओं के अनुसार निर्यात किया जा सकता है poetry export -f requirements.txt > requirements.txt। यदि आप अन्य टूलिंग के लिए (या संभावना नहीं है कि मामला वापस जाना चाहते हैं), तो।


1

मैं कहूंगा कि फावड़ा देखने लायक है। इसे खासतौर पर रेक के पाइथोनिश संस्करण के लिए विकसित किया गया था। परियोजना पर प्रतिबद्ध गतिविधि का एक टन नहीं है, लेकिन स्थिर और उपयोगी लगता है।


0

नहीं, कोई भी डेवलपर virtualenv और / या pip का उपयोग नहीं करता है, लेकिन कई डेवलपर्स इन उपकरणों का उपयोग / पसंद करते हैं

और अब, पैकेज डेवलपमेंट टूल्स और अलग-अलग वातावरणों के लिए जो कि आपका वास्तविक प्रश्न है। उसी उद्देश्य के लिए बिल्डआउट ( http://www.buildout.org/en/latest/ ) जैसे किसी भी अन्य उपकरण से बाहर निकलें , अपने पर्यावरण को अलग करें जो आपके द्वारा प्रबंधित की जाने वाली प्रत्येक परियोजना के लिए सिस्टम का निर्माण करता है। कुछ समय के लिए मैं इसका उपयोग करता हूं, लेकिन अभी नहीं।

पाइथन में प्रति प्रोजेक्ट स्वतंत्र वातावरण, रूबी में एक ही स्थिति से थोड़ा अलग है। मेरे मामले में मैं pyenv ( https://github.com/yyuu/pyenv ) का उपयोग करता हूं जो कि rbenv जैसा कुछ है, लेकिन पायथन के लिए। परियोजना के प्रति अजगर और virtualenv के अलग-अलग संस्करण, और, इस अलग-थलग वातावरण में, मैं पाइप या आसान-इंस्टॉल (यदि आवश्यक हो) का उपयोग कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.