Azure / Azure/azure-functions-python-worker

Python 3.14 runtime image omits _zstd, so compression.zstd cannot import

未关闭
#1,887 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
bug python
主要语言
Python
星标
357
派生
116
平均合并
32 分钟
30 天内合并 PR
1

描述

### Expected Behavior

The official Python 3.14 Azure Functions runtime should include CPython's _zstd extension so that the Python 3.14 standard-library import `from compression import zstd` succeeds. Python 3.14 is GA for Azure Functions, and CPython documents Zstandard 1.4.5 or later as the build dependency for this optional standard-library module.

### Actual Behavior

In the official `mcr.microsoft.com/azure-functions/python:4-python3.14` image, importing `compression.zstd` raises `ModuleNotFoundError: No module named '_zstd'`. CPython's recorded build state reports `MODULE__ZSTD_STATE=missing`. The final image contains `libzstd.so.1`, but the extension was not compiled when CPython was built, so adding the runtime library or installing the third-party `zstandard` package cannot restore the missing standard-library extension.

### Steps to Reproduce

1. Pull the current official image:

`docker pull --platform linux/amd64 mcr.microsoft.com/azure-functions/python:4-python3.14`

2. Run the standard-library import:

`docker run --platform linux/amd64 --rm mcr.microsoft.com/azure-functions/python:4-python3.14 python -c "from compression import zstd"`

3. Inspect CPython's recorded module build state:

`docker run --platform linux/amd64 --rm mcr.microsoft.com/azure-functions/python:4-python3.14 python -c "import sysconfig; print(sysconfig.get_config_var('MODULE__ZSTD_STATE'))"`

4. Observe the import failure and the `missing` build state.

### Relevant code being tried

```shell
docker run --platform linux/amd64 --rm mcr.microsoft.com/azure-functions/python:4-python3.14 python -c "from compression import zstd"

docker run --platform linux/amd64 --rm mcr.microsoft.com/azure-functions/python:4-python3.14 python -c "import sysconfig; print(sysconfig.get_config_var('MODULE__ZSTD_STATE'))"
```

### Relevant log output

```shell
Python 3.14.4

Traceback (most recent call last):
File "", line 1, in
from compression import zstd
File "/opt/python/3/lib/python3.14/compression/zstd/__init__.py", line 29, in
import _zstd
ModuleNotFoundError: No module named '_zstd'

MODULE__ZSTD_STATE: missing

Installed runtime library:
libzstd1:amd64 1.5.5+dfsg2-2build1.1
libzstd.so.1
```

### requirements.txt file

```shell
No third-party requirements are needed. The failure reproduces directly in the unmodified Azure Functions base image.
```

### Where are you facing this problem?

Production Environment (explain below)

### Function app name

_No response_

### Additional Information

Image tested: `mcr.microsoft.com/azure-functions/python:4-python3.14`

Image digest at the time of testing:
`sha256:2504f2b6dff243d671183e9dd6d607d1ae8f35e3536aa14965ffc3516749c1b8`

CPython build requirements document Zstandard >= 1.4.5 for `compression.zstd`:
https://docs.python.org/3.14/using/configure.html#requirements-for-optional-modules

Impact: libraries may select the Python 3.14 standard-library Zstandard implementation based on the interpreter version. For example, `starlette-compress` uses `compression.zstd` on Python >= 3.14, so its default Zstandard support fails under this image even though it works with Python distributions that include `_zstd`. Installing the third-party `zstandard` package does not fix that import path.

Current application workaround: probe `importlib.util.find_spec("_zstd")` and disable Zstandard, falling back to Brotli or Gzip. The durable fix is to make the Zstandard development dependency available when CPython is compiled for the official Python 3.14 Functions runtime.

贡献指南

打开贡献指南

调研方向

首先,针对 mcr.microsoft.com/azure-functions/python:4-python3.14 运行提供的两个 Docker 命令,并确认导入失败以及 MODULE__ZSTD_STATE 的值。然后跟踪该镜像的 Python 构建和依赖配置,找出 Zstandard 开发依赖项的选择位置。当重建后的官方镜像能够成功导入 compression.zstd,并报告 _zstd 模块存在时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
docker, python
领域
build-system, devops
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。