ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Typer 升级到 0.26.0 后,依赖内部 Click 应用或 Click 专用类型的应用怎么适配?

Typer 升级到 0.26.0 后,依赖内部 Click 应用或 Click 专用类型的应用怎么适配? Typer 升级到 0.26.0 后依赖内部 Click 应用或 Click 专用类型的应用怎么适配【免费下载链接】typerTyper, build great CLIs. Easy to code. Based on Python type hints.项目地址: https://gitcode.com/GitHub_Trending/ty/typer如果你的项目用了 Typer并且代码里直接取了 Typer 应用内部的 Click 应用.click来挂 Click 专用插件或者用 Click 专用类型如click.types中的类型定制过参数解析那么升级到 Typer 0.26.0 时这类功能会被移除。Typer 从 0.26.0 起把 Click 的源码直接内置vendored到 Typer 内部不再把 Click 作为第三方依赖安装Typer 与内置 Click 源码之间的交互也统一重构了。结果是过去可以提取内部 Click 应用并用任意 Click 功能修改它的用法不再受支持。这篇文档对应的仓库页面是 Vendored Click 说明版本记录在 Release Notes。哪些代码会受影响先判断自己的应用是否落在受影响的范围内有两种典型模式提取内部 Click 应用对typer.Typer()创建的app访问其内部的 Click 应用.click用它做 Typer 本身没有暴露的操作官方文档举的例子是挂载 Click 专用插件Click-specific plug-ins。使用 Click 专用类型导入 Click 的类型并用它们覆盖 Typer 默认的字段类型即 release notes 中的 customizing the field types with Click-specific types。只要你的代码里有上面任意一种就属于官方文档定义的受影响的边缘用法只使用标准 Typer 写法typer.Option/typer.Argument、标准 Python 类型注解的应用不需要做任何事。官方给出的两条迁移路径官方文档对这个场景的结论很明确这个功能不再支持如果你的应用确实依赖了它只有两条路——要么把应用迁移为纯 Typer 写法要么改为直接使用 Click 而不是 Typer。路径一迁移为纯 Typer大多数情况的默认选择多数借 Click 做一点额外事的需求Typer 已有原生等价物。以文档中实际出现过的两个例子说明替换方式替换 Click 专用类型。不再从 Click 导入类型来定制参数改用标准 Python 类型加 Typer 参数声明。例如文件参数用pathlib.Path加typer.Option即可Typer 内置了对应的参数类型支持教程示例见 docs/parameter-types 一节import typer from pathlib import Path app typer.Typer() app.command() def main( path: Path typer.Option(..., existsTrue), ) - None: print(path) if __name__ __main__: typer.run(main)替换对内部 Click 应用的直接操作。Typer 对补全这类能力有原生参数。以补全为例源码中的兼容层见 typer/core.py表明在 Typer 里只有autocompletion参数受支持此前对 Click 的shell_complete的支持已发出DeprecationWarning并说明 will be removed in upcoming versions。也就是说原来通过 Click 参数设置补全的地方应改为 Typer 的autocompletion参数import typer from pathlib import Path def path_completer(incomplete: str): return [p for p in Path().glob(*.py) if p.name.startswith(incomplete)] app typer.Typer() app.command() def main( file: Path typer.Argument(..., autocompletionpath_completer), ) - None: print(file) if __name__ __main__: typer.run(main)以上第二段代码是依据源码兼容层行为整理的示例补全函数按自己应用的取值范围实现。路径二改用 Click 直接写如果应用的核心逻辑本身就构建在 Click 的插件机制或 Click API 上用纯 Typer 表达不划算就按官方建议整体迁移到直接用 Click 实现不再经过 Typer。验证迁移是否完成从依赖声明中移除对click包的直接依赖重新安装环境后运行应用。应用正常启动--help和各命令可用。逐项跑一遍迁移前依赖 Click 的那些行为插件加载、参数类型解析、补全确认行为不变。确认代码中不再残留对click的导入以及对 Typer 应用内部 Click 实例的访问——0.26.0 后这些访问没有受支持的行为保证。限制与边界0.26.0 之后Typer 基于内置的固定版本 Click 源码仓库中内置自 Click 8.3.1见 docs/alternatives.md独立演进Click 新版本的功能或变化不会再传导到 Typer文档同时明确随着 Typer 继续改进和扩展一部分 Click 功能未来将不再可用。仓库中typer/_click/目录是内置vendored的 Click 源码不是公共 API。适配过程不应新增对它的导入或依赖。升级 Typer 本身没有附带需要执行的迁移命令需要改的是应用代码以及依赖声明改完按上一节验证。【免费下载链接】typerTyper, build great CLIs. Easy to code. Based on Python type hints.项目地址: https://gitcode.com/GitHub_Trending/ty/typer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表