【问题标题】:Using pyproject.toml with flexible version from datetime使用 pyproject.toml 和 datetime 的灵活版本
【发布时间】:2022-01-13 05:28:45
【问题描述】:

我们使用简单的日期时间版本对我们公司的所有软件包进行版本控制。现在我们正在考虑改用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'
    ],
)

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

[tool.poetry]
name = "some-package"
version = "0.1.0"
description = ""
readme = "README.md"

【问题讨论】:

标签: python pip setup.py pyproject.toml


【解决方案1】:

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

但是Flit 可以。 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'

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

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

但是,请注意,在您的特定情况下,当使用 flit build 构建包时,Flit 会观察到版本号不符合 PEP 440normalize 相应的,即删除前导零从一天和月份数字。

【讨论】:

  • 在命名空间包中,我不使用__init__.py,因为它会使它们无法工作(如果两个 init 最终处于同一级别)。还有其他地方可以放这个吗?
  • 抱歉,我没有意识到您的问题是针对命名空间包的。我不知道它是否以及如何工作。
猜你喜欢
  • 2021-12-22
  • 2022-07-21
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
相关资源
最近更新 更多