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

Makefile跨目标传递变量:如何获取poetry build生成的wheel包名

问题描述

假设现有如下内容的Makefile:

build:
    # output will be something like dist/foo-1.2.3-py3-none-any.whl
    poetry build

upload: build
    aws s3 cp ${WHEEL_NAME} s3://some-bucket/

wheel包的名称会随版本更新动态变化,需要在build目标执行结束时记录生成的wheel包名,供upload目标读取调用,对应的正确实现方式如下:


实现方案

Make 每个目标的执行上下文是独立的 shell 会话,直接在 build 目标内定义的变量无法直接传递给 upload 目标,可根据场景选择以下两种实现:

方案1:直接匹配生成的wheel文件(单项目场景首选,最简便)

正常单项目执行poetry build只会在dist目录生成一个wheel包,直接用Make内置匹配函数获取即可,无需生成临时文件:

# 用=延迟展开,执行到变量调用时才会匹配文件,避免Make启动时dist目录为空匹配不到
WHEEL_NAME = $(wildcard dist/*.whl)

# 执行build前先清理旧的构建产物,避免目录内有多个历史wheel包匹配错误
clean:
	rm -rf dist/*

build: clean
	poetry build

upload: build
	aws s3 cp $(WHEEL_NAME) s3://some-bucket/

方案2:写入临时文件记录名称(复杂场景适用)

如果你的场景会生成多个wheel包,需要明确取最新生成的版本,可以在build执行完成后将文件名写入临时文件,upload时读取即可:

clean:
	rm -rf dist/ .wheel_name

build: clean
	poetry build
	# 取dist目录下最新生成的whl文件路径写入临时文件.wheel_name
	ls -t dist/*.whl | head -n 1 > .wheel_name

upload: build
	# 读取临时文件内容作为上传路径
	aws s3 cp `cat .wheel_name` s3://some-bucket/
	# 可选:上传完成后自动删除临时文件
	rm -f .wheel_name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:04