Summary
PyQt5 (and its underlying Qt5) officially reached End-of-Life on May 26, 2024. eSim currently pins PyQt5==5.15.7 in requirements.txt, meaning the entire GUI layer runs on an unsupported framework that will no longer receive security patches or bug fixes.
This issue proposes migrating the GUI codebase from PyQt5 → PyQt6 to future-proof the application.
Scope of Changes
Based on an audit of the src/ directory, the migration touches ~42 Python files across the following categories:
| Category |
Details |
| Import rewrites |
from PyQt5 → from PyQt6 across all modules |
| Module relocations |
QAction moved from QtWidgets → QtGui in Qt6 |
| Deprecated methods |
.exec_() → .exec() (~85 call sites) |
| Scoped enums |
PyQt6 enforces fully qualified enums (e.g. Qt.Vertical → Qt.Orientation.Vertical) |
| Removed APIs |
AA_DontUseNativeDialogs attribute removed in Qt6 |
| Dependencies |
requirements.txt updated to PyQt6>=6.5.0 |
Motivation
- Security: No more upstream patches for Qt5/PyQt5 vulnerabilities.
- Compatibility: Newer Linux distros and Python versions are dropping PyQt5 from their package repos.
- Ecosystem: Downstream tools (matplotlib, etc.) are progressively moving to Qt6 backends.
References
Summary
PyQt5 (and its underlying Qt5) officially reached End-of-Life on May 26, 2024. eSim currently pins
PyQt5==5.15.7inrequirements.txt, meaning the entire GUI layer runs on an unsupported framework that will no longer receive security patches or bug fixes.This issue proposes migrating the GUI codebase from PyQt5 → PyQt6 to future-proof the application.
Scope of Changes
Based on an audit of the
src/directory, the migration touches ~42 Python files across the following categories:from PyQt5→from PyQt6across all modulesQActionmoved fromQtWidgets→QtGuiin Qt6.exec_()→.exec()(~85 call sites)Qt.Vertical→Qt.Orientation.Vertical)AA_DontUseNativeDialogsattribute removed in Qt6requirements.txtupdated toPyQt6>=6.5.0Motivation
References