Python可编辑安装中,pyproject.toml版本变更如何自动同步到代码?
解决方案:实时同步pyproject.toml版本到代码__version__
你的问题核心是可编辑安装时,pip生成的静态元数据不会自动同步pyproject.toml的修改,而importlib.metadata.version()读取的是这些静态元数据,所以版本不会更新。以下是两种可行的解决思路:
方法一:直接读取pyproject.toml文件(推荐)
直接从项目根目录的pyproject.toml中解析版本号,每次运行代码时实时读取,修改后立即生效。
代码实现(Python 3.11+)
import tomllib from pathlib import Path def _get_version(): # 根据你的项目结构调整路径,确保指向pyproject.toml # 示例:如果__init__.py在src/your_package/下,pyproject.toml在项目根目录 pyproject_path = Path(__file__).parent.parent.parent / "pyproject.toml" with open(pyproject_path, "rb") as f: config = tomllib.load(f) return config["project"]["version"] __version__ = _get_version()
兼容Python 3.10及以下
需要先安装tomli(Python 3.11中tomli已并入标准库改名为tomllib):
pip install tomli
然后将代码中的tomllib替换为tomli即可。
方法二:触发元数据更新(半自动)
如果你坚持使用importlib.metadata的方式,修改pyproject.toml后,需要重新执行可编辑安装命令来更新静态元数据:
pip install -e .
但这种方式需要手动触发,无法自动同步,适合不需要频繁修改版本的场景。
注意事项
- 方法一中的路径要根据你的项目结构调整,比如如果项目是扁平结构(
your_package/__init__.py和pyproject.toml同目录),路径改为Path(__file__).parent / "pyproject.toml"即可。 - 避免硬编码路径,尽量通过
__file__的相对路径定位pyproject.toml,确保在不同环境下都能正确读取。
内容的提问来源于stack exchange,提问作者kamster
相关产品推荐
相关产品推荐

