Jak zmienić domyślny monit virtualenv?
Jak zmienić domyślny monit Virtualenvwrapper? Domyślnie praca w konkretnym środowisku wirtualnym za pomocą polecenia "workon <_name_of_env_>" poprzedza nazwę virtualenv do twojego monitu. Może to działać źle, jeśli nie używasz domyślnego wiersza polecenia.
4 answers
Jeśli pracujesz na niestandardowym PS1 (jak dowiedziałem się tego problemu), polecam, aby wyłączyć monit zmiany, użyj export VIRTUAL_ENV_DISABLE_PROMPT=1
(Zobacz virtualenv docs), i zrobić swój własny monit virtualenv w celu dodania do PS1.
Zobacz ten fragment, którego użyłem:
function virtualenv_info(){
# Get Virtual Env
if [[ -n "$VIRTUAL_ENV" ]]; then
# Strip out the path and just leave the env name
venv="${VIRTUAL_ENV##*/}"
else
# In case you don't have one activated
venv=''
fi
[[ -n "$venv" ]] && echo "(venv:$venv) "
}
# disable the default virtualenv prompt change
export VIRTUAL_ENV_DISABLE_PROMPT=1
local VENV="\$(virtualenv_info)";
# the '...' are for irrelevant info here.
export PS1="... ${VENV} ..."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 15:49:07
Domyślnie, gdy przełączysz się na virtualenv za pomocą polecenia "workon ", virtualenvwrapper dodaje ciąg znaków wzdłuż linii "() " do wiersza polecenia. Problem polega na tym, że ustawiam wiersz Bash z liniami:
PROMPT_COLOR1='0;36m'
PROMPT_COLOR2='1;34m'
PS1='\n\[\033[$PROMPT_COLOR1\](\t)\[\033[$PROMPT_COLOR2\] \u @ \w \n\[\033[$PROMPT_COLOR1\]$ \[\033[0;39m\]'
, który daje wiersz polecenia w następujący sposób:
< old_line >
(19:11:05) kevin @ ~/research
$
Przejście do nowego środowiska wirtualnego z "workon " zmieniło wiersz polecenia na coś w stylu:
< old_line >
(< name_of_env >)
(19:11:05) kevin @ ~/research
$
Który był bardziej bałagan niż chciałem i zły kolor do rozruchu. Liczyłem na coś w stylu:
< old_line >
(< name_of_env >) (19:11:05) kevin @ ~/research
$
Ian Bicking wcześniej zauważył, że virtualenvwrapper ' s Hooki były rozwiązaniem ale pomyślałem, że opublikuję mój rzeczywisty kod, aby Może Zaoszczędzić komuś jeszcze minutę w dół linii.
Po prostu edytowałem plik $WORKON_HOME / postactivate, aby zawierał te linie:
# color virtualenv name properly and put it after the \n if there is one at the start of the prompt
if [ ${_OLD_VIRTUAL_PS1:0:2} == '\n' ]; then
PS1="\n\[\033[$PROMPT_COLOR1\](`basename \"$VIRTUAL_ENV\"`) ${_OLD_VIRTUAL_PS1:2:${#_OLD_VIRTUAL_PS1}}"
else
PS1="\[\033[$PROMPT_COLOR1\](`basename \"$VIRTUAL_ENV\"`) $_OLD_VIRTUAL_PS1 "
fi
I voila! Kolor i lokalizacja są poprawne, a nawet działa, gdy przełączasz się bezpośrednio z jednego wirtualne środowisko do innego (czego się nie spodziewałem).Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:58
Myślę, że najprostszym rozwiązaniem jest:
Dodaj do ~/.virtualenvs/postactivate
:
PS1="\[\e[1;33;45m\] (`basename \"$VIRTUAL_ENV\"`) \[\e[0m\]$_OLD_VIRTUAL_PS1"
Pochodzi z: http://wiki.hackzine.org/development/python/virtualenv.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 14:23:42
Zastosowałem @ ivanalejandro0 rozwiązanie poprzez odchudzanie funkcji trochę:
function virtualenv_info {
# Get Virtual Env
if [[ -n "$VIRTUAL_ENV" ]]; then
# Strip out the path and just leave the env name
echo "(venv:${VIRTUAL_ENV##*/})"
fi
Lub jeśli czujesz się naprawdę chwiejny:
function virtualenv_info {
[[ -n "$VIRTUAL_ENV" ]] && echo "(venv:${VIRTUAL_ENV##*/})"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:18