[GH-ISSUE #24] Kivy 2.3.1 Compatibility on Fedora (Python 3.14) #18

Open
opened 2026-03-13 15:17:19 +03:00 by kerem · 1 comment
Owner

Originally created by @dksinden on GitHub (Jan 10, 2026).
Original GitHub issue: https://github.com/absadiki/whatsapp-msgstore-viewer/issues/24

In a similar fashion to Ubuntu for Fedora you will need a workaround, also patching for Python 3.14

  1. Install System Dependencies
    On Fedora, you must install the following development libraries to compile Kivy and Pygame successfully:

sudo dnf install -y SDL2-devel SDL2_image-devel SDL2_mixer-devel SDL2_ttf-devel python3-devel mesa-libGL-devel

  1. Install Python Packages
    pip install Kivy==2.3.1 pygame

  2. Python 3.14 Patch
    You must patch kivy/lang/parser.py to replace the removed ast.Str class with ast.Constant.

File Location: ~/.local/lib/python3.14/site-packages/kivy/lang/parser.py (or your virtualenv path).

The Fix: Locate the get_names_from_expression method and replace the ast.Str check:

OLD (Incompatible)

if isinstance(n, ast.Str):
yield from cls.get_names_from_expression(n.s)

NEW (Recommended Fix)

if isinstance(n, ast.Constant) and isinstance(n.value, str):
yield from cls.get_names_from_expression(n.value)

Originally created by @dksinden on GitHub (Jan 10, 2026). Original GitHub issue: https://github.com/absadiki/whatsapp-msgstore-viewer/issues/24 In a similar fashion to Ubuntu for Fedora you will need a workaround, also patching for Python 3.14 1. Install System Dependencies On Fedora, you must install the following development libraries to compile Kivy and Pygame successfully: sudo dnf install -y SDL2-devel SDL2_image-devel SDL2_mixer-devel SDL2_ttf-devel python3-devel mesa-libGL-devel 2. Install Python Packages pip install Kivy==2.3.1 pygame 3. Python 3.14 Patch You must patch kivy/lang/parser.py to replace the removed ast.Str class with ast.Constant. File Location: ~/.local/lib/python3.14/site-packages/kivy/lang/parser.py (or your virtualenv path). The Fix: Locate the get_names_from_expression method and replace the ast.Str check: # OLD (Incompatible) if isinstance(n, ast.Str): yield from cls.get_names_from_expression(n.s) # NEW (Recommended Fix) if isinstance(n, ast.Constant) and isinstance(n.value, str): yield from cls.get_names_from_expression(n.value)
Author
Owner

@absadiki commented on GitHub (Jan 13, 2026):

Thanks @dksinden for the detailed report and workaround, much appreciated 👍
Please feel free to submit a PR that adds a reference to this issue in the README. That would make it easier for others to find.

<!-- gh-comment-id:3744849907 --> @absadiki commented on GitHub (Jan 13, 2026): Thanks @dksinden for the detailed report and workaround, much appreciated 👍 Please feel free to submit a PR that adds a reference to this issue in the README. That would make it easier for others to find.
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/whatsapp-msgstore-viewer#18
No description provided.