Azure / Azure/azure-functions-python-worker

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

Offen
#1,887 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
bug python
Vorherrschende Sprache
Python
Sterne
357
Forks
116
Ø Merge
32 Min.
Gemergte PRs (30 T.)
1

Beschreibung

### 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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Führe zunächst die beiden bereitgestellten Docker-Befehle gegen mcr.microsoft.com/azure-functions/python:4-python3.14 aus und bestätige den Importfehler sowie den Wert von MODULE__ZSTD_STATE. Verfolge anschließend die Python-Build- und Dependency-Konfiguration des Images zurück, um herauszufinden, wo die Zstandard-Entwicklungsabhängigkeit ausgewählt wird. Die Aufgabe ist abgeschlossen, wenn das neu gebaute offizielle Image compression.zstd erfolgreich importiert und das Vorhandensein des _zstd-Moduls meldet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
docker, python
Bereich
build-system, devops
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.