次の簡単な例のように、bash スクリプトで virtualenvwrapper 関数を使用できるように、 virtualenvwrapper を調達しています。
実行中のdo_some ve_name branch_name
呼び出し:
#! /bin/bash
# some script that takes parameters
source /etc/bash_completion.d/virtualenvwrapper # the magic of sourcing
workon $1 # pick a venv
cd /some/project/path
git checkout $2 # pick a branch
python do_something.py
これは機能します (そして、仮想環境が終了したらドロップアウトしてもかまいません。実際、私はそれを好みます)。ただし、既に仮想環境にいる場合は、次のようになります。
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/home/username/.virtualenvs/ve_name/bin/python and that PATH is set properly.
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader
したがって、現在の仮想環境を無効にするのを時々忘れると仮定しましょう。私はこれを次のように解決しようとしました:
#! /bin/bash
# some advanced script that takes parameters
deactivate
source /etc/bash_completion.d/virtualenvwrapper # the magic of sourcing
workon $1 # pick a venv
...
しかし、現在 virtualenv にいるかどうかに関係なく、次のエラーが発生します (また、誤って virtualenv にいる場合は非アクティブ化されません。これは解決したい問題です):
/path/to/scripts/do_some: line 4: deactivate: command not found
では、virtualenvwrapper コマンドをソースする前に、既に virtualenv にいることを防ぐにはどうすればよいでしょうか?