Я намагаюся написати (що я думав, що це буде) простий скрипт, який буде:
- запустіть virtualenv, щоб створити нове середовище за 1 долар
- активувати віртуальне середовище
- зробити ще деякі речі (встановити django, додати django-admin.py на шлях virtualenv тощо)
Крок 1 працює досить добре, але я не можу, здається, активувати virtualenv. Для тих, хто не знайомий з virtualenv, він створює activate
файл, який активує віртуальне середовище. Від CLI ви запускаєте його за допомогоюsource
source $env_name/bin/activate
Де $ env_name, очевидно, - це ім'я режисури, в яку встановлено віртуальне оточення.
У своєму сценарії після створення віртуальної середовища я зберігаю шлях до сценарію активації таким чином:
activate="`pwd`/$ENV_NAME/bin/activate"
Але коли я телефоную source "$activate"
, я отримую таке:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Я знаю, що $activate
містить правильний шлях до сценарію активації, насправді я навіть перевіряю, що файл є там, перш ніж я дзвоню source
. Але, source
здається, сама не може його знайти. Я також спробував виконати всі кроки вручну в CLI, де все працює добре.
У своєму дослідженні я знайшов цей скрипт , який схожий на те, що я хочу, але також виконує багато інших речей, які мені не потрібні, як зберігання всіх віртуальних середовищ у каталозі ~ / .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
ВІДМОВА: Мій баш-скрипт-фу досить слабкий. Мені досить комфортно в CLI, але може бути якась надзвичайно дурна причина, що це не працює.