无法从 Makefile 激活 python venv 环境

Can't activate python venv environment from Makefile

我正在尝试使用 Makefile 命令激活我的虚拟环境,但是当我在下面 运行 时遇到错误。

命令

make env

错误

Makefile:20: warning: overriding commands for target `make'
Makefile:17: warning: ignoring old commands for target `make'
source ../env/bin/activate
make: source: No such file or directory
make: *** [env] Error 1

生成文件

...
env:
    source ../env/bin/activate

我想知道 Makefile 是否有我不明白的特殊之处导致失败?

这还有更多层次,您可能会发现自己在下一步,但一次一个。食谱在 shell 中执行,更具体地说,默认情况下我认为在我们的情况下也是如此,/bin/sh 不理解 source,所以...将您的 Makefile 更改为说:

env:
        . ../env/bin/activate     

或者定义 make SHELL 变量来表示 /bin/bash 它似乎可以工作:

SHELL := /bin/bash
env:
        source ../env/bin/activate

但是,下一件事...食谱的行 fork() 它自己的 shell(环境),因此您对一个 shell 实例所做的更改(通过采购一个脚本),不影响下一个。您可以通过将多个食谱命令连接成一行来绕过它并仅生成一个 shell(转义换行符并使用 ; 分隔命令:

env:
        . ../env/bin/activate ; \
        SOME_COMMAND

但这仍然只对属于该命令行一部分的命令有效。

您可能会考虑在多个配方中做同样的事情,但实际上,如果您需要环境在 make 中发生的任何事情都处于活动状态,您可能只想在调用 make 之前先激活它。