首页/新闻资讯/正文详情

Apache Beam 测试基础设施工具指南:用 python_installer.sh 通过 pyenv 批量安装 Python 版本

发布时间:2026/9/25 3:01:54 来源:云帆数科 栏目:资讯中心
Apache Beam 测试基础设施工具指南:用 python_installer.sh 通过 pyenv 批量安装 Python 版本
大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载Apache Beam 是统一的批流一体数据处理编程模型其 Python SDK 需要同时支持多个 Python 版本当前仓库中python_requires 3.10版本上限随新版本发布滚动推进。为保证贡献者在本地、CI 与测试集群中拥有一致的多版本 Python 环境仓库在.test-infra/tools/下提供了一键式 Python 安装脚本python_installer.sh它通过 pyenv 为用户安装多个 Python 版本并配置全局环境。本文将围绕.test-infra/tools/README.md对该脚本的说明结合脚本源码与 Python SDK 的版本治理机制完整讲解其用法、修改方式与底层实现帮助你快速搭建与 Beam 测试矩阵匹配的本地 Python 环境。工具概览它是做什么的根据 .test-infra/tools/README.md 的定义python_installer.sh是一个为当前用户非系统级安装 pyenv 及其依赖、并通过 pyenv 安装多个 Python 版本的工具。关键特性包括用户级安装脚本只把 pyenv 与 Python 版本安装在运行脚本的用户$HOME下不影响系统其他用户依赖自动补齐先通过apt-get安装 pyenv 编译 Python 所需的系统构建依赖版本批量安装读取脚本顶部的python_versions_arr数组循环调用pyenv install安装列表中的所有版本全局默认设置安装完成后将列表中所有版本设为pyenv global保证python/pip命令可直接指向这些版本。在仓库语境下这个工具服务于 .test-infraApache Beam 的测试基础设施目录中的 Python 相关测试与工具链——该目录还包含 flaky 测试检测、过期云资源清理等运维脚本而 Python 多版本环境是运行它们与 Python SDK 测试矩阵见 sdks/python/tox.ini 中的py310,py311,py312,py313,py314的前提。快速使用一行命令完成环境搭建README 给出的使用方式非常简单下载脚本后直接以 bash 执行即可bash ./python_installer.sh脚本内部通过set -euo pipefailpython_installer.sh保证任何一步失败立即退出避免留下半成品环境。执行过程会按顺序完成以下 6 个阶段对应源码中的函数阶段函数作用1. 安装系统依赖pyenv_depapt-get installpyenv 编译所需的构建工具链2. 安装 pyenvpyenv_install清理旧版本后通过curl https://pyenv.run安装3. 写入 shell 配置pyenv_post_install向~/.bashrc追加 pyenv 的 PATH 与初始化配置4. 批量安装 Pythonpyenv_versions_install遍历python_versions_arr逐个pyenv install5. 设为全局版本python_versions_setgloballypyenv global一次性启用全部版本6. 清理clean删除下载的pyenv_installer.sh并提示重启 shell执行完毕脚本会提示Restart your shell so the path changes take effect并给出建议命令exec $SHELL重启后即可使用pyenv versions验证安装结果。修改要安装的 Python 版本README 明确说明了修改方式要增删 Python 版本只需编辑脚本顶部python_versions_arr数组。原始定义README 中的示例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)当前仓库实际维护的版本列表见 python_installer.shpython_versions_arr(3.10.10 3.11.4 3.12.6 3.13.9)这组版本与 Beam Python SDK 当前的测试矩阵高度一致python_requires 3.10见 sdks/python/setup.pytox 测试环境覆盖py310,py311,py312,py313,py314见 sdks/python/tox.ini因此贡献者修改数组时建议与 contributor-docs/updating-supported-python-versions.md 中维护的受支持版本清单保持同步。深入源码脚本各阶段实现原理1. 安装 pyenv 编译依赖pyenv_depsudo apt-get update -y sudo apt-get install -y 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这些包是 CPython 源码编译的经典依赖集合build-essential/make提供编译器libssl-dev对应_ssl模块libsqlite3-dev对应sqlite3libffi-dev对应ctypestk-dev对应tkinter。缺少任一关键依赖都会导致 pyenv 编译出的 Python 缺失对应标准库模块。注意该步骤使用sudo需要当前用户具有 sudo 权限。2. 安装 pyenv 本体pyenv_installif [[ -d $HOME/.pyenv/ ]]; then sudo rm -r $HOME/.pyenv fi if [[ -e $HOME/pyenv_installer.sh ]]; then sudo rm $HOME/pyenv_installer.sh fi curl https://pyenv.run $HOME/pyenv_installer.sh chmod x $HOME/pyenv_installer.sh $HOME/pyenv_installer.sh脚本会先删除已存在的~/.pyenv与旧的安装器脚本再重新安装因此重复执行会得到一个干净的 pyenv 环境安装源是官方pyenv.run引导脚本。3. 写入 shell 环境配置pyenv_post_installif ! $HOME/.bashrc grep -q # pyenv Config ; then { echo # pyenv Config echo export PYENV_ROOT$HOME/.pyenv echo export PATH$PYENV_ROOT/bin:$PATH echo if which pyenv /dev/null; then echo eval $(pyenv init -) echo eval $(pyenv init --path) echo eval $(pyenv virtualenv-init -) echo fi } $HOME/.bashrc fi这里使用了幂等写法先检查~/.bashrc是否已包含# pyenv Config标记避免重复追加。写入内容包含pyenv init与pyenv virtualenv-init后者为 pyenv-virtualenv 插件提供自动激活虚拟环境的能力。4. 批量安装与全局设置pyenv_versions_install / python_versions_setgloballypyenv_versions_install(){ arr($) for version in ${arr[]}; do $HOME/.pyenv/bin/pyenv install $version done } python_versions_setglobally(){ $HOME/.pyenv/bin/pyenv global $ }两个函数都通过$接收python_versions_arr的全部元素前者逐个编译安装后者一次性把多个版本设为pyenv globalpyenv global支持多版本参数会生成指向多个版本的shims。由于安装过程是源码编译耗时会随版本数量增加建议在空闲时段执行。与 Beam Python 版本治理体系的关联python_installer.sh是 Beam 多版本 Python 支持策略在本地环境侧的落地工具。仓库中的配套治理机制包括受支持版本声明sdks/python/setup.py 中python_requires 3.10定义了最低版本classifiers 列出3.10至3.14的版本声明版本运行期警告sdks/python/apache_beam/init.py 对minor 9过低与minor 15过高的 Python 版本发出未经充分测试的警告并拒绝在 Python 2 上运行测试矩阵sdks/python/tox.ini 的envlist覆盖py310到py314及各自云测试组合版本增删流程contributor-docs/updating-supported-python-versions.md 详细列出了添加/移除 Python 版本时需要同步修改的容器、tox 配置、GitHub Actions 工作流、wheel 构建与 Gradle 任务等。因此当 Beam 宣布支持新的 Python 版本如新增 3.14时维护者通常会同步更新python_versions_arr让贡献者一键获得与 CI 一致的本地环境。修改该数组后建议对照上述治理文档核对版本边界是否一致。注意事项与使用前提仅限用户级安装pyenv 与 Python 都安装在$HOME下适合个人开发机、CI 执行机等单用户场景如需系统级多用户共享应另寻方案需要 sudo 权限依赖安装apt-get与旧文件清理sudo rm均需要 sudo网络依赖安装过程需访问pyenv.run与 Python 源码下载源README 维护约定该 README 开头明确要求PLEASE update this file if you add a new tool or update an existing one.test-infra/tools/README.md即向.test-infra/tools/新增工具或改动现有工具时必须同步更新本文档重复执行安全脚本会先清理旧的~/.pyenv再重装重复运行可修复被破坏的环境但也会丢失已安装的额外版本。小结.test-infra/tools/README.md描述的工具虽小却是 Beam 多版本 Python 开发与测试闭环中本地环境一致化的关键一环bash ./python_installer.sh一条命令即可完成 pyenv 依赖、pyenv 本体、多个 Python 版本与全局路径配置需要调整版本时只需编辑python_versions_arr数组。结合 python_installer.sh 的源码逐函数解读以及 sdks/python/setup.py、sdks/python/tox.ini、contributor-docs/updating-supported-python-versions.md 等配套文件的印证你可以快速搭建与 Beam 官方测试矩阵对齐的 Python 多版本环境并在 Beam 升级受支持 Python 版本时准确同步本地工具链。赞分享大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载相关推荐如何用 LiveTalking 3 分钟跑通一个实时数字人如何用 LiveTalking 3 分钟跑通一个实时数字人 让数字人对着屏幕实时说话,还要口型对得上、延迟低、能被用户打断——自己拼这套链路要折腾不少事。Liv人工智能大模型数字人语音音视频媒体生成后端pyenv-win与未来城市基础设施智能交通中的版本管理pyenv win与未来城市基础设施智能交通中的版本管理 引言当智能交通遇上Python版本混乱 2025年某智能交通控制中心早高峰7:32。一场由Pyt开发工具CLICheckov基础设施即代码扫描工具安装指南Checkov基础设施即代码扫描工具安装指南 前言 Checkov是一款强大的基础设施即代码 IaC 静态分析工具能够帮助开发者在部署前发现云资源配置中的安全应用安全静态分析供应链安全云原生上一篇告别终端卡顿用CocoaLumberjack打造macOS日志监控神器下一篇2024年Duplicati云存储成本终极指南主流服务商价格对比与选择策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

HDFS分布式系统安全通信全解析:认证、加密与权限实践
HDFS分布式系统安全通信全解析:认证、加密与权限实践

做分布式系统绕不开的一个话题就是安全通信,尤其是当你的集群里跑着的不只是测试数据,还有线上业务的时候。很多人搭HDFS集群或者微服务架构时,第一反应是先解决网络通不通、接口调不调得动,等到真正被安全问题坑过一次——比如某… · 2026/9/25 3:01:54

Metaflow Cards 完整指南:用 @card 装饰器与自定义模板为机器学习任务自动生成 HTML 报告
Metaflow Cards 完整指南:用 @card 装饰器与自定义模板为机器学习任务自动生成 HTML 报告

MLOps工作流自动化数据工程 【免费下载链接】metaflow Build, Manage and Deploy AI/ML Systems 项目地址: https://gitcode.com/gh_mirrors/me/metaflow 点击查看 免费下载 Metaflow Cards 是 Metaflow 内置的"报告卡"机制:只要在 step 上放… · 2026/9/25 3:01:48

cuDFT DLPack 互操作 API 详解:libcudf 的 from_dlpack 与 to_dlpack 如何打通 GPU 张量与表格数据
cuDFT DLPack 互操作 API 详解:libcudf 的 from_dlpack 与 to_dlpack 如何打通 GPU 张量与表格数据

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 cuDF 的文档页 interop_dlpack.rst 通过 Doxygen 组 interop_dlpack 渲染了 libcudf 中 DLPack 互操作的核心… · 2026/9/25 3:01:47

国密nginx搭建全攻略:从GmSSL编译到SM2双证书部署
国密nginx搭建全攻略:从GmSSL编译到SM2双证书部署

最近几年做政企项目、金融类系统的朋友,基本都会碰到同一个需求:客户要求网站全链路支持国密算法,浏览器访问不再走传统的RSA体系,而是用SM2做密钥协商、SM3做摘要、SM4做数据加密。这时候你的第一反应大概率是“把nginx的ssl证书… · 2026/9/25 3:32:15

轻量级密码PRESENT与改进版WidePresent:从低功耗硬件到扩散增强
轻量级密码PRESENT与改进版WidePresent:从低功耗硬件到扩散增强

只要聊到轻量级分组密码算法,PRESENT就是那道绕不开的坎。我在一个低功耗物联网表计项目里做安全方案时,对这个结论体会尤其深:主控MCU频率不到200MHz,Flash只有几十KB,每一帧上行的加密都要精确到毫安级功耗。团队里有… · 2026/9/25 3:32:15

银河麒麟与Windows双系统启动顺序深度解析
银河麒麟与Windows双系统启动顺序深度解析

1. 项目概述:为什么改启动顺序不是“点几下鼠标”的事你装好了银河麒麟V10和Windows 11双系统,开机却总先进入Windows——不是你按错了键,是GRUB菜单压根没弹出来;或者GRUB倒是出来了,但麒麟排在第三行,Win… · 2026/9/25 3:32:09

NAT10下游基因预测:生物信息学与机器学习全流程解析
NAT10下游基因预测:生物信息学与机器学习全流程解析

简介:一个面向生物信息学与机器学习交叉应用的NAT10下游基因预测项目资源包,适合生信初学者、研究生及关注基因调控机制的研究者参考。资源围绕与NAT10相关的GEO表达数据集展开,完整覆盖数据提取、清洗、标准化,以及基于支持向量机… · 2026/9/25 3:32:09

WinForm与DevExpress控件继承体系解析
WinForm与DevExpress控件继承体系解析

1. WinForm与DevExpress控件继承体系解析在Windows Forms应用程序开发中,DevExpress控件套件因其丰富的UI组件和强大的功能而广受欢迎。但许多开发者在从原生WinForm控件转向DevExpress控件时,经常会遇到一个看似简单却令人困惑的问题:为什么… · 2026/9/25 3:32:09

AI编码代理失控怎么破?用Trellis给代理装上行为辅助轮
AI编码代理失控怎么破?用Trellis给代理装上行为辅助轮

说实话,用AI编码代理写代码这件事,最让我崩溃的不是它"不会",而是它"太会了"。让它改个接口,它能顺手把整个模块的注释风格全改了;让它加一行日志,它能自作主张重构一个看似无关的函数… · 2026/9/25 3:32:09

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码