2011-09-10 14 views
34

मैं नीचे एक तरह एक खोल स्क्रिप्ट के माध्यम से एक virtualenv को सक्रिय करने की कोशिश की काम करने के लिए प्रतीत नहीं होता है, लेकिन यह काम करने के लिए प्रतीत नहीं होताएक खोल स्क्रिप्ट का उपयोग कर एक virtualenv सक्रिय कर रहा है,

#!/bin/sh 
source ~/.virtualenvs/pinax-env/bin/activate 

मैं निम्नलिखित त्रुटि मिलती है

$ sh virtualenv_activate.sh 
virtualenv_activate.sh: 2: source: not found 

लेकिन अगर मैं टर्मिनल पर एक ही आदेश दर्ज यह

$ source ~/.virtualenvs/pinax-env/bin/activate 
(pinax-env)[email protected]:$ 

तो मैं बदल काम करने के लिए लगता है

#!/bin/bash 
source ~/.virtualenvs/pinax-env/bin/activate 

को खोल स्क्रिप्ट का सुझाव दिया और

$ bash virtualenv_activate.sh 
[email protected]:$ 

इस्तेमाल किया स्क्रिप्ट चलाने के लिए के रूप में।

वह एक त्रुटि फेंक नहीं है लेकिन न तो यह है कि आभासी env

को सक्रिय तो कैसे इस समस्या को हल करने के लिए पर कोई सुझाव?

पुनश्च: मैं उपयोग कर रहा हूँ उबंटू 11.04

+1

कोशिश 'बैश virtualenv_activate.sh' – arunkumar

+1

आप विस्तृत और एक जवाब के रूप में पोस्ट कृपया कर सकते हैं। – Gautam

उत्तर

39

श (वास्तव में बैश चलाता है, हालांकि कुछ सिस्टम केवल पार्टी की योजना बनाई श लिंक है, तो श चल) बैश के रूप में ही नहीं है। आप बाश के एक पानी के नीचे संस्करण के रूप में sh के बारे में सोच सकते हैं। एक चीज जो झटके में है वह शॉर्ट "स्रोत" कमांड नहीं है। यही कारण है कि आपको वह त्रुटि मिल रही है ... स्रोत आपके बैश खोल में ठीक चलाता है। लेकिन जब आप sh का उपयोग करके अपनी स्क्रिप्ट शुरू करते हैं, तो आप एक सबप्रोसेस में स्क्रिप्ट में स्क्रिप्ट चलाते हैं। चूंकि वह स्क्रिप्ट sh में चल रही है, इसलिए "स्रोत" नहीं मिला है।

समाधान स्क्रिप्ट को बदले में चलाने के लिए है। पहली पंक्ति में बदलें ...

#!/bin/bash 

फिर से चलाने ...

./virtualenv_activate.sh 

... या ...

/bin/bash virtualenv_activate.sh 

संपादित करें:

यदि आप वर्चुअलएव के सक्रियण को उस शेल को बदलने के लिए चाहते हैं जिसे आप स्क्रिप्ट कहते हैं, तो आपको इसकी आवश्यकता है "स्रोत" या "डॉट ऑपरेटर" का प्रयोग करें। यह, कि स्क्रिप्ट (और इसलिए वर्तमान पर्यावरण परिवर्तन) वर्तमान खोल में चलाया जाता है यह सुनिश्चित करता है ...

source virtualenv_activate.sh 

... या ...

. virtualenv_activate.sh 

एक पक्ष नोट के रूप में यह है वर्चुअलएन्व हमेशा क्यों कहता है कि आपको इसकी सक्रिय स्क्रिप्ट चलाने के लिए "स्रोत" का उपयोग करने की आवश्यकता है।  

+1

या स्रोत के समतुल्य शेल का उपयोग करें, यानी '। envfile', अक्सर 'डॉट द एनवीफाइल' के रूप में प्रस्तुत किया जाता है। शुभकामनाएं ;-) – shellter

+1

धन्यवाद लेकिन यह समस्या को हल करने के लिए प्रतीत नहीं होता है, जब मैं बैश का उपयोग करता हूं तो यह कोई त्रुटि नहीं फेंकता है लेकिन न ही यह वर्चुअलएन्व को सक्रिय करता है। जब आप इन लिपियों तरह से मैं दिखाया है चलाते समय .envFile – Gautam

+5

पर विस्तृत कृपया सकते हैं, यह वास्तव में एक नई खोल बनाता है, और है कि खोल में स्क्रिप्ट चलाता है। चूंकि "स्रोत" स्क्रिप्ट का पूरा बिंदु वर्तमान खोल को बदलना है, यह उद्देश्य को हरा देता है। "स्रोत virtualenv_activate.sh" या "virtualenv_activate.sh" का उपयोग करके अपनी स्क्रिप्ट चलाएं (उस पहली अवधि के बाद स्थान देखें)। \t ': यहाँ –

3

source बैश में एक अंतर्निहित खोल कमांड है, और sh में उपलब्ध नहीं है। अगर मुझे सही याद है तो आभासी env बहुत सारे पथ और पर्यावरण चर मैनिप्ल्यूशन करता है। इसे bash virtualenv_blah.sh के रूप में भी चलाना काम नहीं करेगा क्योंकि यह सब-शैल के अंदर पर्यावरण को बनाएगा।

. virtualenv_activate.sh या source virtualenv_activate.sh आज़माएं यह मूल रूप से आपके वर्तमान वातावरण में चलाने के लिए स्क्रिप्ट प्राप्त करता है और वर्चुअलएन्व के सक्रियण द्वारा संशोधित सभी पर्यावरण चर उपलब्ध होंगे।

एचटीएच।

संपादित करें: यह लिंक है जिसे मदद कर सकता है है - http://ss64.com/bash/period.html

4

मैक ओएस एक्स पर अपने प्रस्तावों से काम नहीं कर लगता है।

मैंने इसे इस तरह से किया है। नहीं I'am बहुत और समाधान के साथ खुश है, लेकिन यह वैसे भी यहाँ का हिस्सा आशा, कि शायद किसी को सुझाव देगा बेहतर:

activate.sh में मैं

echo 'source /Users/andi/.virtualenvs/data_science/bin/activate' 

है मैं द्वारा निष्पादन नियंत्रण दिया जाएगा: chmod +x activate.sh

और मैं इस तरह से निष्पादित करें:

`./activate.sh` 

ASCII कोड 96 = `के रूप में paranthesis देखते हैं ध्यान दें कि (Grav ई लहजे)

संबंधित मुद्दे