BashではなくシェルでPython venvを有効にする方法は?

BashではなくシェルでPython venvを有効にする方法は?

ほとんどのチュートリアル/オンラインリソースでは、Python venvを有効にするかsource(bash組み込み)を使用することをお勧めします。.例えば、このページLinuxでは、次のことをお勧めします。

cd ~/<proj_name>

. bin/activate

(Windowsではcd\<proj_name>and activateのみ)

ただし、docker / Dockerfileでvenvを有効にする必要がありますが、bashを使用できない場合があります(たとえば、podman OCIイメージを使用するなど)。基本的にDebian ベースのディストリビューションなどのディストリビューション採用する人公開アカウント 668、以前のDockerfileにvenvのpipコマンドはありません。「この環境は外部で管理されています。」エラーが発生します。。今推奨されるアプローチは venv を使用するようです。

source特定のシェルに固有のものであるという事実を考えると、私の質問は次のようになります。

Linuxでは常にsourcevenvを使用する必要がありますかactivate

それでは、一般的な非bashシェルでvenvを有効にする正しい方法は何ですか、なぜですか?

特に、通常のDockerfileのpipコマンドでvenvを使用する正しい方法は何ですか?

ベストアンサー1

bin/activate.Bourneなどのシェル(70年代後半以降のすべてのシステム、すべてのash、dash、busybox sh(ashまたはmush)、ksh、pdksh、mksh、oksh、bosh、yash、zsh ...)で実行できます。どんな方法でも具体的ではありません。sourceshbash

bin/activate.cshforcshまたはtcshshell もあり、bin/activate.fishfor the fishshell もあります。

別のシェルを使用している場合は、これを直接実行する必要がありますが、環境変数を定義またはVIRTUAL_ENV更新PYTHONHOMEする問題なので、適応するのは難しくありません。PATH

または、いつでもshソースからシェルを再実行できます。bin/activateたとえば、rcpython-venvがサポートしていないように見えるシェルまたは派生物です。

exec sh -c '. /path/to/bin/activate && exec rc'

rc更新された環境を使用して実行が再実行されますsh

それにもかかわらず、コンテナには/bin/shbusybox、mksh、bashなどのBourneに似たコンテナがあります。

上記と同様に、この仮想環境を使用してコンテナでいくつかのコマンドを実行するには、次の手順を実行できます。

sh -c '. /path/to/venv/bin/active && exec "$0" "$@"' python3 /path/to/whatever.py

何らかの理由で単一のコンテナに異なる仮想環境が必要であるとします。ほとんどの場合、さまざまなコレクション、Pythonモジュール、またはPythonバージョンを含むさまざまなコンテナを使用できます。コンテナはすでに一種の仮想化形式であることを覚えておいてください。

おすすめ記事