Skip to content

Use of deprecated / removed pkg_resources #729

@loqs

Description

@loqs

pkg_resources pkg_resources was deprecated in Setuptools v67.5.0. It was removed in Setuptools v82.0.0. It is used in setup.py. There is a pkg_resources migration guide. This causes the build to fail with setuptools 82 if cythonize is need:

* Getting build dependencies for wheel...
* Building wheel...
/usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
!!

        ********************************************************************************
        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).

        By 2027-Feb-18, you need to update your project and remove deprecated calls
        or your builds will no longer be supported.

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  corresp(dist, value, root_dir)
/usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Apache Software License
        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  dist._finalize_license_expression()
/usr/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: Apache Software License
        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
running bdist_wheel
running build
running build_py
creating build/lib.linux-x86_64-cpython-314/uvloop
copying uvloop/_testbase.py -> build/lib.linux-x86_64-cpython-314/uvloop
copying uvloop/__init__.py -> build/lib.linux-x86_64-cpython-314/uvloop
copying uvloop/_noop.py -> build/lib.linux-x86_64-cpython-314/uvloop
copying uvloop/_version.py -> build/lib.linux-x86_64-cpython-314/uvloop
running egg_info
creating uvloop.egg-info
writing uvloop.egg-info/PKG-INFO
writing dependency_links to uvloop.egg-info/dependency_links.txt
writing requirements to uvloop.egg-info/requires.txt
writing top-level names to uvloop.egg-info/top_level.txt
writing manifest file 'uvloop.egg-info/SOURCES.txt'
Traceback (most recent call last):
  File "/usr/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
    main()
    ~~~~^^
  File "/usr/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main
    json_out["return_val"] = hook(**hook_input["kwargs"])
                             ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 280, in build_wheel
    return _build_backend().build_wheel(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        wheel_directory, config_settings, metadata_directory
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.14/site-packages/setuptools/build_meta.py", line 438, in build_wheel
    return _build(['bdist_wheel'])
  File "/usr/lib/python3.14/site-packages/setuptools/build_meta.py", line 429, in _build
    return self._build_with_temp_dir(
           ~~~~~~~~~~~~~~~~~~~~~~~~~^
        cmd,
        ^^^^
    ...<3 lines>...
        self._arbitrary_args(config_settings),
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.14/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
    self.run_setup()
    ~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/build_meta.py", line 317, in run_setup
    exec(code, locals())
    ~~~~^^^^^^^^^^^^^^^^
  File "<string>", line 240, in <module>
  File "/usr/lib/python3.14/site-packages/setuptools/__init__.py", line 117, in setup
    return distutils.core.setup(**attrs)  # type: ignore[return-value]
           ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 186, in setup
    return run_commands(dist)
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
    dist.run_commands()
    ~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1000, in run_commands
    self.run_command(cmd)
    ~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/dist.py", line 1107, in run_command
    super().run_command(command)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
    cmd_obj.run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/bdist_wheel.py", line 370, in run
    self.run_command("build")
    ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 341, in run_command
    self.distribution.run_command(command)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/dist.py", line 1107, in run_command
    super().run_command(command)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
    cmd_obj.run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 341, in run_command
    self.distribution.run_command(command)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/dist.py", line 1107, in run_command
    super().run_command(command)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
    cmd_obj.run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 80, in run
    self.build_package_data()
    ~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 172, in build_package_data
    for target, srcfile in self._get_package_data_output_mapping():
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 164, in _get_package_data_output_mapping
    for package, src_dir, build_dir, filenames in self.data_files:
                                                  ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 90, in __getattr__
    self.data_files = self._get_data_files()
                      ~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 96, in _get_data_files
    self.analyze_manifest()
    ~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/build_py.py", line 194, in analyze_manifest
    self.run_command('egg_info')
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 341, in run_command
    self.distribution.run_command(command)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/dist.py", line 1107, in run_command
    super().run_command(command)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
    cmd_obj.run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/egg_info.py", line 312, in run
    self.find_sources()
    ~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/egg_info.py", line 320, in find_sources
    mm.run()
    ~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/egg_info.py", line 542, in run
    self.add_defaults()
    ~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/egg_info.py", line 580, in add_defaults
    sdist.add_defaults(self)
    ~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.14/site-packages/setuptools/command/sdist.py", line 110, in add_defaults
    super().add_defaults()
    ~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/command/sdist.py", line 245, in add_defaults
    self._add_defaults_ext()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/command/sdist.py", line 329, in _add_defaults_ext
    build_ext = self.get_finalized_command('build_ext')
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 318, in get_finalized_command
    cmd_obj.ensure_finalized()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.14/site-packages/setuptools/_distutils/cmd.py", line 119, in ensure_finalized
    self.finalize_options()
    ~~~~~~~~~~~~~~~~~~~~~^^
  File "<string>", line 111, in finalize_options
ModuleNotFoundError: No module named 'pkg_resources'

ERROR Backend subprocess exited when trying to invoke build_wheel

pkg_resources use might be replaced by something like:

--- a/pyproject.toml
+++ b/pyproject.toml
@@ -57,6 +57,7 @@ docs = [
 [build-system]
 requires = [
     "setuptools>=60",
+    "packaging",
     "wheel",
     "Cython~=3.1",
 ]
--- a/setup.py
+++ b/setup.py
@@ -108,7 +108,7 @@ class uvloop_build_ext(build_ext):
                         need_cythonize = True
 
         if need_cythonize:
-            import pkg_resources
+            from packaging.requirements import Requirement
 
             # Double check Cython presence in case setup_requires
             # didn't go into effect (most likely because someone
@@ -121,8 +121,8 @@ class uvloop_build_ext(build_ext):
                     'please install {} to compile uvloop from source'.format(
                         CYTHON_DEPENDENCY))
 
-            cython_dep = pkg_resources.Requirement.parse(CYTHON_DEPENDENCY)
-            if Cython.__version__ not in cython_dep:
+            cython_dep = Requirement(CYTHON_DEPENDENCY)
+            if not cython_dep.specifier.contains(Cython.__version__):
                 raise RuntimeError(
                     'uvloop requires {}, got Cython=={}'.format(
                         CYTHON_DEPENDENCY, Cython.__version__

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions