← Back to issue list

Python plugin. Python is broken in core24 classic snaps if snap is used on an older Ubuntu LTS version

View original Github issue

Metadata

Project
craft-parts
Number
#786
Type
issue
State
open
Author
NucciTheBoss
Labels
—
Created
Updated
Closed
—

Current evaluation

Core24 classic snaps using the Python plugin fail on older Ubuntu LTS hosts because staged Python cannot find its stdlib; Snapcraft 8.3.2's fix proved incomplete, with follow-up in snapcraft#5144.

Suggested action: keep open

Reason: The body provides an exact Slurm revision, LXD reproduction commands, staged packages, and a complete ModuleNotFoundError trace. A maintainer identified Snapcraft as the likely layer, but a later Landscape report showed Snapcraft 8.3.2 only shifted the failure to a charset_normalizer circular import; snapcraft#5144 remains open, so this runtime break is not resolved.

Evaluated by: mr-cal-bot

Impact: 68 Quick Win: 20 Complexity: 67 Confidence: 92 Actionability: 87

Issue body

### Bug Description Python is broken in core24 classic snaps when the snap is installed on an older Ubuntu base. The embedded Python interpreter in the squashfs archive borks when you try to invoke a Python script. Rather than running the script, Python will throw platform related errors such as not finding the `encodings` module. The Python interpreter will work properly if using the core24 classic snap on Ubuntu 24.04 LTS, but will fail if you use the classic snap on an older LTS release such as 22.04 or 20.04. ## Related issues and threads * [[Snapcraft Forum]: Upgrading classic snap to core24 using snapcraft 8.3 causes python 3.12 errors at runtime](https://forum.snapcraft.io/t/upgrading-classic-snap-to-core24-using-snapcraft-8-3-causes-python-3-12-errors-at-runtime/41045) * https://github.com/charmed-hpc/slurm-snap/issues/19 * https://github.com/certbot/certbot/pull/9956 ### To Reproduce For the Slurm snap, I have already reverted back to core22 for the time being, however, there was time when we were publishing core24-base Slurm snaps with this issue. Use the following commands to reproduce the issue: ```shell # First, build version of the Slurm snap that has this issue. $ git clone git@github.com:charmed-hpc/slurm-snap.git $ cd slurm-snap $ git checkout 23.11.7/rev441/amd64 $ snapcraft -v pack # Now with the built snap, use LXD to reproduce the issue $ lxc launch ubuntu:jammy python-tester --vm $ lxc file push slurm_*.snap python-tester/root/slurm.snap $ lxc exec python-tester -- snap install ./slurm.snap --dangerous --classic # See Python platform error be printed. ``` ### part yaml ```shell # The current Slurm snap has changed a bit from when we reverted from core24, so here's the link # to the revision with problematic part: https://github.com/charmed-hpc/slurm-snap/blob/a3ab81f8c67d0b15ee17c3c62ec2a9850005b3de/snap/snapcraft.yaml#L145-L160 hooks: source: . build-attributes: [enable-patchelf] plugin: python build-packages: - git - python3-setuptools python-requirements: [requirements.txt] stage-packages: - libpython3.12-stdlib - libpython3.12-minimal - python3-venv - python3.12-minimal override-build: | craftctl default snap-helpers write-hooks ``` ### Relevant log output ```shell # From the Slurm snap error: cannot perform the following tasks: - Run install hook of "slurm" snap if present (run hook "install": ----- Could not find platform independent libraries <prefix> Could not find platform dependent libraries <exec_prefix> Python path configuration: PYTHONHOME = (not set) PYTHONPATH = (not set) program name = 'python3' isolated = 0 environment = 1 user site = 1 safe_path = 0 import site = 1 is in build tree = 0 stdlib dir = '/usr/lib/python3.12' sys._base_executable = '/snap/slurm/417/usr/bin/python3.12' sys.base_prefix = '/usr' sys.base_exec_prefix = '/usr' sys.platlibdir = 'lib' sys.executable = '/snap/slurm/417/bin/python3' sys.prefix = '/usr' sys.exec_prefix = '/usr' sys.path = [ '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', ] Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state: core initialized ModuleNotFoundError: No module named 'encodings' Current thread 0x00007f75abe3d300 (most recent call first): <no Python frame> -----) # From certbot after patching PYTHONHOME and PYTHONPATH AttributeError: partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most likely due to a circular import) ```

