主页

索引

模块索引

搜索页面

1.3.6. Discussions

Versioning

Valid version numbers

A simple version (final release): 1.2.0
A development release: 1.2.0.dev1
An alpha release: 1.2.0a1
A beta release: 1.2.0b1
A release candidate: 1.2.0rc1
A post-release: 1.2.0.post1
A post-release of an alpha release (possible, but discouraged): 1.2.0a1.post1
A simple version with only two components: 23.12
A simple version with just one component: 42
A version with an epoch: 1!1.0

Semantic versioning vs. calendar versioning

Semantic versioning:

使用由 3 部分组成的版本号:
格式: major.minor.patch

~= X.Y
    等同于
    name >= X.Y, == X.*
name ~= X.Y.Z
    等同于
    name >= X.Y.Z, == X.Y.*

Calendar versioning:

格式: year.month
: 23.12   # 表示 2023 年 12 月

Local version identifiers

  • 公共版本标识符旨在支持通过 PyPI 进行分发

  • Python 打包工具还支持 本地版本标识符 的概念,该标识符可用于识别不用于发布的本地开发版本,或由再分发者维护的版本的修改变体

示例:

1.2.1+fedora.4
0.5.dev1+gd00980f

Package Formats

索引上有两种格式的文件:

1. source distributions, or sdists
    格式: package_name-version.tar.gz
    示例: pip-23.3.1.tar.gz
2. binary distributions, or wheels
    格式: package_name-version-python_tag-abi_tag-platform_tag.whl
    示例: pip-23.3.1-py3-none-any.whl
        none: 不依赖于 Python 版本
        any: 不依赖于平台

Egg & Wheel

  • “Egg” 是一种旧的包格式,已被 wheel 格式取代。它不应该再使用。

  • 自 2023 年 8 月起,PyPI 拒绝 egg 上传。

  • The egg format was introduced by Setuptools in 2004

  • Wheel 是一种分发格式,即打包格式。

  • Egg 既是一种分发格式,也是一种运行时安装格式(如果保持压缩),并且被设计为可导入。

src layout vs flat layout

flat layout:

.
├── README.md
├── noxfile.py
├── pyproject.toml
├── setup.py
├── awesome_package/
│   ├── __init__.py
│   └── module.py
└── tools/
    ├── generate_awesomeness.py
    └── decrease_world_suck.py

src layout:

.
├── README.md
├── noxfile.py
├── pyproject.toml
├── setup.py
├── src/
│    └── awesome_package/
│       ├── __init__.py
│       └── module.py
└── tools/
    ├── generate_awesomeness.py
    └── decrease_world_suck.py

differences between the src layout and the flat layout

  • src layout 需要安装项目才能运行其代码,而 flat layout 则不需要。这意味着 src 布局涉及项目开发工作流程中的附加步骤: 可编辑安装(pip install -e .) 用于开发,常规安装 用于测试

  • src 布局有助于防止意外使用代码的开发中副本。因为 Python 解释器将当前工作目录作为导入路径上的第一项。这意味着,如果当前工作目录中存在与已安装的导入包同名的导入包,则将使用当前工作目录中的变体。

Running a command-line interface from source with src-layout

  • src-layout下,命令行界面不能直接从源代码树运行,而是需要在开发模式下安装包以进行测试。由于这在某些情况下可能不切实际

  • 解决方法是在通过其 __main__.py 文件调用时将包文件夹附加到 Python 的 sys.path 前面:

    import os
    import sys
    
    if not __package__:
        # Make CLI runnable from source tree with
        #    python src/package
        package_source_path = os.path.dirname(os.path.dirname(__file__))
        sys.path.insert(0, package_source_path)
    

参考

主页

索引

模块索引

搜索页面