← 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

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.

Suggested action: close stale

Reason: Maintainer tigarmo stated the original issue was 'supposedly fixed in Snapcraft 8.3.2' via PR #4946 (merged Aug 1, 2024, updating pyvenv.cfg home to the final snap path) and asked the reporter to open a new issue for the residual problem, which the reporter confirmed ('Done.' — tracked as snapcraft#5144). With the original problem resolved and no activity for ~18 months, this issue has served its purpose and can be closed in favor of the follow-up.

Impact: 65 Quick Win: 26.0 Staleness: 75 Complexity: 60 Confidence: 85 Support Request: 10

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
qwen/qwen3.8-27b
Impact: 65
Quick Win: 26.0
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.
qwen3.6-35b-a3b-mtp-q6
Staleness: 85
Complexity: 40
Confidence: 90
Support Request: 10
close stale Python breaks in core24 classic snaps on older Ubuntu LTS due to platform path issues. Discussed upstream fixes, but activity stalled. Redirected to a new Snapcraft issue. Needs triage or upstream tracking.

Update history

No update history recorded yet.

Related work

  • Likely Fixed By: snapcraft#4946 (confidence 85%)

    Merged PR 'fix: fix Python venv in core24 classic snaps' (Aug 1, 2024); maintainer cited it as the 8.3.2 fix for this exact breakage.

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

    Sister issue 'Python plugin is broken in core24', closed as fixed by the same PR #4946.

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

    Follow-up feature request (error out if core24 classic python snap uses non-staged python binary), consistent with the new issue the reporter was asked to open; still open with no activity.

Related issues

Issue Project State Summary Similarity
#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. Classic Python snaps on core24 require explicitly adding python3.12-minimal to stage-packages and adjusting the app command. The developer acknowledged documentation gaps and announced upcoming Python plugin improvements.
74%
#6020 Most Python-based snaps can't build on core26 snapcraft closed Resolved in PR #6089 and released in snapcraft 8.14.3. The python plugin now correctly handles core26 builds without assuming a system interpreter. Uv and poetry plugins remain unaddressed and will be fixed in future updates.
73%
#2161192 python plugin not working at all with snapcraft 9+ snapcraft (launchpad) open Python plugin broken on core26/snapcraft 9+ — modules not loading, requires python3-venv instead of python3. No maintainer response after 49 days.
73%
#5144 error out if core24 classic python snap is created with the non-staged python binary snapcraft open Feature request to add a post_prime check in the python plugin that errors when a core24 classic snap is built with the host python (/usr/bin/python*) instead of a staged interpreter, which produces a broken pyvenv.cfg (home = /usr/bin). No labels, no comments, no activity for ~2 years.
71%