रूबी virtualenv के बराबर?


165

वहाँ पायथन उपयोगिता के लिए कुछ इसी तरह है virtualenv ?

मूल रूप से यह आपको पायथन पैकेजों को सैंडबॉक्स वाले वातावरण में स्थापित करने की अनुमति देता है, इसलिए easy_install djangoआपके सिस्टम-वाइड साइट-पैकेज निर्देशिका में नहीं जाता है, यह वर्चुअन-निर्मित निर्देशिका में जाएगा।

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

$ virtualenv test
New python executable in test/bin/python
Installing setuptools...cd .........done.
$ cd test/
$ source bin/activate
(test)$ easy_install tvnamer
Searching for tvnamer
Best match: tvnamer 0.5.1
Processing tvnamer-0.5.1-py2.5.egg
Adding tvnamer 0.5.1 to easy-install.pth file
Installing tvnamer script to /Users/dbr/test/bin

Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.egg
Processing dependencies for tvnamer
Finished processing dependencies for tvnamer
(test)$ which tvnamer 
/Users/dbr/test/bin/tvnamer

क्या रूबीजीम्स के लिए ऐसा कुछ है?

जवाबों:


85

आरवीएम करीब काम करता है कि वर्चुअलनेव कैसे काम करता है क्योंकि यह आपको सैंडबॉक्स को अलग-अलग रूबी संस्करण और उनके रत्न, आदि देता है।


5
सैंडबॉक्स और आरवीएम दोनों की कोशिश की और सोचते हैं कि आरवीएम बेहतर समाधान है।
ivanjovanovic

9
ivanjovanovic। आपने आरवीएम को सैंडबॉक्स से बेहतर क्यों पाया?
पावन

68

न तो सैंडबॉक्स, आरवीएम, न ही रेंबव आपके ऐप के मणि निर्भरता के संस्करणों का प्रबंधन करते हैं। उस के लिए उपकरण बंडल है

  • अपने आवेदन की निर्भरता घोषणा के रूप में एक Gemfile का उपयोग करें
  • bundle installइन निर्भरताओं के स्पष्ट संस्करणों को एक अलग स्थान पर स्थापित करने के लिए उपयोग करें
  • bundle execअपने आवेदन को चलाने के लिए उपयोग करें

6
इसके अलावा, व्यक्तिगत रूप से मुझे लगता है कि लोग rbenv / rvm का उपयोग करते हैं। यदि आपको एक ही मशीन पर माणिक के कई, अलग-थलग संस्करणों की आवश्यकता नहीं है - और आप शायद rbenv / rmm का उपयोग नहीं करते हैं। उनका "अमूर्त" मुफ्त में नहीं आता है; मैं गारंटी देता हूं कि आपको किसी बिंदु पर उन्हें डिबग करने में समय बिताना होगा। मेरी सलाह: बस अपने ऑपरेटिंग सिस्टम के पैकेज मैनेजर के साथ माणिक स्थापित करें। नवीनतम सबसे बड़ा है।
पीजे

6
क्या मैं कुछ भूल रहा हूँ? बुंडलर अभी भी डिफ़ॉल्ट रूप से संकुल प्रणाली को स्थापित करने की कोशिश करता है।
9

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

19

लगता है किसी ने भी रैनेव का उल्लेख नहीं किया है ।


rbenv एक रूबी प्रबंधक है, लेकिन यह एक पैकेज स्तर (virtualenv के बराबर) पर है, यह मूल रूप से एक रत्न प्रबंधक को एक आभासी env प्रदान करने में सक्षम होने की पेशकश नहीं करता है।
येकाट

16

मुझे लगता है कि आप सैंडबॉक्स पसंद करेंगे ।


9
पवित्र बकवास, वह फिर से लिखता है $HOME?! क्या हो जवाहरात की जरूरत है कि के लिए? दुखद बात यह है, कि मैंने नौकरी के लिए सबसे अच्छी चीज देखी है। यहां तक ​​कि बंडल मास्टर्स सिस्टम रूबी पथ में स्थापित करने के लिए चूक करता है।
क्रिस आर

6
सैंडबॉक्स को ~ 4 वर्षों में अद्यतन नहीं किया गया है (अंतिम प्रतिबद्ध दिसंबर 2008 में था), आरवीएम अभी भी सक्रिय विकास में है (अंतिम प्रतिबद्ध कल था)
dbr

16

मैं बुंडलर के साथ ऐसा करने के तरीके का उल्लेख करूंगा (जो मैं आरवीएम के साथ उपयोग करता हूं - आरवीएम माणिक और वैश्विक रत्नों के डिफ़ॉल्ट सेट का प्रबंधन करने के लिए, प्रोजेक्ट विशिष्ट रत्नों को संभालने के लिए बुंडलर)

bundler install --binstubs --path vendor

एक परियोजना के रूट में इस आदेश का चल रहा है अपने Gemfile से सूचीबद्ध जवाहरात स्थापित करते हैं, में libs रखा जाएगा ./vendor, और किसी भी निष्पादनयोग्य ./binऔर सभी requireरों (यदि आप का उपयोग करें bundle consoleया Bundler की आवश्यकता है) इन व्यय और libs दर्शाएंगे।

मेरे लिये कार्य करता है।


MacOS पर उन लोगों के लिए एक मूत टिप, अगर आप vendor.noindexअपने स्पॉटलाइट खोजों को पथ का नाम देते हैं तो प्रतिशोधी रत्नों से अनुक्रमित डेटा के साथ क्लॉट नहीं किया जाएगा।
14

