GeezerVison is showing github.com — pkg_resource deprecated · Issue #286 · python-xlib/python-xlib
pkg_resource deprecated #286Descriptionsetuptools 67 deprecated pkg_resource, and in 82 it was removed, leading to:
* Building wheel...
Traceback (most recent call last):
File "/opt/pkg/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
main()
File "/opt/pkg/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main
json_out["return_val"] = hook(**hook_input["kwargs"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/pkg/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 280, in build_wheel
return _build_backend().build_wheel(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 438, in build_wheel
return _build(['bdist_wheel'])
^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 429, in _build
return self._build_with_temp_dir(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
self.run_setup()
File "/opt/pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 520, in run_setup
super().run_setup(setup_script=setup_script)
File "/opt/pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals())
File "<string>", line 3, in <module>
ModuleNotFoundError: No module named 'pkg_resources'
when trying to build it.
Workaround:
--- setup.py.orig 2026-02-17 15:06:10.418245753 +0000
+++ setup.py
@@ -1,12 +1,9 @@
# Distutils script for python-xlib
-from pkg_resources import parse_requirements
from setuptools import (__version__ as setuptools_version, setup)
# Check setuptools is recent enough to support `setup.cfg`.
-setuptools_require = next(parse_requirements('setuptools>=30.3.0'))
-assert setuptools_version in setuptools_require, '{} is required'.format(setuptools_require)
setup(
Activityloqs commented on Feb 24, 2026 @0-wiz-0 Have you considered preserving the version check for backwards compatibility possible:
--- a/setup.py
+++ b/setup.py
@@ -1,12 +1,13 @@
# Distutils script for python-xlib
-from pkg_resources import parse_requirements
+from packaging.requirements import Requirement
from setuptools import (__version__ as setuptools_version, setup)
# Check setuptools is recent enough to support `setup.cfg`.
-setuptools_require = next(parse_requirements('setuptools>=30.3.0'))
-assert setuptools_version in setuptools_require, '{} is required'.format(setuptools_require)
+setuptools_require = Requirement('setuptools>=30.3.0')
+assert setuptools_require.specifier.contains(setuptools_version), \
+ '{} is required (found {})'.format(setuptools_require, setuptools_version)
setup(
Or attempt to preserve compatibility back to python 2.7:
--- a/setup.py
+++ b/setup.py
@@ -1,12 +1,20 @@
# Distutils script for python-xlib
-from pkg_resources import parse_requirements
-from setuptools import (__version__ as setuptools_version, setup)
-
+try:
+ from packaging.requirements import Requirement
+except ImportError:
+ from pkg_resources import parse_requirements
+ def Requirement(req_str):
+ return next(parse_requirements(req_str))
# Check setuptools is recent enough to support `setup.cfg`.
-setuptools_require = next(parse_requirements('setuptools>=30.3.0'))
-assert setuptools_version in setuptools_require, '{} is required'.format(setuptools_require)
+setuptools_require = Requirement('setuptools>=30.3.0')
+
+if hasattr(setuptools_require, 'specifier'):
+ assert setuptools_require.specifier.contains(setuptools_version)
+else:
+
+ assert setuptools_version in setuptools_require
setup(
What did you do for runtests.py?
--- a/runtests.py
+++ b/runtests.py
@@ -10,7 +10,16 @@ import sys
import tempfile
import textwrap
-from pkg_resources import load_entry_point
+def get_entry_point(group, name):
+ try:
+ eps = entry_points(group=group, name=name)
+ except TypeError:
+ eps = entry_points().get(group, [])
+
+ if isinstance(eps, dict):
+ return next(ep for ep in eps if ep.name == name)
+
+ return next(iter(eps))
class SigException(BaseException):
@@ -50,10 +59,18 @@ def tests_run(display, authfile=None):
sys.executable,
'-c', textwrap.dedent(
'''
- from pkg_resources import load_entry_point
- sys.exit(load_entry_point(
- 'nose', 'console_scripts', 'nosetests',
- )())
+ try:
+ from importlib.metadata import entry_points
+ except ImportError:
+ from importlib_metadata import entry_points
+
+ try:
+ ep = next(iter(entry_points(group='console_scripts', name='nosetests')))
+ except TypeError:
+ ep = next(ep for ep in entry_points().get('console_scripts', []) if ep.name == 'nosetests')
+
+ import sys
+ sys.exit(ep.load()())
'''
).lstrip(),
'--exe', '--with-xunit', '--verbosity=3',
@@ -68,7 +85,7 @@ def tests_run(display, authfile=None):
print('running tests: `{0}`'.format(' '.join(cmd)))
sys.argv = cmd
try:
- load_entry_point('nose', 'console_scripts', 'nosetests')()
+ get_entry_point('console_scripts', 'nosetests').load()()
except SystemExit as err:
code = err.code
else:0-wiz-0 commented on Feb 25, 2026 Sure, preserving the check is nicer.
I'm not interested in Python 2.7 compatibility.
I didn't touch runtests.py because I use pytest to run the tests, that seems to work fine, so I didn't notice.
But please go ahead and commit your versions!
Thanks.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|