Virtualenv: 'nounset'オプションが設定されている場合、activate.shは失敗します

作成日 2011年07月07日  ·  24コメント  ·  ソース: pypa/virtualenv

virtualenvをアクティブ化しようとすると、次のエラーが発生します。

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

これは、未設定の変数にアクセスするときにエラーをスローする_nounset_オプションを使用するようにBashを構成したために発生しています(ここを参照)

最も参考になるコメント

今のところ回避策—

set -o nounset

[...]

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

[...]

全てのコメント24件

この行を変更することでこれを修正できます:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
に:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
$ {VAR = DEFAULT}構文は、設定されている場合はVARを返し、設定されていない場合はDEFAULTを返します(このページを参照してください。空の文字列をデフォルトとして使用すると、期待どおりの動作が得られます。私が望むよりも少し読みにくくなります。しかし、それはトリックを行います。

実際には、すべての実存的なテストを書き直す必要があるため、これは不完全な修正です。 スクリプトの先頭にset -o nounsetを追加する方がはるかに簡単です。

私もこれを打った。

私も

スクリプトの内部の-uの設定を解除し、終了時に元の設定に戻す方法が理にかなっているのではないかと思います。

私はここでそうする方法を見つけようとしています-http://stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

プルリクエストが行われました-https://github.com/pypa/virtualenv/pull/357

私はします:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

に:

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

うん、これを自分で叩くだけ。

virtualenv==1.11.4実行しています。

今のところ回避策—

set -o nounset

[...]

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

[...]

これは、 if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; thenを使用するhttps://github.com/pypa/virtualenv/pull/723によって修正される可能性があります。

ただし、 $_OLD_VIRTUAL_PATH自体は#722で削除されることを意図していることに注意してください。 しかし、#723は他の変数でも修正されています。

:+1:

私もこれを打っています…。

このような簡単な問題が4年経っても解決しないのはちょっと変です。
beaumartinezの回避策は、今のところ最も簡単です。

これは#645で修正されています。

修理済み

@dstufft必要最小限のバージョンがインストールされていることを確認できるように、これが修正されたリリースを指定してください。 バグから、どのリリースに修正が含まれているかについてはまったく明らかではありません。

@ssbarnea上記のコメントに記載されているように、2015年8月12日に修正されたため、その日以降にリリースされたバージョンはすべてあります。 https://virtualenv.pypa.io/en/latest/changes/から、これは13.1.1を意味します(実際、そのバージョンの注記では、この変更について具体的に言及しています)。 その情報はすべて簡単に入手できるので、簡単な検索で見つけることができたでしょう(それが私がしたことです)。

悪いニュースがありますactivate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variableを取得したため、このバグを再度開く必要があります。これを修正する際に、厳密なbashを使用して仮想環境をアクティブ化しようとするテストを導入することが重要だと思います。

これはline 22: ZSH_VERSION: unbound variableにも当てはまります...そしてリストがどれくらい続くのか疑問に思っています...私の回避策のコマンドラインはひどく見え始めています:

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

もちろん、自分で環境を設定することも、Python実行可能ファイルのフルパス名を使用することもできます。

これについての議論を再開して申し訳ありませんが、ビルドサーバーにあるvirtualenvのバージョンをチェックしないという間違いを犯し、古いバージョン1.10.1という醜い発見をしました。 これは多くのバグにカウントされます。 明日アップグレードします。

謝罪は必要ありません。 実際、私はこの復活からいくつかのことを学びました
会話。

2017年3月7日火曜日午後3時9分、Sorin [email protected]
書きました:

これについての議論を再開して申し訳ありませんが、私は
ビルドサーバーと私が持っていたvirtualenvのバージョンをチェックします
醜い発見、古代のバージョン1.10.1を作りました。 これは
たくさんのバグ。 明日アップグレードします。


コメントしたのでこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js

現在のリリースでもバグが残っているようですので、 https://github.com/pypa/virtualenv/issues/1029として上げました。

このページは役に立ちましたか?
0 / 5 - 0 評価