¿Cómo cambio el indicador predeterminado de virtualenv?
¿Cómo se cambia el prompt predeterminado de Virtualenvwrapper? De forma predeterminada, trabajar en un entorno virtual particular con un comando como "workon <_name_of_env_>" antepone el nombre del virtualenv a su solicitud. Esto puede funcionar mal si no está utilizando un símbolo del sistema predeterminado.
4 answers
Si está trabajando en un PS1 personalizado (como cuando descubrí este problema), le recomiendo deshabilitar el cambio del prompt, usar export VIRTUAL_ENV_DISABLE_PROMPT=1
(ver virtualenv docs) y hacer su propio prompt virtualenv para agregarlo a su PS1.
Vea este fragmento que he usado:
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 15:49:07
De forma predeterminada, cuando cambia a un virtualenv con el comando "workon ", virtualenvwrapper antepone una cadena a lo largo de las líneas de "() " a su símbolo del sistema. El problema es que establezco mi prompt Bash con las líneas:
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\]'
Que produce un símbolo del sistema en las líneas de:
< old_line >
(19:11:05) kevin @ ~/research
$
Cambiar a un nuevo entorno virtual con "workon " convirtió el símbolo del sistema en algo como:
< old_line >
(< name_of_env >)
(19:11:05) kevin @ ~/research
$
Que era más desordenado de lo que quería y el color equivocado para arrancar. Esperaba algo como:
< old_line >
(< name_of_env >) (19:11:05) kevin @ ~/research
$
Ian Bicking ha señalado anteriormente que los ganchos de virtualenvwrapper eran la solución pero pensé que podría publicar mi código real para tal vez salvar a alguien más un minuto en la línea.
Simplemente edité el archivo WORK WORKON_HOME / postactivate para incluir estas líneas:
# 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
Y voila! El color y la ubicación son correctos e incluso funciona cuando se cambia directamente de uno entorno virtual a otro (que no me había esperado).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:58
Creo que la siguiente es la solución más simple:
Añádase a ~/.virtualenvs/postactivate
lo siguiente:
PS1="\[\e[1;33;45m\] (`basename \"$VIRTUAL_ENV\"`) \[\e[0m\]$_OLD_VIRTUAL_PS1"
Tomado de: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-03 14:23:42
Adopté la solución de @ ivanalejandro0 adelgazando un poco la función:
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
O si te sientes realmente hackeado:
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:18