VirtualEnv запускается из скрипта bash - PullRequest
8 голосов
/ 03 августа 2011

Я пытаюсь написать, какой должен быть супер простой скрипт bash. В основном активируйте виртуальную среду и затем перейдите в рабочий каталог. Задача, которую я много выполняю, и оправдывающая одну команду, имела смысл.

В основном ...

#!/bin/bash
source /usr/local/turbogears/pps_beta/bin/activate
cd /usr/local/turbogears/pps_beta/src

Однако, когда он запускается, он просто сбрасывает обратно в оболочку, и я все еще в каталоге, из которого я запускал скрипт, а среда не активирована.

Ответы [ 4 ]

21 голосов
/ 03 августа 2011

Все, что вам нужно сделать, это запустить ваш скрипт с помощью команды source.Это потому, что команда cd является локальной для оболочки, которая ее запускает.Когда вы запускаете скрипт напрямую, запускается новая оболочка, которая завершается, когда достигает конца файла скрипта.Используя исходную команду, вы указываете оболочке выполнять инструкции скрипта напрямую.

1 голос
/ 26 мая 2012

Я полагаю, вы хотите, чтобы ваш сценарий был динамичным, но в качестве быстрого решения при работе с новой системой я создаю псевдоним.

начинай то есть

env называется 'py1' и находится в ~ / envs / py1 / с репозиторием расположение в ~ / proj / py1 /

alias py1 = 'source ~ / envs / py1 / bin / activ; cd ~ / proj / py1 /;

конец т.е. 1010 *

Теперь вы можете получить доступ к своему проекту и virtualenv, набрав py1 из любой точки CLI.

Я знаю, что это далеко не идеально, нарушает DRY и многие другие концепции программирования. Это просто быстрый и грязный способ быстрого доступа к вашей среде и проекту без необходимости установки переменных.

1 голос
/ 04 августа 2011

Значение cd является локальным по отношению к текущему сценарию, который заканчивается, когда вы падаете в конец файла.

То, что вы пытаетесь сделать, не является «супер простым», потому что вы хотитепереопределите это поведение.

Посмотрите на exec для замены текущего процесса на процесс по вашему выбору.

Для подачи команд в интерактивный Bash, посмотрите опцию --rcfile.

0 голосов
/ 01 сентября 2012

Я знаю, что опаздываю к игре, но могу ли я предложить использовать virtualenvwrapper? Он предоставляет хороший крючок bash, который, кажется, делает именно то, что вы хотите.

Ознакомьтесь с этим уроком: http://blog.fruiapps.com/2012/06/An-introductory-tutorial-to-python-virtualenv-and-virtualenvwrapper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...