
ほとんどのチュートリアル/オンラインリソースでは、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では常にsource
venvを使用する必要がありますかactivate
?
それでは、一般的な非bashシェルでvenvを有効にする正しい方法は何ですか、なぜですか?
特に、通常のDockerfileのpipコマンドでvenvを使用する正しい方法は何ですか?
答え1
bin/activate
.
Bourneなどのシェル(70年代後半以降のすべてのシステム、すべてのash、dash、busybox sh(ashまたはmush)、ksh、pdksh、mksh、oksh、bosh、yash、zsh ...)で実行できます。どんな方法でも具体的ではありません。source
sh
bash
bin/activate.csh
forcsh
またはtcsh
shell もあり、bin/activate.fish
for the fish
shell もあります。
別のシェルを使用している場合は、これを直接実行する必要がありますが、環境変数を定義またはVIRTUAL_ENV
更新PYTHONHOME
する問題なので、適応するのは難しくありません。PATH
または、いつでもsh
ソースからシェルを再実行できます。bin/activate
たとえば、rc
python-venvがサポートしていないように見えるシェルまたは派生物です。
exec sh -c '. /path/to/bin/activate && exec rc'
rc
更新された環境を使用して実行が再実行されますsh
。
それにもかかわらず、コンテナには/bin/sh
busybox、mksh、bashなどのBourneに似たコンテナがあります。
上記と同様に、この仮想環境を使用してコンテナでいくつかのコマンドを実行するには、次の手順を実行できます。
sh -c '. /path/to/venv/bin/active && exec "$0" "$@"' python3 /path/to/whatever.py
何らかの理由で単一のコンテナに異なる仮想環境が必要であるとします。ほとんどの場合、さまざまなコレクション、Pythonモジュール、またはPythonバージョンを含むさまざまなコンテナを使用できます。コンテナはすでに一種の仮想化形式であることを覚えておいてください。