跳转到主要内容

一个类似于列表的结构,实现了collections.abc.MutableSequence

项目描述

冻结列表

GitHub status for master branch codecov.io status for master branch frozenlist @ PyPI Read The Docs build status badge Matrix Room — #aio-libs:matrix.org Matrix Space — #aio-libs-space:matrix.org

简介

frozenlist.FrozenList 是一个类似列表的结构,实现了 collections.abc.MutableSequence。该列表在调用 FrozenList.freeze 之前是可变的,之后修改列表将引发 RuntimeError

>>> from frozenlist import FrozenList
>>> fl = FrozenList([17, 42])
>>> fl.append('spam')
>>> fl.append('Vikings')
>>> fl
<FrozenList(frozen=False, [17, 42, 'spam', 'Vikings'])>
>>> fl.freeze()
>>> fl
<FrozenList(frozen=True, [17, 42, 'spam', 'Vikings'])>
>>> fl.frozen
True
>>> fl.append("Monty")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "frozenlist/_frozenlist.pyx", line 97, in frozenlist._frozenlist.FrozenList.append
    self._check_frozen()
  File "frozenlist/_frozenlist.pyx", line 19, in frozenlist._frozenlist.FrozenList._check_frozen
    raise RuntimeError("Cannot modify frozen list.")
RuntimeError: Cannot modify frozen list.

冻结列表也是可哈希的,但仅在冻结时如此。否则它也会引发 RuntimeError

>>> fl = FrozenList([17, 42, 'spam'])
>>> hash(fl)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "frozenlist/_frozenlist.pyx", line 111, in frozenlist._frozenlist.FrozenList.__hash__
    raise RuntimeError("Cannot hash unfrozen list.")
RuntimeError: Cannot hash unfrozen list.
>>> fl.freeze()
>>> hash(fl)
3713081631934410656
>>> dictionary = {fl: 'Vikings'} # frozen fl can be a dict key
>>> dictionary
{<FrozenList(frozen=True, [1, 2])>: 'Vikings'}

安装

$ pip install frozenlist

该库需要 Python 3.8 或更高版本。

文档

https://frozenlist.aio-libs.org

沟通渠道

我们有一个 Matrix 空间 #aio-libs-space:matrix.org,也通过 Gitter 可访问。

需求

  • Python >= 3.8

许可证

frozenlist 提供 Apache 2 许可。

源代码

该项目托管在 GitHub

如果您发现了一个错误或有一些改进库的建议,请在 错误跟踪器 中提交问题。

变更日志

1.4.1 (2023-12-15)

包装更新和下游说明

  • 在发行包元数据中正式声明支持 Python 3.12 和 PyPy 3.8-3.10。

    GitHub 上的相关问题和拉取请求: #553.

  • 将打包方式从旧的 setup.py 替换为树内 PEP 517 构建后端 - 由 @webknjaz 完成。

    当最终用户或下游打包者需要从源代码构建 frozenlist(Git 检出或 sdist)时,他们可以传递一个 config_settings 标志 pure-python。如果没有设置此标志,则将构建 C 扩展并将其包含在分发中。

    以下是如何使用 pip 实现此操作的方法

    $ python3 -m pip install . --config-settings=pure-python=

    这也适用于 -e | --editable

    同样可以通过 pypa/build 实现

    $ python3 -m build --config-setting=pure-python=

    使用 -w | --wheel 可以强制 pypa/build 直接从源代码生成 wheel,而不是构建 sdist 然后从中构建。

    GitHub 上的相关问题和拉取请求: #560.

面向贡献者的更改

  • 现在可以使用 with-cython-tracing PEP 517 配置设置请求 Cython 构建中的行跟踪 - @webknjaz

    这可以在 CI 和开发环境中用于测量 Cython 模块的覆盖率,但对于最终用户或下游打包者通常没有用。

    以下是一个使用示例

    $ python3 -Im pip install . --config-settings=with-cython-tracing=true

    对于可编辑安装,此设置默认开启。否则,除非明确请求,否则默认关闭。

    以下生成用于将测量映射回 PYX 文件的 C 文件,这是 Cython 覆盖率插件的必需文件

    $ python -Im pip install -e .

    或者,可以将 FROZENLIST_CYTHON_TRACING=1 环境变量设置为执行与 PEP 517 配置设置相同的功能。

    GitHub 上的相关问题和拉取请求: #560.

  • 已实现对Cython模块的覆盖率收集 - 由@webknjaz完成。

    它还将报告给Codecov的任何非发布CI作业。

    GitHub上的相关问题和拉取请求: #561.

  • 已添加一个逐步的发布指南,描述了如何发布frozenlist - 由@webknjaz完成。

    这主要是针对维护者。

    GitHub上的相关问题和拉取请求: #563.

  • 在文档中发布了详细的贡献指南,描述了如何编写变更日志片段 - 由@webknjaz完成。

    GitHub上的相关问题和拉取请求: #564.


1.4.0 (2023-07-12)

