
私は次のMakefileを持っています
env:
source venv/bin/activate
make env
Python仮想環境をアクティブにしようとすると、次のエラーが発生します。
source venv/bin/activate make: source: そのようなファイルまたはディレクトリはありません make: *** [env] エラー 1
しかし、source venv/bin/activate
シェルでコピーして実行すると、正常に実行されます。Makefile 内で現在のディレクトリを設定する必要がありますか?
答え1
source
はシェル組み込みコマンドであり、シェル以外のどこからでも起動できる実行ファイルではありません。source
ファイルの内容を読み取り、実行します。現在のシェルでは、新しいシェルを起動せずに。
その目的は、現在のシェルの状態を変更することです ( だけの場合sh venv/bin/activate
、シェルはactivate
スクリプトの内容も実行しますが、その後完了して終了します)。
しかし、あなたがやりたいのはmake
プログラムの状態を変更するactivate
からどのような方法で生成したシェルでスクリプトを実行してもmake
、 が参照する環境については何も変更されませんmake
。
これは、別のプログラム (B) によって起動されたすべてのプログラム (A) が、起動プログラム (B) の環境の独自のコピーを取得するためです。プログラム (A) は、起動プログラム (B) の環境に影響を与えることなく、その環境を自由に変更できます。
つまり、あなたがやりたいことは、理論上も実現できないのです。
venv 内で Makefile を実行する必要がある場合は、activate
最初にスクリプトをソースし、変更されたシェルから起動する必要がありますmake
。その逆ではありません。