From 6eaa13c404df62dae0827709cce6a0dd2a9d52f7 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Tue, 1 Feb 2022 18:19:42 -0500 Subject: [PATCH] Remove use of pkg_resources from osrf_pycommon. (#66) * Remove use of pkg_resources from osrf_pycommon. Replace it with the use of the more modern importlib* libraries. There are a couple of reasons to do this: 1. pkg_resources is quite slow to import; on my machine, just firing up the python interpreter takes ~35ms, while firing up the python interpreter and importing pkg_resources takes ~175ms. Firing up the python interpreter and importing importlib_metadata takes ~70ms. Removing 100ms per invocation of the command-line both makes it speedier for users, and will speed up our tests (which call out to the command-line quite a lot). 2. pkg_resources is somewhat deprecated and being replaced by importlib. https://importlib-metadata.readthedocs.io/en/latest/using.html describes some of it Signed-off-by: Chris Lalancette * depend on importlib-metadata everywhere Signed-off-by: William Woodall * Fixes from review. Signed-off-by: Chris Lalancette * restrict suites to only include ones that have python3-importlib-metadata Signed-off-by: William Woodall * add note to README about release changes Signed-off-by: William Woodall Co-authored-by: William Woodall --- .travis.yml | 2 +- README.md | 5 +++++ osrf_pycommon/cli_utils/verb_pattern.py | 9 ++++++--- package.xml | 1 + setup.py | 4 ++++ stdeb.cfg | 6 +++--- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f27d8a..c988426 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ python: - "3.7" - "3.8" install: - - pip install coverage nose flake8 mock + - pip install coverage nose flake8 mock importlib-metadata - pip install git+https://github.com/PyCQA/flake8-import-order.git script: - PYTHONASYNCIODEBUG=1 python setup.py nosetests -s --with-coverage --cover-inclusive diff --git a/README.md b/README.md index 9b034e8..20f1695 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,9 @@ osrf_pycommon Commonly needed Python modules, used by Python software developed at OSRF. +Branches +======== + +If you are releasing (using ``stdeb`` or on the ROS buildfarm) for any Ubuntu < ``focal``, or for any OS that doesn't have a key for ``python3-importlib-metadata``, then you need to use the ``1.0.x`` branch, or the latest ``1.`` branch, because starting with ``2.0.0``, that dependency will be required. + If you are using Python 2, then you should use the ``python2`` branch. diff --git a/osrf_pycommon/cli_utils/verb_pattern.py b/osrf_pycommon/cli_utils/verb_pattern.py index 8259db9..a992388 100644 --- a/osrf_pycommon/cli_utils/verb_pattern.py +++ b/osrf_pycommon/cli_utils/verb_pattern.py @@ -17,7 +17,10 @@ import sys import inspect -import pkg_resources +try: + import importlib.metadata as importlib_metadata +except ModuleNotFoundError: + import importlib_metadata def call_prepare_arguments(func, parser, sysargs=None): @@ -149,7 +152,7 @@ def list_verbs(group): :rtype: list of str """ verbs = [] - for entry_point in pkg_resources.iter_entry_points(group=group): + for entry_point in importlib_metadata.entry_points().get(group, []): verbs.append(entry_point.name) return verbs @@ -162,7 +165,7 @@ def load_verb_description(verb_name, group): :returns: verb description :rtype: dict """ - for entry_point in pkg_resources.iter_entry_points(group=group): + for entry_point in importlib_metadata.entry_points().get(group, []): if entry_point.name == verb_name: return entry_point.load() diff --git a/package.xml b/package.xml index 944b549..c792728 100644 --- a/package.xml +++ b/package.xml @@ -10,6 +10,7 @@ Apache License 2.0 + python3-importlib-metadata python3-mock diff --git a/setup.py b/setup.py index c0017bc..055691d 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,5 @@ +import sys + from setuptools import find_packages from setuptools import setup @@ -5,6 +7,8 @@ install_requires = [ 'setuptools', ] +if sys.version_info < (3, 8): + install_requires.append('importlib-metadata') package_excludes = ['tests*', 'docs*'] packages = find_packages(exclude=package_excludes) diff --git a/stdeb.cfg b/stdeb.cfg index d0bbc3e..8bb9ed1 100644 --- a/stdeb.cfg +++ b/stdeb.cfg @@ -1,6 +1,6 @@ [DEFAULT] -Depends3: python3-setuptools +Depends3: python3-setuptools, python3-importlib-metadata Conflicts3: python-osrf-pycommon -Suite3: bionic cosmic disco eoan focal jammy buster bullseye -X-Python3-Version: >= 3.5 +Suite3: focal jammy buster bullseye +X-Python3-Version: >= 3.8 No-Python2: