Virtualenv: activar.sh falla si la opción 'nounset' está configurada

Creado en 7 jul. 2011  ·  24Comentarios  ·  Fuente: pypa/virtualenv

Recibo el siguiente error cuando intento activar un virtualenv.

$ source test-env/bin/activate
-bash: _OLD_VIRTUAL_PATH: unbound variable

Esto sucede porque configuré Bash para usar la opción _nounset_, que arroja un error al acceder a las variables no configuradas (ver aquí )

Comentario más útil

Solución alternativa por ahora:

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

Todos 24 comentarios

Puedo arreglar esto cambiando esta línea:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
para:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
La construcción ${VAR=DEFAULT} devuelve VAR si está configurado y DEFAULT si no lo está (consulte esta página) . Luego, podemos usar la cadena vacía como predeterminada, lo que provoca el comportamiento esperado. Es un poco menos legible de lo que me gustaría, pero hace el truco.

En realidad, esa es una solución poco convincente, ya que requiere reescribir todas las pruebas existenciales. Es mucho más fácil simplemente agregar set -o nounset en la parte superior de la secuencia de comandos.

Toqué esto también.

Yo también

Sospecho que tal vez tendría sentido una forma de desarmar -u para las entrañas del script, y luego hacer que restaure la configuración original cuando termine.

Estoy tratando de encontrar una manera de hacerlo aquí: http://stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

Solicitud de extracción realizada: https://github.com/pypa/virtualenv/pull/357

Yo lo haría:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

para:

if [ -n "${_OLD_VIRTUAL_PATH-}" ] ; then
${var-DEFAULT}  If var not set, evaluate expression as $DEFAULT *

Sí, solo golpea esto yo mismo.

Ejecutando virtualenv==1.11.4 .

Solución alternativa por ahora:

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

Esto podría arreglarse con https://github.com/pypa/virtualenv/pull/723 , que usa if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; then .

Sin embargo, tenga en cuenta que $_OLD_VIRTUAL_PATH en sí mismo debe eliminarse en #722. Pero #723 también lo arregla para las otras vars.

:+1:

yo tambien le pego a esto....

Es un poco extraño que un problema tan fácil no se solucione después de cuatro años.
La ronda de trabajo de beaumartinez es la más simple por ahora.

Esto se soluciona con el #645.

Reparado

@dstufft , ¿podría especificar en qué versión se solucionó esto para que podamos asegurarnos de que tenemos instalada la versión mínima necesaria? Desde el error no está nada claro con respecto a qué versión incluye la corrección.

@ssbarnea Se corrigió el 12 de agosto de 2015, como se indica en los comentarios anteriores, por lo que cualquier versión lanzada después de esa fecha. De https://virtualenv.pypa.io/en/latest/changes/ eso significa 13.1.1 (y de hecho la nota para esa versión menciona este cambio específicamente). Toda esa información está fácilmente disponible, por lo que probablemente podría haberla encontrado con una breve búsqueda (eso es lo que hice).

Tengo malas noticias: este error debe reabrirse porque ahora obtengo activate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variable y, mientras soluciono esto, creo que es fundamental introducir una prueba que intente activar el entorno virtual usando bash estricto.

Esto también se aplica a line 22: ZSH_VERSION: unbound variable ... y me pregunto cuánto durará la lista... mi línea de comando de solución alternativa comienza a parecer perversa:

PS1="${{PS1:-}}" _OLD_VIRTUAL_PATH="${{_OLD_VIRTUAL_PATH:-}}" _OLD_VIRTUAL_PYTHONHOME="${{_OLD_VIRTUAL_PYTHONHOME:-}}" source "$VENV/bin/activate"

Por supuesto, puede configurar el entorno usted mismo o usar la ruta completa del ejecutable de Python.

Perdón por reabrir la discusión sobre esto, cometí el error de no verificar las versiones de virtualenv que teníamos en el servidor de compilación e hice un descubrimiento feo, una versión antigua 1.10.1. Esto contaría para muchos errores. Voy a actualizarlo mañana.

No es necesario disculparse; De hecho, aprendí algunas cosas de este revivido.
conversacion.

El martes 7 de marzo de 2017 a las 15:09, Sorin Sbarnea [email protected]
escribió:

Perdón por reabrir la discusión sobre esto, cometí el error de no
comprobando las versiones de virtualenv que teníamos en el servidor de compilación y yo
hizo un feo descubrimiento, una antigua versión 1.10.1. Esto contaría para
un montón de errores Voy a actualizarlo mañana.


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js
.

Parece que el error aún existe incluso en la versión actual, por lo que lo planteé como https://github.com/pypa/virtualenv/issues/1029

¿Fue útil esta página
0 / 5 - 0 calificaciones