diff --git a/linux/debian/control b/linux/debian/control index ff457d8473d..8a9a72b6505 100644 --- a/linux/debian/control +++ b/linux/debian/control @@ -30,6 +30,7 @@ Build-Depends: python3-lxml, python3-magic, python3-numpy, + python3-packaging, python3-pil, python3-pip, python3-qrcode, @@ -83,13 +84,14 @@ Package: python3-keyman-config Section: python Architecture: all Depends: + dbus-x11, dconf-cli, gir1.2-webkit2-4.1 | gir1.2-webkit2-4.0, keyman-engine, python3-bs4, python3-gi, + python3-packaging, python3-sentry-sdk (>= 1.1), - dbus-x11, ${misc:Depends}, ${python3:Depends}, Description: Keyman for Linux configuration diff --git a/linux/keyman-config/keyman_config/install_kmp.py b/linux/keyman-config/keyman_config/install_kmp.py index 06399c5304a..d44a84cb97c 100755 --- a/linux/keyman-config/keyman_config/install_kmp.py +++ b/linux/keyman-config/keyman_config/install_kmp.py @@ -3,8 +3,8 @@ import json import logging import os +import packaging.version import zipfile -from pkg_resources import parse_version from enum import Enum from shutil import rmtree @@ -149,7 +149,7 @@ def _check_version(self, inputfile, system): fileVersion = secure_lookup(system, 'fileVersion') if not fileVersion: fileVersion = '7.0' - if parse_version(fileVersion) > parse_version(__version__): + if packaging.version.parse(fileVersion) > packaging.version.parse(__version__): logging.error("install_kmp.py: error: %s requires a newer version of Keyman (%s)", inputfile, fileVersion) rmtree(self.packageDir) diff --git a/linux/keyman-config/keyman_config/install_window.py b/linux/keyman-config/keyman_config/install_window.py index 686e24eac97..dda242c7e1c 100755 --- a/linux/keyman-config/keyman_config/install_window.py +++ b/linux/keyman-config/keyman_config/install_window.py @@ -10,6 +10,7 @@ import sys import tempfile import webbrowser +import packaging.version import gi @@ -20,8 +21,6 @@ # TODO: Remove once we drop support for Ubuntu 20.04 Focal gi.require_version('WebKit2', '4.0') -from pkg_resources import parse_version - from gi.repository import Gtk, WebKit2 from keyman_config import _, secure_lookup @@ -134,11 +133,12 @@ def _show_no_pkg_error(self, kmpfile, viewkmp): self.checkcontinue = False def _uninstall_prev_version_if_necessary(self, keyboardid, viewkmp, installed_kmp_ver, info): - if not installed_kmp_ver or not secure_lookup(info, 'version', 'description'): + new_kmp_version = secure_lookup(info, 'version', 'description') + if not installed_kmp_ver or not new_kmp_version: return True - logging.info("package version %s", secure_lookup(info, 'version', 'description')) + logging.info("package version %s", new_kmp_version) logging.info("installed kmp version %s", installed_kmp_ver) - if parse_version(secure_lookup(info, 'version', 'description')) >= parse_version(installed_kmp_ver): + if packaging.version.parse(new_kmp_version) >= packaging.version.parse(installed_kmp_ver): return True response = self._show_version_message_dlg( viewkmp, diff --git a/linux/keyman-config/keyman_config/list_installed_kmp.py b/linux/keyman-config/keyman_config/list_installed_kmp.py index 2b6a32acc42..2bac9c8d4ea 100755 --- a/linux/keyman-config/keyman_config/list_installed_kmp.py +++ b/linux/keyman-config/keyman_config/list_installed_kmp.py @@ -3,7 +3,7 @@ import json import logging import os -from pkg_resources import parse_version +import packaging.version from keyman_config import secure_lookup from keyman_config.deprecated_decorator import deprecated @@ -133,7 +133,7 @@ def _get_kmp_version_internal(packageId, location, previousVersion): kmp = get_installed_kmp(location) if packageId in kmp: version = kmp[packageId]['kmpversion'] - if not previousVersion or parse_version(previousVersion) < parse_version(version): + if not previousVersion or packaging.version.parse(previousVersion) < packaging.version.parse(version): previousVersion = version return previousVersion diff --git a/linux/keyman-config/km-package-install b/linux/keyman-config/km-package-install index 613e00368d0..675439ee723 100755 --- a/linux/keyman-config/km-package-install +++ b/linux/keyman-config/km-package-install @@ -4,12 +4,12 @@ import argparse import datetime import logging import os -import requests -import requests_cache import sys import time -from pkg_resources import parse_version from zipfile import is_zipfile +import packaging.version +import requests +import requests_cache from keyman_config import KeymanApiUrl, add_standard_arguments, initialize_logging, initialize_sentry, secure_lookup from keyman_config.get_kmp import get_keyboard_data, get_kmp, keyman_cache_dir @@ -175,7 +175,7 @@ def main(): sys.exit(3) pkg_version = secure_lookup(pkgdata, 'version') if installed_kmp_ver and pkg_version: - if parse_version(installed_kmp_ver) > parse_version(pkg_version): + if packaging.version.parse(installed_kmp_ver) > packaging.version.parse(pkg_version): if args.force: logging.warning(f'km-package-install: warning: The {args.package} keyboard ' + f'is already installed with a newer version {installed_kmp_ver}. ' + diff --git a/linux/keyman-config/setup.py b/linux/keyman-config/setup.py index 8931241ff22..58fdbbaacaa 100644 --- a/linux/keyman-config/setup.py +++ b/linux/keyman-config/setup.py @@ -17,8 +17,17 @@ zip_safe=False, # don't install a zip install_requires=[ - 'lxml', 'numpy', 'Pillow', 'requests', 'requests-cache', - 'python-magic', 'qrcode', 'sentry-sdk' + 'dbus-python', + 'lxml', + 'numpy', + 'packaging', + 'pillow', + 'PyGObject', + 'python-magic', + 'qrcode', + 'requests-cache', + 'requests', + 'sentry-sdk', ], # metadata to display on PyPI