You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在兼容Python3.9及以下版本的同时,从tomli切换至内置库tomllib?

如何在兼容Python3.9及以下版本的同时,从tomli切换至内置库tomllib?

这个场景我太熟悉了!之前维护项目的时候也遇到过一模一样的需求——想用上Python 3.11自带的tomllib,又不想丢掉还在使用3.9/3.10的用户。给你分享一套完整的解决方案,从依赖配置到代码适配都给你捋清楚:

一、在pyproject.toml中配置版本条件依赖

你可以直接利用PEP 508的条件表达式,在pyproject.toml里给不同Python版本指定对应的依赖:

[project]
# 项目基础配置(名称、版本等)...
dependencies = [
    # 仅在Python 3.11以下版本自动安装tomli,3.11+会自动忽略这条依赖
    "tomli >= 2.0.0; python_version < '3.11'",
]

这样不管用户用的是3.9、3.10还是3.11+的Python,安装时都会自动匹配对应的依赖,完全不用手动切换。

二、代码层面做统一导入适配

接下来只要在代码里加一段兼容导入逻辑,把tomlitomllib的接口统一成同一个命名,之后所有业务代码都用这个统一接口就行:

写法1:通过Python版本判断导入

import sys
if sys.version_info >= (3, 11):
    import tomllib
else:
    import tomli as tomllib

写法2:通过捕获导入异常处理(更简洁)

try:
    import tomllib
except ImportError:
    import tomli as tomllib

两种写法效果完全一致,选你看着顺手的就行。之后你原来代码里调用tomli.load()tomli.loads()的地方,直接换成tomllib.load()tomllib.loads()就好——毕竟tomli的核心API是和tomllib完全对齐的,官方就是这么设计的,不用担心有兼容性问题。

额外提醒

  • 一定要指定tomli的最低版本为2.0.0+,这个版本开始tomli的API和tomllib完全同步,能避免老版本的细微差异问题。
  • 测试时记得覆盖所有需要兼容的Python版本,比如用tox工具批量跑3.9、3.10、3.11、3.12的测试用例,确保每个环境下都能正常运行。

备注:内容来源于stack exchange,提问作者MaKaNu

火山引擎 最新活动