仮想環境のしくみ
Python インタプリタが仮想環境で実行しているとき、sys.prefix と sys.exec_prefix は仮想環境のディレクトリを指し示し、 sys.base_prefix と sys.base_exec_prefix は仮想環境の作成に使われたベース Python のディレクトリを指し示します。 sys.prefix != sys.base_prefix を調べれば、現在のインタプリタが仮想環境で実行しているかを判定できます。
仮想環境のactivate(sourceする)
This will prepend that directory to your PATH, so that running python will invoke the environment's Python interpreter and you can run installed scripts without having to use their full path.
「そのディレクトリを環境変数PATHの先頭に追加」
「(それにより)実行されるpythonコマンドは仮想環境のPythonインタプリタを呼び出す」
「(また)フルパスを使う必要なくインストールされたスクリプトを実行できる」
Python を呼び出すときに仮想環境の Python インタプリタへのフルパスを指定すれば良いだけなので、仮想環境をアクティベートする 必要 はありません。
シバンの例:#!/<path-to-venv>/bin/python
仮想環境にインストールされたスクリプトは仮想環境がアクティベートされていることを前提とすべきではないため、shebang の行は仮想環境のインタプリタへの絶対パスを含みます。
シバンに言及した警告より
この(※shebangの行は絶対パス)ため、本質的に、仮想環境は一般の場合ポータブルではありません。
いつでも仮想環境を再作成できる簡単な方法を持っておくべきです(例えば、requirements.txt という requirements ファイルがあれば、仮想環境の pip を用いて、pip install -r requirements.txt を呼び出すことで、仮想環境が必要とするすべてのパッケージをインストールできます)
何らかの理由で仮想環境を別の場所に移動する必要がある場合は、新しい場所で仮想環境を再作成し、古い場所にある仮想環境を削除してください。