Virtualenv: activate.sh falha se a opção 'nounset' estiver definida

Criado em 7 jul. 2011  ·  24Comentários  ·  Fonte: pypa/virtualenv

Recebo o seguinte erro quando tento ativar um virtualenv.

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

Isso está acontecendo porque configurei o Bash para usar a opção _nounset_, que gera um erro ao acessar variáveis ​​não definidas (veja aqui )

Comentários muito úteis

Solução alternativa para agora—

set -o nounset

[...]

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

[...]

Todos 24 comentários

Eu posso corrigir isso alterando esta linha:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
para:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
A construção ${VAR=DEFAULT} retorna VAR se estiver definido e DEFAULT se não estiver (consulte esta página . Podemos então usar a string vazia como padrão, causando o comportamento esperado. É um pouco menos legível do que eu gostaria, mas faz o truque.

Na verdade, essa é uma correção esfarrapada, pois exige reescrever todos os testes existenciais. É muito mais fácil adicionar set -o nounset ao topo do script.

Eu acertei isso também.

Eu também

Estou suspeitando que talvez uma maneira de desmarcar o -u para as entranhas do script e, em seguida, restaurar a configuração original ao terminar faria sentido.

Estou tentando descobrir uma maneira de fazer isso aqui - http://stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

Solicitação de pull feita - https://github.com/pypa/virtualenv/pull/357

Eu faria:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

para:

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

Sim, acabei de acertar isso sozinho.

Correndo virtualenv==1.11.4 .

Solução alternativa para agora—

set -o nounset

[...]

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

[...]

Isso pode ser corrigido por https://github.com/pypa/virtualenv/pull/723 , que usa if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; then .

Por favor, note que $_OLD_VIRTUAL_PATH si deve ser removido em #722. Mas o #723 também corrige isso para as outras vars.

:+1:

Eu também estou acertando isso....

É meio estranho que um problema tão fácil não seja resolvido após quatro anos.
O work-a-round de beaumartinez é o mais simples por enquanto.

Isso é corrigido por #645.

Fixo

@dstufft você poderia especificar em qual versão isso foi corrigido para que possamos garantir que temos a versão mínima necessária instalada? A partir do bug não está claro qual versão inclui a correção.

@ssbarnea Foi corrigido em 12 de agosto de 2015, conforme observado nos comentários acima, portanto, qualquer versão lançada após essa data. De https://virtualenv.pypa.io/en/latest/changes/ isso significa 13.1.1 (e, de fato, a nota para essa versão menciona essa alteração especificamente). Todas essas informações estão facilmente disponíveis, então você provavelmente poderia tê-las encontrado com uma breve pesquisa (foi o que eu fiz).

Eu tenho algumas más notícias: este bug deve ser reaberto porque agora eu recebo activate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variable e enquanto conserto isso eu acho que é fundamental introduzir um teste que tente ativar o ambiente virtual usando o bash estrito

Isso também se aplica a line 22: ZSH_VERSION: unbound variable ... e imaginando quanto tempo a lista iria ... minha linha de comando de solução alternativa começando a parecer perversa:

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

É claro que você pode configurar o ambiente sozinho ou usar o nome completo do caminho do executável do Python.

Desculpe por reabrir a discussão sobre isso, cometi o erro de não verificar as versões do virtualenv que tínhamos no servidor de compilação e fiz uma descoberta feia, uma versão antiga 1.10.1. Isso contaria para muitos bugs. Vou atualizá-lo amanhã.

Nenhum pedido de desculpas necessário; Na verdade, aprendi algumas coisas com isso revivido
conversação.

Em terça-feira, 7 de março de 2017 às 15h09, Sorin Sbarnea [email protected]
escrevi:

Desculpe por reabrir a discussão sobre isso, cometi o erro de não
verificando as versões do virtualenv que tínhamos no servidor de compilação e eu
fez uma descoberta feia, uma versão antiga 1.10.1. Isso contaria para
muitos erros. Vou atualizá-lo amanhã.


Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js
.

Parece que o bug ainda existe mesmo na versão atual, então eu o levantei como https://github.com/pypa/virtualenv/issues/1029

Esta página foi útil?
0 / 5 - 0 avaliações