尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Apache Beam 测试基础设施指南:用 pyenv 安装多版本 Python 环境与清理遗留测试资源

发布时间:2026/9/29 2:35:24

资讯中心
01
ARTICLE

Apache Beam 测试基础设施指南:用 pyenv 安装多版本 Python 环境与清理遗留测试资源

Apache Beam 测试基础设施指南:用 pyenv 安装多版本 Python 环境与清理遗留测试资源
【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam18/beam点击查看免费下载本指南基于 Apache Beam 仓库中 .test-infra/tools/README.md 及其同目录下的运维脚本系统讲解 Beam 持续集成CI与测试基础设施中的两个核心环节如何通过python_installer.sh为测试环境搭建 pyenv 并安装多版本 Python以及如何借助一组stale_*_cleaner.sh脚本自动回收测试遗留的云端资源。读完本文你将掌握 Beam 测试基础设施脚本的使用方式、修改方法以及这些脚本的源码级实现原理。工具背景为什么 Beam 测试基础设施需要专门的 Python 环境工具Apache Beam 提供 Java、Python、Go、Typescript 等多语言 SDK其中 Python SDK 的测试矩阵需要覆盖多个 Python 主版本。在 Beam 的测试基础设施位于仓库根目录 .test-infra 下中构建与测试任务往往运行在临时准备的机器上需要在不同 Python 版本之间切换并对每个版本进行隔离安装。传统做法如直接通过系统包管理器安装或编译源码存在两个问题一是版本切换繁琐二是编译安装的依赖容易污染系统环境。因此 Beam 选择了pyenv Python 官方安装器的方案pyenv 负责管理多个 Python 版本的下载、编译与全局/局部切换而python_installer.sh则把 pyenv 的安装、依赖准备、版本安装与环境变量配置封装成一个一键脚本。该工具的定位可以从 README 的描述中确认它负责安装 pyenv 及其依赖以及通过 pyenv 安装不同版本的 Python并且只为运行该脚本的用户安装不会改动系统其他用户的环境——这对于多租户的测试机器或共享 CI 节点而言是重要的隔离保证。使用方式一键安装 pyenv 与多版本 Python根据 README 的说明使用方式非常简单下载脚本后直接以 bash 执行即可bash ./python_installer.sh执行后脚本会依次完成以下工作对应 python_installer.sh 中的函数准备编译依赖pyenv_dep通过apt-get update与apt-get install安装 pyenv 编译 Python 所需的系统包包括make、build-essential、libssl-dev、zlib1g-dev、libbz2-dev、libreadline-dev、libsqlite3-dev、wget、curl、llvm、libncursesw5-dev、xz-utils、tk-dev、libxml2-dev、libxmlsec1-dev、libffi-dev、liblzma-dev等需要 sudo 权限。安装 pyenvpyenv_install如果$HOME/.pyenv目录或安装器脚本已存在则先清理再通过curl下载 pyenv 官方安装器并执行。配置用户环境pyenv_post_install在~/.bashrc中追加 pyenv 配置块设置PYENV_ROOT、PATH并初始化pyenv init与pyenv virtualenv-init。脚本会先检查~/.bashrc中是否已有# pyenv Config标记避免重复追加。安装指定版本的 Pythonpyenv_versions_install遍历版本数组逐个调用pyenv install编译安装。设置全局版本python_versions_setglobally把数组中的版本依次设为 pyenv 全局版本pyenv global ...。清理并提示clean删除临时下载的安装器脚本并提示用户重启 shellexec $SHELL使 PATH 变更生效。脚本开头启用了set -euo pipefail任何一步失败都会立即终止保证安装过程的确定性。修改要安装的 Python 版本Beam 需要支持的 Python 版本随 SDK 支持的版本范围演进因此 README 明确说明修改脚本中python_versions_arr变量即可增删要安装的版本。该变量位于 python_installer.sh 顶部原始定义python_versions_arr(3.8.16 3.9.16 3.10.10 3.11.4)例如改为python_versions_arr(3.8.10 3.9.0 3.10.2)修改后重新执行bash ./python_installer.sh即可。需要说明的是数组中每个版本号都会触发一次完整的 pyenv 编译安装耗时取决于机器性能数组顺序同时决定了pyenv global的最终状态——从脚本第 71-73 行的pyenv global $实现看数组最后一个元素会成为生效的全局版本该数组会被pyenv_versions_install与python_versions_setglobally两个函数共享因此增删版本时只需修改这一处。同目录下的测试资源清理工具.test-infra/tools 目录下除了 Python 安装器还存放着一组以stale_*命名的清理脚本用于回收 Beam 集成测试在 Google Cloud 上遗留的资源主要针对项目apache-beam-testing。README 中明确要求新增或更新工具时必须同步更新本文件见文件开头的提示语但目前这些清理脚本尚未写入 README以下内容依据各脚本源码整理可作为使用与维护参考BigQuery 数据集清理stale_bq_datasets_cleaner.sh列出项目apache-beam-testing下最多 1500 个数据集与一组命名模板如beam_bigquery_samples_、beam_temp_dataset_、FHIR_store_、bq_query_schema_update_options_16、game_stats_、python_等以及匹配形如bq_read_all_xxx...12位十六进制的正则匹配宽限期为5 天从 BigQuery API 读取的lastModifiedTime毫秒转换为秒后早于 5 天前且匹配模板的数据集才会被bq rm -r -f删除脚本统计删除失败的次数若存在失败则以非零状态退出便于 CI 捕获。Cloud Bigtable 实例清理stale_cbt_instances_cleaner.sh通过cbt listinstances获取前 50 个实例匹配bt-read-tests、bt-write-xlang或test[a-z]等模板从实例名中解析创建日期形如模板-YYYYMMDD-的 8 位日期超过 5 天宽限期即执行cbt deleteinstance脚本对 Linux 与 macOS 分别处理date命令的差异。Dataflow 作业清理stale_dataflow_jobs_cleaner.sh使用gcloud dataflow jobs list --created-before-P3H --statusactive --regionus-central1列出创建超过 3 小时的活跃作业并逐一cancel没有陈旧作业时打印No stale jobs found.。预构建 SDK 容器镜像清理stale_dataflow_prebuilt_image_cleaner.sh面向gcr.io/apache-beam-testing公开仓库如beam-sdk、beam_portability、beamgrafana等与us.gcr.io/apache-beam-testing私有仓库如java-postcommit-it、python-postcommit-it、jenkins、github-actions公开镜像删除早于6 周与发布周期对齐的标签私有镜像删除早于3 天的标签始终保留带latest标签以及时间上最新的一张镜像避免仓库被清空对多架构multiarch镜像通过docker manifest inspect检查其依赖关系仅在依赖可安全删除时才清理。Kubernetes 命名空间清理stale_k8s_workload_cleaner.sh获取 GKE 集群io-datastores区域us-central1-a项目apache-beam-testing的凭据遍历所有命名空间删除名称匹配^beam-.(test|-it)且存在时间达到阈值的命名空间天d或年y级直接删除小时h级要求不小于 8 小时should_teardown函数实现。Spanner 数据库清理stale_spanner_cleaner.sh列出beam-test实例中createTime早于 1 天的数据库通过gcloud spanner databases delete逐个静默删除。使用与维护注意事项从源码可以总结出以下实践要点权限要求python_installer.sh的依赖安装与旧目录清理使用sudo需要当前用户具备 sudo 权限pyenv 本身及其安装的 Python 版本只写入$HOME符合 README 所述仅针对运行用户的隔离原则。幂等性脚本会在安装前删除旧的~/.pyenv与临时安装器并在写入~/.bashrc前检查标记重复执行不会产生重复配置。平台差异多个清理脚本都针对linux-gnu与darwin分别处理date命令语法说明这些工具同时面向 Linux CI 节点与本地 macOS 开发/维护环境。CI 友好清理脚本普遍在末尾根据失败计数决定退出码未成功删除资源时返回非零状态便于接入 Jenkins 等 CI 系统Beam 的 Jenkins 任务定义位于 .test-infra/jenkins。维护约定按 README 的要求任何新增或修改的测试基础设施工具都应在 .test-infra/tools/README.md 中同步记录说明保持文档与脚本的一致性。赞分享【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam18/beam点击查看免费下载相关推荐Apache Beam 测试基础设施工具指南用 python_installer.sh 通过 pyenv 批量安装 Python 版本Apache Beam 测试基础设施工具指南用 python_installer.sh 通过 pyenv 批量安装 Python 版本 Apache Beam大数据批处理流处理数据工程Terratest 测试资源清理指南用 defer DestroyContext 确保基础设施测试不留任何残留Terratest 测试资源清理指南用 defer DestroyContext 确保基础设施测试不留任何残留 自动化测试一旦由 Terratest 驱动测试开发工具DevOps质量保障Apache Beam 测试基础设施使用 Kustomize 在 Kubernetes 上安装 Strimzi Kafka OperatorApache Beam 测试基础设施使用 Kustomize 在 Kubernetes 上安装 Strimzi Kafka Operator 导读 本文围绕上一篇Zephyr RTOS 在 ESP32-S2-DevKitC 上的完整实战硬件特性、构建烧录、MCUboot 与 JTAG 调试下一篇ctop 调试模式实战指南内置日志系统与本地 Socket 日志通道创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。