1
यह वही है जो मैं भी करता हूं (साथ में rbenv, लेकिन यह एक और कहानी है), क्योंकि यह जेनेट और रूबी संस्करण को अलग करता है। कुछ भी स्थापित नहीं है और हर परियोजना में अच्छी तरह से घोषित सभी निर्भरताएं हैं। युक्ति: bundle config path vendorउस तर्क को कभी न भूलें।
नंदिलुगियो

15

यदि आपको केवल गैर-रूट के रूप में रत्नों को स्थापित करने की आवश्यकता है, तो GEM_HOMEपर्यावरण चर को स्थापित करने का प्रयास करें । फिर बस दौड़ो gem

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

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc

बहुत बढ़िया! OSX पर वह फ़ोल्डर छिपा हुआ है:export GEM_HOME=$HOME/.local/gems
ब्रूनो

1
यह उपयोग करने में आसान हो सकता है GEM_HOME=$HOME/.localइसलिए यह समान .binफ़ोल्डर साझा करता है । उस स्थिति में हमें अपने $PATHवेरिएबल को अपडेट नहीं करना है ।
ब्रूनो


अब तक सबसे साफ-सुथरी नो-डिपेंडेंसी अप्रोच जो मैंने अभी तक टूल इंस्टॉल करने के लिए देखी है जो अपडेट होने पर एक-दूसरे को नहीं तोड़ते हैं (जो कुछ बचा है वह आपके ~/.bashrcऔर आपके काम में एक उपनाम जोड़ रहा है)। +1
विरोधाभास

4

मैं direnv सलाह देते हैं । यह शेल के लिए एक पर्यावरण स्विचर है।

प्रत्येक संकेत से पहले यह वर्तमान और मूल निर्देशिका में ".envrc" फ़ाइल के अस्तित्व की जाँच करता है। यदि फ़ाइल मौजूद है (और अधिकृत है), इसे बैश सब-शेल में लोड किया गया है और सभी निर्यात किए गए वेरिएबल्स को फिर direnv द्वारा कैप्चर किया गया है और फिर वर्तमान शेल उपलब्ध कराया गया है।

यहां रूबी-इंस्टॉल के साथ डेरेनव का उपयोग करने का तरीका बताया गया है

+ रूबी-स्थापित

इस में जोड़ें ~/.direnvrc

use_ruby() {
  local ruby_root=$HOME/.rubies/$1
  load_prefix "$ruby_root"
  layout_ruby
}

माणिक-स्थापित करें ( brew install ruby-install) और माणिकों का एक समूह स्थापित करें।

ruby-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0

और फिर सुविधा के लिए सहानुभूति का एक जोड़ा बनाएं:

ln -s .rubies/1.9 ruby-1.9.3-p*
ln -s .rubies/2.0 ruby-2.0.0
ln -s .rubies/2.2 ruby-2.2.0

और अंत में किसी भी परियोजना में .envrc:

use ruby 2.0

यह सभी रत्नों को परियोजना की .direnv/rubyनिर्देशिका के तहत लाएगा (रत्नों को खोलना आसान बनाता है)। बंडलर रैपर बायनेरीज़ .direnv/bin(और नहीं bundle exec!) में डालेंगे ।

+ राबनेव

use rbenvकिसी भी .envrcफाइल में कमांड जोड़कर rbenv का उपयोग करना संभव है । यह rbenv को सक्रिय करेगा जो बदले में PATH में माणिक आवरण डाल देगा।

ध्यान दें कि इसके लिए काम करने के लिए .bashrc या .shshrc में rbenv इंस्टॉल करना आवश्यक नहीं है।

+ आरवीएम

यहाँ सबसे जटिल .envrc है जिसका उपयोग मैं रूबी परियोजनाओं पर करता हूँ:

rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin

rvm का उपयोग आपके लिए सही माणिक संस्करण का चयन करने के लिए किया जाता है

लेआउट कमांड स्वचालित रूप से कुछ सामान्य पर्यावरण चर निर्धारित करते हैं। अभी के लिए केवल रूबी लेआउट मौजूद है। यह क्या करता है GEM_HOME पर्यावरण चर सेट है और यह आपके पथ के लिए बिन निर्देशिका है। क्योंकि यह रूबी संस्करण पर निर्भर करता है, इसे "आरवीएम" के बाद कॉल करना सुनिश्चित करें। चूंकि प्रत्येक रूबी लेआउट निर्देशिका का अपना GEM_HOME है, इसलिए आपको rvm के रत्नों का उपयोग करने की आवश्यकता नहीं है।

PATH_add दिए गए सापेक्ष पथ का विस्तार और विस्तार करता है। उस मामले में, मैं इसका उपयोग अपनी खुद की बिन स्क्रिप्ट से बंडल बस्टबिन को अलग करने के लिए करता हूंbundle install --binstubs .direnv/bundler-bin

यदि आप यह जानना चाहते हैं कि वे आदेश वास्तव में क्या करते हैं, तो अब: बिल्ली direnv stdlib| कम से


2
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। - समीक्षा से
jezrael

@ jezrael आपकी टिप्पणी के लिए धन्यवाद!
शिन किम

1
सुपर, कोई बात नहीं।
jezrael

1

Mineshaft एक परियोजना है जो मैं कुछ समय से काम कर रहा हूं और विकास कार्य जारी रख रहा हूं।

यह दोनों आभासी वातावरण बनाने की क्षमता प्रदान करता है कि कैसे virtualenv काम करता है और रूबी को विश्व स्तर पर भी स्थापित कर सकता है।

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