【发布时间】:2016-12-17 02:44:17
【问题描述】:
我想使用 makefile 来构建我的项目环境,使用 makefile 和 anaconda/miniconda,所以我应该能够克隆 repo 并简单地运行 make myproject
myproject: build
build:
@printf "\nBuilding Python Environment\n"
@conda env create --quiet --force --file environment.yml
@source /home/vagrant/miniconda/bin/activate myproject
但是,如果我尝试这样做,我会收到以下错误
制作:来源:找不到命令
make: *** [来源] 错误 127
我已寻找解决方案,但 [this question/answer(How to source a script in a Makefile?) 表明我不能在 makefile 中使用 source。
然而,This answer 提出了一个解决方案(并收到了几个赞成票),但这对我也不起作用
(\
源 /home/vagrant/miniconda/bin/activate myproject; \)
/bin/sh: 2: 来源:未找到
make: *** [来源] 错误 127
我还尝试将 source activate 步骤移至单独的 bash 脚本,并从 makefile 执行该脚本。这不起作用,我假设出于类似的原因,即我在 shell 中运行 source。
我应该补充一点,如果我从终端运行source activate myproject,它可以正常工作。
【问题讨论】:
-
阅读
/home/vagrant/miniconda/bin/activate的内容。请注意,source是内置的 shell,不是要调用的可执行文件,它在当前 shell 的上下文中执行文件的语句。由于make运行不同的shell 副本,因此您无法在当前shell 中 从中激活virtualenv,就像您无法从makefile 更改当前shell 的目录一样。 -
所以本质上我没有办法通过makefile来实现这一点?
-
您可以克隆一个 repo,在 shell 中激活一个环境,然后运行一个 make 步骤(可能是另一个 makefile)在 shell 的调用中。例如。
/bin/sh -c "source path/to/activate; make me_a_sandwich" -
@PhilipO'Brien 看看你最终选择了什么方法真的很有趣。我也面临同样的限制。
标签: python bash makefile virtualenv anaconda