Активация VirtualEnv с использованием оболочки script, похоже, не работает
Я попытался активировать VirtualEnv через оболочку script, как показано ниже, но она не работает,
#!/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]:$
Итак, я изменил оболочку script на
#!/bin/bash
source ~/.virtualenvs/pinax-env/bin/activate
как предложено и используется
$ bash virtualenv_activate.sh
[email protected]:$
для запуска script.
Это не вызывает ошибку, но также не активирует виртуальный env
Итак, какое-нибудь предложение о том, как решить эту проблему?
PS: Я использую Ubuntu 11.04
Ответы
Ответ 1
sh не совпадает с bash (хотя некоторые системы просто связывают sh с bash, поэтому запуск sh фактически выполняется bash). Вы можете думать о sh как опускающейся версии bash. Одна вещь, которая bash имеет, что sh не является "исходной" командой. Вот почему вы получаете эту ошибку... источник отлично работает в вашей оболочке bash. Но когда вы запускаете свой script с помощью sh, вы запускаете script в оболочке в подпроцессе. Поскольку script работает в sh, "источник" не найден.
Решение состоит в том, чтобы запустить script в bash. Измените первую строку на...
#!/bin/bash
Затем запустите с...
./virtualenv_activate.sh
... или...
/bin/bash virtualenv_activate.sh
Edit:
Если вы хотите, чтобы virtualenv активировал оболочку, которую вы вызываете script, вам нужно использовать "источник" или "оператор точки". Это гарантирует, что script запускается в текущей оболочке (и, следовательно, изменяет текущую среду)...
source virtualenv_activate.sh
... или...
. virtualenv_activate.sh
В качестве примечания, поэтому virtualenv всегда говорит, что вам нужно использовать "источник" для запуска активации script.
Ответ 2
В Mac OS X ваши предложения, похоже, не работают.
Я сделал это так. Я не очень доволен решением, но поделись им в любом случае и надеюсь, что, возможно, кто-то предложит лучший вариант:
В activate.sh
у меня есть
echo 'source /Users/andi/.virtualenvs/data_science/bin/activate'
Я предоставляю разрешения на выполнение: chmod +x activate.sh
И я выполняю этот путь:
`./activate.sh`
Обратите внимание, что есть паратезис в виде кода ASCII 96 = `(Grave accent)
Ответ 3
source
- встроенная команда оболочки в bash и недоступна в sh. Если я правильно помню, тогда виртуальный env выполняет много манипуляций по пути и среде. Даже запуск его как bash virtualenv_blah.sh
не работает, так как это просто создаст среду внутри суб-оболочки.
Попробуйте . virtualenv_activate.sh
или source virtualenv_activate.sh
, это в основном запускает script для запуска в вашей текущей среде, и будут доступны все переменные среды, модифицированные virtualenv activate.
НТН.
Изменить: вот ссылка, которая может помочь - http://ss64.com/bash/period.html