← 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
2024-07-17 14:28:32+00:00
Updated
2025-03-11 14:28:29+00:00
Closed

Current evaluation

No evaluation has been recorded for this issue yet.

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

No evaluation history available.