मैं लिखने की कोशिश कर रहा हूं (जो मैंने सोचा था) एक साधारण बैश स्क्रिप्ट होगी जो:
- $ 1 पर एक नया वातावरण बनाने के लिए virtualenv चलाएं
- आभासी वातावरण को सक्रिय करें
- कुछ और सामान करें (django स्थापित करें, django-admin.py को virtualenv के पथ में जोड़ें, आदि)
चरण 1 काफी अच्छा काम करता है, लेकिन मैं virtualenv को सक्रिय करने के लिए प्रतीत नहीं कर सकता। Virtualenv से परिचित न होने वालों के लिए, यह एक activate
फाइल बनाता है जो वर्चुअल वातावरण को सक्रिय करता है। सीएलआई से, आप इसका उपयोग करके चलाते हैंsource
source $env_name/bin/activate
जहाँ $ env_name, जाहिर है, उस dir का नाम है जिसमें वर्चुअल env स्थापित है।
अपनी स्क्रिप्ट में, वर्चुअल वातावरण बनाने के बाद, मैं इस तरह से सक्रिय स्क्रिप्ट के लिए पथ संग्रहीत करता हूं:
activate="`pwd`/$ENV_NAME/bin/activate"
लेकिन जब मैं फोन करता हूं source "$activate"
, मुझे यह मिलता है:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
मुझे पता है कि $activate
सक्रिय स्क्रिप्ट के लिए सही रास्ता है, वास्तव में मैं यह भी परीक्षण करता हूं कि मेरे कॉल करने से पहले एक फ़ाइल है source
। लेकिन source
खुद इसे खोजने के लिए प्रतीत नहीं कर सकते। मैंने सीएलआई में मैन्युअल रूप से सभी चरणों को चलाने की कोशिश की है, जहां सब कुछ ठीक है।
मेरे शोध में मुझे यह स्क्रिप्ट मिली , जो कि मैं जैसा चाहता हूं, वैसा ही है, लेकिन बहुत सारी अन्य चीजें भी कर रहा हूं, जिनकी मुझे जरूरत नहीं है, जैसे ~ / .virtualenv निर्देशिका (या जो कुछ भी है) में सभी आभासी वातावरणों को संग्रहीत करना। $ WORKON_HOME)। लेकिन यह मुझे लगता है कि वह मूल रूप से उसी तरह का रास्ता बना रहा है activate
, और source "$activate"
मुझे बता रहा है।
यहाँ यह पूरी तरह से स्क्रिप्ट है:
#!/bin/sh
PYTHON_PATH=~/bin/python-2.6.1/bin/python
if [ $# = 1 ]
then
ENV_NAME="$1"
virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
activate="`pwd`/$ENV_NAME/bin/activate"
if [ ! -f "$activate" ]
then
echo "ERROR: activate not found at $activate"
return 1
fi
source "$activate"
else
echo 'Usage: djangoenv ENV_NAME'
fi
अस्वीकरण: मेरा बैश स्क्रिप्ट-फू बहुत कमजोर है। मैं सीएलआई में काफी सहज हूं, लेकिन कुछ बेहद मूर्खतापूर्ण कारण हो सकते हैं, जो काम नहीं कर रहे हैं।