使用 pyproject.toml 和日期时间的灵活版本

Roe*_*ant 9 python pip setup.py pyproject.toml

我们使用简单的日期时间版本对所有公司包进行版本控制。现在我们正在考虑转向pyproject.toml而不是setup.py. 是否也可以在那里进行灵活的版本控制?

version = datetime.datetime.now().strftime('%Y.%m.%d.%H%M')

# Actual setup
setup(
    name="some-package",
    version=version,
    description='Some description',
    packages=find_namespace_packages(where='src', include=['company.project.*']),
    package_dir={'': 'src'},
    python_requires='>=3.6',
    install_requires=[  
        'numpy',
        'numba'
    ],
)
Run Code Online (Sandbox Code Playgroud)

我需要什么语法来调整 pyproject.toml 中的版本控制?这个正在使用poetry,但没有必要。

[tool.poetry]
name = "some-package"
version = "0.1.0"
description = ""
readme = "README.md"
Run Code Online (Sandbox Code Playgroud)

ano*_*non 9

诗歌似乎不支持这一点,例如参见问题#4299 。

弗利特确实如此。Flit 允许我们将版本声明为“动态” pyproject.toml

[project]
name = 'some_package'
dynamic = ['version']
description = 'Description of the package.'

[build-system]
requires = ['flit_core>=3.2,<4']
build-backend = 'flit_core.buildapi'
Run Code Online (Sandbox Code Playgroud)

然后版本由包的__version__属性确定。例如,__init__.py可以包含以下内容:

[project]
name = 'some_package'
dynamic = ['version']
description = 'Description of the package.'

[build-system]
requires = ['flit_core>=3.2,<4']
build-backend = 'flit_core.buildapi'
Run Code Online (Sandbox Code Playgroud)

但请注意,在您的具体情况下,当使用 构建软件包时flit build,Flit 会观察到版本号不符合PEP 440并相应地对其进行规范化,即从日期和月份数字中删除前导零。

  • 另请注意,在运行时检查包的版本将不会反映实际的包版本。 (6认同)