Evaluation history

Date Model Scores Action Summary
stealth/space-bunny-alpha
Impact: 68
Quick Win: 20
Complexity: 67
Confidence: 92
Actionability: 87
keep open Core24 classic snaps using the Python plugin fail on older Ubuntu LTS hosts because staged Python cannot find its stdlib; Snapcraft 8.3.2's fix proved incomplete, with follow-up in snapcraft#5144.
qwen/qwen3.6-35b-a3b
Impact: 70
Quick Win: 17
Complexity: 60
Confidence: 70
Actionability: 60
keep open Python 3.12 in core24 classic snaps fails on older Ubuntu bases with module-not-found errors; reported fix in Snapcraft 8.3.2 appears incomplete as users still encounter the issue.
qwen/qwen3.8-27b
Impact: 65
Quick Win: 26
Staleness: 75
Complexity: 60
Confidence: 85
Support Request: 10
close stale Python plugin bug: core24 classic snaps fail on older Ubuntu LTS (20.04/22.04) with 'No module named encodings'. Original problem fixed in Snapcraft 8.3.2 via PR #4946; residual follow-up tracked in snapcraft#5144. Inactive since Sept 2024.
qwen/qwen3.6-35b-a3b
Staleness: 75
Complexity: 65
Confidence: 95
Support Request: 10
close not a bug Python 3.12 fails in core24 classic snaps on older Ubuntu LTS. Maintainer confirmed fix in Snapcraft 8.3.2 and redirected to a new issue. Resolved.
qwen3.6-35b-a3b-mtp-q6
Staleness: 85
Complexity: 40
Confidence: 90
Support Request: 10
close stale Python plugin bug in core24 classic snaps on older Ubuntu LTS. Maintainer fixed in Snapcraft 8.3.2 and asked to open new issue; reporter confirmed done. Issue is inactive and superseded.

Update history

No update history recorded yet.

Related work

  • Related To: snapcraft#5144 (confidence 99%)

    Opened at a maintainer's request to track the unresolved non-staged Python binary case behind the same core24 classic failure.

  • Related To: snapcraft#4942 (confidence 98%)

    PR #4946, squash-merged as 952a8e04d, corrected the core24 pyvenv.cfg home path, but later reports in this issue indicate the fix was incomplete.

Related issues

Issue Project State Summary Similarity
#4942 Python plugin is broken in core24 snapcraft closed Python plugin broke in core24 classic snaps due to Python 3.12 venv changes. Fixed by PR #4946 (squash-merged as 952a8e04d), which rewrites pyvenv.cfg's "home" key to /snap/<name>/current in snapcraft/parts/plugins/python_common.py.
78%
#5407 Unable to build Python snaps using classic confinement with core24 using snapcraft 8.8.0 (8.x/stable) snapcraft closed Resolved as a configuration issue: staging python3.12-minimal and invoking bin/python made the core24 classic Python snap build work; no fixing PR or commit was cited.
78%
#5144 error out if core24 classic python snap is created with the non-staged python binary snapcraft open Add a Python-plugin guard for classic snaps staged without the python3-minimal symlink; current post_prime only rewrites pyvenv.cfg, leaving the core24 failure mode unresolved.
76%
#1660 Python plugin fails on core26: base snap does not include Python interpreter craft-parts open core26 lacks a Python runtime, so Python-plugin builds fail unless Python is staged. Documentation covers the workaround, and maintainers are pursuing clearer warning guidance.
73%
#1880319 Python plugin --classic snap conflicts with system python snapcraft (launchpad) closed Classic Python snap handling was fixed by merged PR #1093 (e7824093f), preventing host-environment leakage and using a classic-compatible interpreter.
72%
#2161192 python plugin not working at all with snapcraft 9+ snapcraft (launchpad) open Core26 Python plugin builds and module loading were fixed; packaging Python separately is now documented as required by the base.
72%
#5408 Unable to build usable Python snaps which use Ubuntu-provided python3-* dependencies using strict confinement with core24 using snapcraft 8.8.0 (8.x/stable) snapcraft closed Closed as a Python path/configuration issue: setting PYTHONPATH to $SNAP/usr/lib/python3/dist-packages made staged Ubuntu python3-* packages importable; no Snapcraft fix was made.
71%