Virtualenv: activate.sh schlÀgt fehl, wenn die Option 'nounset' gesetzt ist

Erstellt am 7. Juli 2011  Â·  24Kommentare  Â·  Quelle: pypa/virtualenv

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, eine virtuelle Umgebung zu aktivieren.

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

Dies geschieht, weil ich Bash so konfiguriert habe, dass es die Option _nounset_ verwendet, die beim Zugriff auf nicht gesetzte Variablen einen Fehler auslöst (siehe hier ).

Hilfreichster Kommentar

Problemumgehung fĂŒr jetzt—

set -o nounset

[...]

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

[...]

Alle 24 Kommentare

Ich kann das beheben, indem ich diese Zeile Àndere:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
zu:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
Das Konstrukt ${VAR=DEFAULT} gibt VAR zurĂŒck, wenn es gesetzt ist, und DEFAULT, wenn es nicht gesetzt ist (siehe diese Seite . Wir können dann die leere Zeichenfolge als Standard verwenden, was das erwartete Verhalten verursacht. Es ist etwas weniger lesbar, als ich möchte, aber es macht den Trick.

Eigentlich ist das eine lahme Lösung, da alle existenziellen Tests neu geschrieben werden mĂŒssen. Es ist viel einfacher, einfach set -o nounset am Anfang des Skripts hinzuzufĂŒgen.

Das habe ich auch getroffen.

Ich auch

Ich vermute, dass es vielleicht sinnvoll wĂ€re, das -u fĂŒr die Innereien des Skripts zu deaktivieren und dann die ursprĂŒngliche Einstellung wiederherzustellen, wenn es fertig ist.

Ich versuche hier einen Weg zu finden - http://stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

Pull-Anforderung gestellt – https://github.com/pypa/virtualenv/pull/357

Ich wĂŒrde tun:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

zu:

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

Yup, habe gerade selbst darauf geschlagen.

Laufen virtualenv==1.11.4 .

Problemumgehung fĂŒr jetzt—

set -o nounset

[...]

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

[...]

Dies könnte durch https://github.com/pypa/virtualenv/pull/723 behoben werden, das if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; then verwendet.

Bitte beachten Sie jedoch, dass $_OLD_VIRTUAL_PATH selbst in #722 entfernt werden soll. Aber #723 behebt es auch fĂŒr die anderen Variablen.

:+1:

ich schlage das auch....

Es ist irgendwie seltsam, dass ein so einfaches Problem nach vier Jahren nicht behoben ist.
Die Work-a-Round von Beaumartinez ist vorerst die einfachste.

Dies wird durch #645 behoben.

Fest

@dstufft könnten Sie bitte angeben, in welcher Version dies behoben wurde, damit wir sicherstellen können, dass wir die minimal benötigte Version installiert haben? Aus dem Bug geht ĂŒberhaupt nicht hervor, welches Release den Fix beinhaltet.

@ssbarnea Es wurde am 12. August 2015 behoben, wie in den Kommentaren oben angegeben, also jede Version, die nach diesem Datum veröffentlicht wurde. Von https://virtualenv.pypa.io/en/latest/changes/ bedeutet das 13.1.1 (und tatsĂ€chlich erwĂ€hnt der Hinweis fĂŒr diese Version diese Änderung ausdrĂŒcklich). Alle diese Informationen sind leicht verfĂŒgbar, sodass Sie sie wahrscheinlich mit einer kurzen Suche hĂ€tten finden können (das habe ich getan).

Ich habe einige schlechte Nachrichten: Dieser Fehler sollte erneut geöffnet werden, da ich jetzt activate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variable bekomme und wĂ€hrend ich dies behebe, denke ich, dass es wichtig ist, einen Test einzufĂŒhren, der versucht, die virtuelle Umgebung mit strikter Bash zu aktivieren

Dies gilt auch fĂŒr line 22: ZSH_VERSION: unbound variable ... und ich frage mich, wie lange die Liste gehen wĂŒrde ... meine Workaround-Befehlszeile sieht langsam pervers aus:

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

Sie können die Umgebung natĂŒrlich einfach selbst einrichten oder den vollstĂ€ndigen Pfadnamen der ausfĂŒhrbaren Python-Datei verwenden.

Tut mir leid, dass ich die Diskussion dazu wiedereröffne, ich habe den Fehler gemacht, die Versionen von virtualenv, die wir auf dem Build-Server hatten, nicht zu ĂŒberprĂŒfen, und ich habe eine hĂ€ssliche Entdeckung gemacht, eine alte Version 1.10.1. Dies wĂŒrde fĂŒr viele Fehler zĂ€hlen. Ich werde es morgen upgraden.

Keine Entschuldigung nötig; TatsÀchlich habe ich ein paar Dinge aus dieser Wiederbelebung gelernt
GesprÀch.

Am Dienstag, 7. MĂ€rz 2017 um 15:09 Uhr, Sorin Sbarnea [email protected]
schrieb:

Tut mir leid, dass ich die Diskussion wiedereröffne, ich habe den Fehler gemacht, es nicht zu tun
ÜberprĂŒfung der Versionen von virtualenv, die wir auf dem Build-Server hatten, und ich
eine hĂ€ssliche Entdeckung gemacht, eine uralte Version 1.10.1. Das wĂŒrde zĂ€hlen
viele Fehler. Ich werde es morgen upgraden.

—
Sie erhalten dies, weil Sie kommentiert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js
.

Es scheint, dass der Fehler auch in der aktuellen Version noch vorhanden ist, also habe ich ihn als https://github.com/pypa/virtualenv/issues/1029 angesprochen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen