尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何在 Docker 镜像中集成 ty 类型检查?

如何在 Docker 镜像中集成 ty 类型检查? 如何在 Docker 镜像中集成 ty 类型检查【免费下载链接】tyAn extremely fast Python type checker and language server, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ty2/ty如果你想在容器化环境比如 CI 任务或构建流程里运行 ty 的 Python 类型检查而不是依赖宿主机上预装的工具官方文档给出的集成方式是从 ty 的官方 Docker 镜像中复制ty二进制文件到你自己的镜像里。完成集成后你的镜像内可以直接执行ty check并根据退出码判断检查是否通过。本文基于仓库内的 安装文档 和根目录的 Dockerfile给出两条可执行路径把 ty 集成进你自己的镜像或直接使用官方镜像作为检查容器。官方镜像里有什么先了解集成对象的构成。仓库根目录的 Dockerfile 就是官方镜像的构建文件它采用多阶段构建第一个 build 阶段通过 Rust 工具链交叉编译出ty二进制最终阶段只保留这个二进制FROM scratch COPY --frombuild /ty /ty WORKDIR /io ENTRYPOINT [/ty]由此可以确认三个对集成有用的事实官方镜像基于scratch最终层只有/ty一个二进制文件没有 shell 或其他系统工具镜像的入口命令就是/tydocker run时附加的参数会直接作为 ty 的子命令参数镜像内工作目录是/io。安装文档同时列出了官方镜像可用的标签来自 docs/installation.mdghcr.io/astral-sh/ty:latestghcr.io/astral-sh/ty:{major}.{minor}.{patch}例如ghcr.io/astral-sh/ty:0.0.79ghcr.io/astral-sh/ty:{major}.{minor}例如ghcr.io/astral-sh/ty:0.0指向最新的 patch 版本需要固定版本时应使用{major}.{minor}.{patch}标签而不是latest。方式一在你的镜像中集成 ty 二进制这是安装文档中Including in Docker一节给出的官方做法在你的 Dockerfile 中用COPY --from从官方镜像复制二进制# 你的 Dockerfile FROM python:3.12 WORKDIR /app COPY --fromghcr.io/astral-sh/ty:latest /ty /bin/关键点--fromghcr.io/astral-sh/ty:latest会把官方镜像拉下来作为构建上下文的一部分/ty是其中二进制文件的路径目标路径/bin/在大多数基础镜像的PATH中复制后可以直接用ty命令名调用这行指令应放在FROM基础镜像之后位置不依赖其他构建步骤可以单独加入现有 Dockerfile。构建完成后在容器内验证集成是否成功docker run --rm -it 你的镜像名 ty versionty version是 CLI 参考 中列出的子命令能显示 ty 的版本信息。能打印出版本说明二进制已就位如果找不到命令检查二进制是否落在基础镜像PATH覆盖的目录必要时改用COPY --fromghcr.io/astral-sh/ty:latest /ty /usr/local/bin/ty这类明确的PATH目录。方式二直接用官方镜像作为检查容器可选分支如果你的需求只是在容器里对一份代码跑一次类型检查也可以不构建自己的镜像直接用官方镜像运行。由于镜像入口是/ty、工作目录是/io把项目目录挂载到/io即可docker run --rm -v $PWD:/io ghcr.io/astral-sh/ty:latest check /io-v $PWD:/io把当前项目目录挂载为镜像内的工作目录check /io等价于在镜像内执行ty check /io对挂载的目录做检查因为镜像基于scratch、没有 shell不能用sh -c ty check ...这类方式参数要直接跟在镜像名后面传给入口程序。这条路径适合一次性检查或 CI 中的独立步骤如果你还要在镜像里装依赖、跑应用应回到方式一。在容器内运行检查并判断结果镜像内执行检查的命令与本地一致type-checking 文档ty check或指定要检查的路径ty check example.py容器环境有一个与本地不同的注意点——Python 环境发现。ty 需要找到已安装的包才能解析 import 的第三方依赖它的发现顺序是活动虚拟环境VIRTUAL_ENV→ 项目根或工作目录下的.venv→PATH中的python3/python。如果容器里依赖装在非标准位置用--python显式指定解释器或虚拟环境路径ty check --python /app/.venv检查结果以退出码为准exit-codes 文档退出码含义0未发现严重级别为warning或以上的违规1发现了严重级别为warning或以上的违规2无效的 CLI 选项、无效配置或 IO 错误101内部错误在 CI 脚本中判断时0表示通过1表示存在类型问题应让任务失败2通常意味着挂载路径不对或参数写错比如/io下没有可检查的文件。限制与适用边界官方镜像只包含ty二进制本身不提供 Python 解释器和 shell。ty 用它来发现 Python 环境以解析第三方 import如果容器里没有对应的.venv、VIRTUAL_ENV或PATH上的解释器涉及第三方库的代码可能无法完整解析这时用--python指向依赖所在的环境。--exit-zero、--error-on-warning、--exit-zero-on-warning三个参数可以改变退出码行为例如让检查在发现违规时仍返回0完整参数说明见 CLI 参考。如果项目使用pyproject.toml管理依赖文档提示在项目中可能需要uv run或先激活虚拟环境让 ty 找到依赖在容器内对应做法就是确保.venv在挂载路径中或用--python指定。集成完成后的落点很明确容器内ty version能输出版本、ty check按上表退出码返回结果这两步通过即代表 ty 已按预期集成进镜像。【免费下载链接】tyAn extremely fast Python type checker and language server, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ty2/ty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表