我有以下 Makefile
env:
source venv/bin/activate
当我make env
激活 python 虚拟环境时,出现以下错误
源 venv/bin/activate make:源:没有这样的文件或目录 make:*** [env] 错误 1
但是当我复制source venv/bin/activate
并在 shell 中运行时,它运行正常。我需要在 Makefile 中设置当前目录吗?
答案1
source
是shell 内置命令,而不是可以从 shell 以外的任何地方启动的可执行文件。它的作用source
是读取并执行文件的内容在当前 shell 中,无需启动新 shell。
这样做的目的是修改当前 shell 的状态(如果你只是sh venv/bin/activate
,你的 shell 也会执行activate
脚本的内容,但随后完成并退出)。
但你想做的是make
修改程序的状态activate
。无论以何种方式从 生成 shell 中运行脚本make
,都不会改变make
看到的环境。
这是因为由另一个程序 (B) 启动的每个程序 (A) 都会获得启动程序 (B) 的环境的副本,它 (A) 可以根据自己的意愿更改该副本,而不会影响启动程序 (B) 的环境。
因此,你想做的事即使从理论上来说也是行不通的。
如果您需要在 venv 中运行某些 Makefile,则必须activate
先获取脚本,然后从修改后的 shell 启动make
;而不是相反。