Использование виртуальных сред Python с Terminator

С помощью Terminator пользователь может определять макеты в файле конфигурации. С помощью этих макетов пользователь может установить команду, которая будет выполняться при запуске. Так, например, можно создать макет, в котором терминал автоматически выполняет ls следующим образом (обратите внимание на команду bash, чтобы избежать закрытия терминала):

command = "ls; bash"

Теперь, как я могу вместо этого заставить Terminator загружать виртуальную среду Python? Сохраняя, конечно, консоль bash активной с загруженной средой.

Примечание

Тривиальный способ:

command = "workon my_env; bash"

или его эквивалент source my_env/bin/activate (без использования virtualenvwrapper) не будет работать.


person Peque    schedule 20.07.2015    source источник


Ответы (1)


Хитрость заключается в том, чтобы сделать все с помощью «одной» команды: bash. Воспользовавшись его опцией -i (интерактивной) и используя пользовательский --rcfile, в котором PROMPT_COMMAND установлено все, что мы хотим выполнить. Результат будет таким:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="workon my_env; unset PROMPT_COMMAND"') -i"

Объяснение

  • Мы выполняем bash в интерактивном (-i) режиме.
  • Мы выполняем команды из пользовательского командного файла (--rcfile) вместо .bashrc.
  • Этот файл создается с содержимым .bashrc плюс еще одна команда.
  • Эта дополнительная команда экспортирует PROMPT_COMMAND со значением «все, что мы хотим выполнить». В данном случае: workon my_env.
  • PROMPT_COMMAND сбрасывается сразу после первого выполнения, чтобы избежать многократного выполнения после каждого взаимодействия с оболочкой.

Пользовательскую команду можно легко расширить, просто отредактировав часть workon my_env. Так, например, если вы хотите автоматически выполнять ls apppart при загрузке виртуальной среды, вы должны вместо этого написать workon my_env; ls.

person Peque    schedule 20.07.2015
comment
к сожалению, у меня это не работает, я получаю ошибку /bin/bash: =: command not found /bin/bash: line 0: unset: ´PROMPT_COMMAND') -i': not a valid identifier - person Asara; 08.10.2018
comment
Это, наконец, работает и для меня. Есть ли шанс на самом деле также отменить эту команду? мой работает вечно. - person Flowkap; 15.11.2019