无法从 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目录的上一层。
- 其他 Makefile 命令有效。
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 之前先激活它。
我正在尝试使用 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目录的上一层。
- 其他 Makefile 命令有效。
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 之前先激活它。