
如何用 uv 在 Coiled 上运行 PEP 723 云端脚本【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv本地工作站跑不动的大数据 Parquet 处理、需要 GPU 或大内存机器的计算、同一脚本要针对成百上千组输入并行执行——这些场景下可以把 Python 脚本直接提交到云端的虚拟机上运行。这篇文章演示如何用 uv 管理脚本依赖再通过 Coiled 把同一个uv run命令提交到云端执行。整个流程基于 uv 官方文档中的完整示例docs/guides/integration/coiled.md脚本使用 PEP 723 内联元数据声明依赖本地验证通过后加两行# COILED注释即可在 Coiled 的云上虚拟机中运行。准备一个带 PEP 723 内联元数据的脚本uv 支持在脚本文件头部用注释块声明 Python 版本要求和依赖即 PEP 723 内联脚本元数据。文档中的示例脚本process.py如下# /// script # requires-python 3.12 # dependencies [ # pandas, # pyarrow, # s3fs, # ] # /// import pandas as pd df pd.read_parquet( s3://coiled-data/uber/part.0.parquet, storage_options{anon: True}, ) print(df.head())脚本用pandas从 S3 上的公共 bucket 读取一个 Parquet 文件并打印前几行。依赖通过内联元数据声明而不是依赖外部环境这使得脚本成为「自包含」的——它携带了运行所需的全部信息这也是它能被直接拿到其他机器包括云端机器上执行的原因。文档说明任何 Python 脚本都可以这样用以上只是一个贯穿全文的具体例子。内联元数据有两个细节值得注意requires-python 3.12会被 uv 遵守运行前 uv 会查找匹配的 Python 版本本机没有时会自动下载使用内联脚本元数据时即使在项目目录含pyproject.toml的目录里执行uv run项目的依赖也会被忽略不需要加--no-project。本地先跑通uv run 自动建环境装依赖在提交到云端之前先在本地确认脚本能跑$ uv run process.py执行这条命令时uv 会自动创建一个虚拟环境并把pandas、pyarrow、s3fs三个依赖安装进去无需手动建 venv 或写 requirements 文件。本地能打印出表头数据说明脚本与内联元数据本身没有问题可以进入云端部署环节。登录 CoiledCoiled 是一个可在 AWS、GCP、Azure 上运行代码的 serverless 云平台。文档给出的登录方式是通过uvx调用 Coiled CLIuvx会在隔离的临时环境中运行工具无需事先安装它$ uvx coiled login执行后如果没有 Coiled 账户会提示创建一个——注册即可免费开始使用。登录完成后再提交任务否则云端无法归属你的账户与配额。用 # COILED 注释指定容器与区域登录完成后在脚本最顶部PEP 723 块之前加两行# COILED注释告诉 Coiled 用什么镜像、在哪里运行# COILED container ghcr.io/astral-sh/uv:debian-slim # COILED region us-east-2 # /// script # requires-python 3.12 # dependencies [ # pandas, # pyarrow, # s3fs, # ] # /// import pandas as pd df pd.read_parquet( s3://coiled-data/uber/part.0.parquet, storage_options{anon: True}, ) print(df.head())两行注释的作用分别对应文档中的说明# COILED container ghcr.io/astral-sh/uv:debian-slim让 Coiled 用 uv 官方 Docker 镜像运行脚本确保容器里有 uv 可用。该镜像是官方派生镜像列表中基于debian:trixie-slim的版本完整的镜像清单见 Docker 集成文档# COILED region us-east-2指定在 AWS 的us-east-2区域运行。示例数据文件恰好存放在该区域把任务放在同区域可以「避免数据出站流量data egress」。文档明确提示了一个边界情况示例假设使用 AWS新注册 Coiled 账户会自动获得 AWS 上的免费额度。如果你的账户运行在 GCP 或 Azure 上把region的值换成对应云厂商的有效区域或者直接删掉region这一行。提交云端批处理任务用coiled batch run把uv run命令提交为 Coiled 的批处理任务$ uvx coiled batch run \ uv run process.py这条命令会在云端的虚拟机上执行与本地完全相同的uv run process.py——uv 在容器内解析 PEP 723 元数据、建环境、装依赖、运行脚本脚本此前在本地能跑在云端跑的就是同一套流程。文档对默认资源配置的说明默认是 4 核、16 GiB 内存的虚拟机实例类型、磁盘大小、是否使用 spot 实例等都属于「额外可配置的项」不是必须项需要时按 Coiled 侧文档调整即可。查看任务状态与日志任务提交后文档给出了两条监控路径在 Coiled 的 Web 界面cloud.coiled.io查看批处理进度在终端用 Coiled CLI 的三个命令操作$ coiled batch status $ coiled batch wait $ coiled batch logs分别用于查看任务状态、阻塞等待任务结束、拉取任务日志。脚本的成功输出仍是它自身定义的行为——打印 Parquet 文件的前几行任务日志中出现这几行表头数据即说明云端执行成功。限制与边界脚本依赖必须能声明进 PEP 723 元数据或脚本本身可独立解析文档的示例是纯 wheel 依赖未涉及本地包依赖的云端场景region行只对 AWS 示例直接适用其他云厂商需换成自己的有效区域或删除该行实例类型、磁盘、spot 等配置不在 uv 文档覆盖范围内属于 Coiled 平台侧的可选配置uv 与 Coiled 各自的更多用法脚本的锁文件uv lock --script、可复现性相关的exclude-newer字段等见 脚本指南云端批处理的完整参数以 Coiled 官方文档为准。【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考