Як відобразити ім'я поточного Virtualenv?


20

Я використовую virtualenv, virtualenvwrapper, zsh, oh-my-zsh, термінатор, на CrunchBang.

Я намагаюся відобразити назву поточного virtualenvтак

workon example
(example)... 

Я спробував багато рішень, жодне з яких не працює, ось мій файл. Давно минулого разу, коли я використовував Linux для розробки Джанго, я забув, що раніше робив.

Зараз я бачу username@crunchbang, я не можу сказати, який саме virtualenv я використовую.


Я вважаю, ви запитуєте, як встановити своє підказку, щоб воно показувало, у якому віртуалі ви знаходитесь, правда?
slm

@slm так саме
Lynob

Відповіді:


11

Підказка Шелла

Усередині вашої virtualenvсередовища є файлом, bin/activate. Ви можете відредагувати цей файл, щоб змінити своє запит на те, що ви хочете, щоб він виглядав. Конкретно цей розділ файлу:

...
else
    PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
...

Змінна PS1- це спеціальна змінна, яка контролює, як буде виглядати підказка оболонки. Зміна його значення змінить ваш virtualenvзапит:

PS1="(this is my prompt) "

Приклад

  1. Створіть зразок середовища.

    $ virtualenv tst-env
  2. Під час використання virtualenvви зазвичай використовуєте джерело цього файлу.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Після внесення вищезазначених змін у змінну PS1у bin/activateфайлі тепер з'являється моє підказка:

    $ source bin/activate
    (tst-env)

Ось офіційні інструкції, як це зробити .


спробував зараз, не
виправив

ось мій файл активації pastebin.com/tZqdr1Yz
Lynob

Що відбувається, коли ви надсилаєте activateфайл? Ваш файл добре працював для мене.
slm

Я не бачу результатів, тому я не можу сказати, що відбувається, virtualenvінше працює, крім того, що я нічого не бачу, можливо, це .zshrcпроблема або virtualenvwrapper? чи можна це налагодити? зверніть увагу, у мене є 2 виконуваних файли virualenv, нормально, virtualenvі virtualenv-2.7це нормально, чи virtualenvзавантажувались двічі? і ось як я встановив virtualenv та virualenvwrapper у випадку, якщо це має значенняsudo pip install virtualenv
Lynob

@Fischer - я просто двічі перевірив це за допомогою, zshі він теж працює з цим, так що це, швидше за все, оточення. проблема. Давайте ігноруємо 2 налаштування virtualenv на даний момент. Для налагодження ви можете ввімкнути це, set -xу своїй оболонці, а потім знову запустити source activateкоманду. Ви повинні побачити PS1=рядки, де встановлюється підказка.
slm

3

Якщо ви використовуєте, virtualenvwrapperа zshу вашому ~/.virtualenvs/каталозі є ряд гачків zsh, які ви можете використовувати для налаштування свого середовища. Ось трохи інформації щодо них. Ви можете примусити оновлення до PS1цього, що додасть поточну роботу virtualenvдо запиту оболонки, додавши:

_OLD_VIRTUAL_PS1=$PS1
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
builtin \export PS1

до ~/.virtualenvs/postactivate. Щоб видалити тег deactivate, додавши:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

до ~/.virtualenvs/postdeactivate

Єдине (правдоподібне), що повинно це порушити, - це ресурси ~/.zshrcпід час роботи вvirtualenv


Я вважаю, що сценарій після деактивації має помилку. він повинен читати PS1 = $ _ OLD_VIRTUAL_PS1 вбудований \ експорт PS1
Грег Хілстон

virtualenvwrapper вже робить це за замовчуванням. У venv, створеному virtualenvwrapper, скрипт bin / activate містить код, який попередньо додає ім'я venv до zsh та bash-підказок!
Ерік Веструп

2

Ви не повинні редагувати свої ~/.zshrc.

Оскільки ви працюєте з virtualenvwrapperним, можна додавати параметри або гачки до $WORKON_HOME/post(de)activateфайлів.

Якщо ви хочете побачити більше деталей, зверніться тут .

Наведене вище посилання дозволяє мені зробити наступне:

У моєму випадку $WORKON_HOME=~/Envsтому, що я змінив цей шлях, коли встановив virtualenvwrapper; якщо ви цього не мали, ви повинні мати папку ~/.virtualenvs.

  1. Відкрийте файл, postactivateрозташований у$WORKON_HOME

  2. Додайте ці рядки:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Збережіть і насолоджуйтесь!

    Ви отримаєте щось подібне: зроблено

  4. (ДОДАТКОВО) Якщо ви хочете, ви можете відредагувати postdeactivateфайл, щоб додати цей рядок:

    RPROMPT="$_OLD_RPROMPT"

Здається, це скопійовано з офіційної документації
Том Хейл

0

Я просто перевірив його на ubuntu 14.04, і у мене була така ж проблема. Щоб виправити це, додайте це до свого .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

або запустити це в терміналі

echo source /usr/share/virtualenvwrapper/virtualenvwrapper.sh >> ~/.zshrc

У Mac OS XI довелося робити

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc

0

Якщо ви знаєте тему, яка використовується, ви можете додати функцію для отримання активованого базового імені VIRTUAL_ENV і використовувати його у змінній PROMPT у файлі * .zsh-тема, який знаходиться за адресою ~ / .oh-my-zsh / themes / і це повинно зробити трюк!

Для мене це була налаштована темою "oh-my-zsh", тобто "robbyrussels", яка була налаштована.

function virtualenv_info {
    [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
}

local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status} $(virtualenv_info) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

Додавання вищевказаного коду генерує нижченаведений результат:

введіть тут опис зображення

(kunkka.com) - це virtualenv, який я щойно деактивував.

Після редагування файлу теми не забудьте джерело .zshrc-файлу.

-> source ~/.zshrc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.