You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile导出的环境变量无法被Python脚本读取,求排查原因

问题原因及解决办法

你的问题核心是$(shell)函数的执行时机问题:$(shell)是Make在解析Makefile的阶段就启动子shell执行的,而你通过export VAR := env_var导出的变量,只会传递给规则执行阶段启动的子shell(也就是all目标下那些@开头的命令所在的shell),因此$(shell)启动的Python进程无法读取到这个环境变量。

解决办法1:直接在规则命令中执行Python(推荐)

去掉$(shell)调用,直接在all目标的命令行里运行Python代码,这样Python进程会继承Make导出的环境变量:

export VAR := env_var

all:
    @echo -n "echoing: VAR="
    @echo $${VAR}
    @echo -n "printenv: "
    @printenv | grep VAR
    @echo -n "python: "
    @python -c "import os; print('VAR=' + str(os.environ.get('VAR')))"

运行后即可得到正确的VAR=env_var输出。

解决办法2:若必须使用$(shell)

需要在调用$(shell)时手动将VAR传递到子shell环境中:

VAR := env_var
export VAR
PY_VAR := python -c "import os; print('VAR=' + str(os.environ.get('VAR')))"

all:
    @echo -n "echoing: VAR="
    @echo $${VAR}
    @echo -n "printenv: "
    @printenv | grep VAR
    @echo -n "python: "
    @echo $(shell VAR=$(VAR) ${PY_VAR})

内容的提问来源于stack exchange,提问作者Quandale Dingle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:21