发布的源代码包现在可以在Python 3.12下构建。


错误修复

  • 移除了一个未使用的typing.Tuple导入 #411

弃用和删除

  • 放弃了对Python 3.7的支持。 #413

其他


1.3.3 (2022-11-08)

  • 修复了在创建新版本时CI运行的步骤,其中当当前版本部分已存在时,新的towncrier版本会失败。


1.3.2 (2022-11-08)

其他

  • 更新了CI运行,以更好地检查测试结果并避免弃用语法。 #327


1.3.1 (2022-08-02)

发布的源代码包现在可以在Python 3.11下构建。


1.3.0 (2022-01-18)

错误修复

  • 不要与二进制发行版一起安装C源代码。

弃用和删除

  • 放弃了对Python 3.6的支持 #274


1.2.0 (2021-10-16)

功能

  • FrozenList现在根据PEP 585支持作为泛型类型使用,例如frozen_int_list: FrozenList[int](需要Python 3.9或更高版本)。 #172

  • 增加了对Python 3.10的支持。 #227

  • 开始提供带有musl标签的平台特定wheel,针对典型的Alpine Linux运行时。 #227

  • 开始提供针对Apple Silicon的arm64平台特定wheel。 #227


1.1.1 (2020-11-14)

错误修复

  • 提供x86 Windows wheel。 #169


1.1.0 (2020-10-13)

功能

  • 添加了对冻结列表的哈希支持。 #136

  • 支持Python 3.8和3.9。

  • 为Linux上的aarch64i686ppc64les390x架构以及x86_64提供wheel。


1.0.0 (2019-11-09)

弃用和删除

  • 放弃了对Python 3.5的支持;今后只支持3.6、3.7和3.8。 #24

下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。

源代码分发

frozenlist-1.4.1.tar.gz (37.8 kB 查看哈希值)

上传时间 源代码

构建分发

frozenlist-1.4.1-py3-none-any.whl (11.6 kB 查看哈希值)

上传时间 Python 3

frozenlist-1.4.1-cp312-cp312-win_amd64.whl (50.5 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

frozenlist-1.4.1-cp312-cp312-win32.whl (44.1 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl (282.6 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl (290.8 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ s390x

frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl (286.9 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ ppc64le

frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl (268.1 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ i686

frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl (281.3 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ ARM64

frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (289.4 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ s390x

frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (286.7 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ppc64le

frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (280.7 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (281.5 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (265.5 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl (51.9 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl (53.7 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl (93.9 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

frozenlist-1.4.1-cp311-cp311-win_amd64.whl (50.5 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

frozenlist-1.4.1-cp311-cp311-win32.whl (44.4 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl (272.3 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl (281.5 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ s390x

frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl (282.3 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ ppc64le

frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl (260.9 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ i686

frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl (272.4 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ ARM64

frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (280.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ s390x

frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (284.7 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ppc64le

frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (273.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (272.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (258.8 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl (53.4 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl (55.3 kB 查看哈希值)

上传时间: CPython 3.11 macOS 10.9+ x86-64

frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl (97.1 kB 查看哈希值)

上传时间: CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

frozenlist-1.4.1-cp310-cp310-win_amd64.whl (50.4 kB 查看哈希值)

上传时间: CPython 3.10 Windows x86-64

frozenlist-1.4.1-cp310-cp310-win32.whl (44.6 kB 查看哈希值)

上传时间: CPython 3.10 Windows x86

frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl (254.0 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ x86-64

frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl (264.4 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ s390x

frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl (263.8 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ ppc64le

frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl (245.9 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ i686

frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl (253.4 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ ARM64

frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (258.9 kB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ s390x

frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (262.4 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ppc64le

frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (238.6 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (239.5 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (229.4 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl (52.2 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl (53.8 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl (94.3 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

frozenlist-1.4.1-cp39-cp39-win_amd64.whl (50.7 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

frozenlist-1.4.1-cp39-cp39-win32.whl (44.8 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl (256.7 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl (266.4 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ s390x

frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl (266.9 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ppc64le

frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl (247.6 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ i686

frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl (255.7 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ARM64

frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (261.3 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ s390x

frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (265.6 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ppc64le

frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (239.4 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (240.7 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (230.8 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl (53.7 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl (55.2 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl (97.3 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

frozenlist-1.4.1-cp38-cp38-win_amd64.whl (50.8 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

frozenlist-1.4.1-cp38-cp38-win32.whl (44.8 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl (248.0 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ x86-64

frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl (255.6 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ s390x

frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl (257.4 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ ppc64le

frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl (239.7 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ i686

frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl (246.9 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ ARM64

frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (252.9 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ s390x

frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (257.0 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ppc64le

frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (239.5 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ ARM64

frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (240.9 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (231.4 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl (53.8 kB 查看哈希值)

上传时间: CPython 3.8 macOS 11.0+ ARM64

frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl (55.2 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ x86-64

frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl (97.4 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面