私はPythonをAnacondaと一緒に使用していて、私はを私のMakefile
に入れたいと思っています。しかし、make test
を実行すると正しい環境が有効になると主張したいと思います。 conda
環境がアクティブになると、環境変数$(CONDA_DEFAULT_ENV)
が定義されます。仮想環境が有効になっていることを確認し、それに応じてMakefile内で動作します
最初に私がやった:私はmake test
を実行したとき
REPO_NAME = my_repo
define execute_in_env
source activate $(REPO_NAME); \
$1
endef
test:
$(call execute_in_env, pytest -v --ignore=src/foo)
この方法では、それは仮想環境を活性化し、内部テストを実行しました。問題は長さです。私は、make
がアクティブ化された仮想環境から実行されているかどうかをチェックしたいと思います。そのためにコードを変更しました:
.PHONY: test
REPO_NAME = my_repo
define execute_in_env =
[email protected] "Checking if in environment"
ifeq ($(CONDA_DEFAULT_ENV),$(REPO_NAME))
$1
else
source activate $(REPO_NAME); \
$1
endif
endef
test:
$(call execute_in_env, pytest -v --ignore=src/rebuydsutils)
この実装では、テストは行われません。私は、根本的な問題はdefine execute_in_env =
で=
である
make: Nothing to be done for `test'.
明確にするために、GNU make 3.82(2010年7月リリース)では 'define'で '= '記号を使用できる構文が追加されました。お使いのGNU makeのバージョンがそれより古い場合、この構文は使用できません。 – MadScientist
仮想環境から異なる実行可能ファイルを別のルールから呼び出すときに、関数が必要です。私は答えとして自分の修正を加えます。私はそれを受け入れることができるので気軽に更新してください:) – Dror
'$(call ...) 'を使うのではなく、どのレシピの前にでも簡単に' $(ACTIVATE_ENV)&&'を追加することができます。 – blackghost