From e2ea5d62b12daddd924b3da883bd8e32e585749e Mon Sep 17 00:00:00 2001 From: Xing Han Lu Date: Wed, 2 Mar 2022 12:29:51 -0500 Subject: Update entry_point.rst --- docs/userguide/entry_point.rst | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/userguide/entry_point.rst b/docs/userguide/entry_point.rst index 21edc697..ea73bb5e 100644 --- a/docs/userguide/entry_point.rst +++ b/docs/userguide/entry_point.rst @@ -54,11 +54,32 @@ above example, to create a command ``hello-world`` that invokes ``timmins.hello_world``, add a console script entry point to ``setup.cfg``: -.. code-block:: ini +.. tab:: setup.cfg + + .. code-block:: ini + + [options.entry_points] + console_scripts = + hello-world = timmins:hello_world + +.. tab:: setup.py + + .. code-block:: python + + from setuptools import setup + + setup( + name='timmins', + version='0.0.1', + packages=['timmins'], + # ... + entry_points={ + 'console_scripts': [ + 'hello-world=timmins:hello_world', + ] + } + ) - [options.entry_points] - console_scripts = - hello-world = timmins:hello_world After installing the package, a user may invoke that function by simply calling ``hello-world`` on the command line. -- cgit v1.2.1 From 9413b864b83197c09dc6efd0f18021a41a220d2d Mon Sep 17 00:00:00 2001 From: Xing Han Lu Date: Sun, 6 Mar 2022 17:47:42 -0500 Subject: Add news fragment --- changelog.d/3144.doc.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/3144.doc.rst diff --git a/changelog.d/3144.doc.rst b/changelog.d/3144.doc.rst new file mode 100644 index 00000000..36cc6521 --- /dev/null +++ b/changelog.d/3144.doc.rst @@ -0,0 +1 @@ +Added documentation on using console_scripts from setup.py, which was previously only shown in setup.cfg -- by :user:`xhlulu` \ No newline at end of file -- cgit v1.2.1 From 0e46f782d08d1ee5afc610eddc0f028fe5922439 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 7 Mar 2022 18:19:10 +0000 Subject: [CI] Allow pre-built distribution to be used in tests with virtualenvs --- changelog.d/3147.misc.rst | 4 ++++ setuptools/tests/fixtures.py | 8 ++++++++ tox.ini | 2 ++ 3 files changed, 14 insertions(+) create mode 100644 changelog.d/3147.misc.rst diff --git a/changelog.d/3147.misc.rst b/changelog.d/3147.misc.rst new file mode 100644 index 00000000..1b0b8685 --- /dev/null +++ b/changelog.d/3147.misc.rst @@ -0,0 +1,4 @@ +Added options to provide a pre-build ``setuptools`` wheel or sdist for being +used during tests with virtual environments. +Paths for these pre-built distribution files can now be set via the environment +variables: ``PRE_BUILT_SETUPTOOLS_SDIST`` and ``PRE_BUILT_SETUPTOOLS_WHEEL``. diff --git a/setuptools/tests/fixtures.py b/setuptools/tests/fixtures.py index e912399d..25ab49fd 100644 --- a/setuptools/tests/fixtures.py +++ b/setuptools/tests/fixtures.py @@ -1,6 +1,8 @@ +import os import contextlib import sys import subprocess +from pathlib import Path import pytest import path @@ -64,6 +66,9 @@ def sample_project(tmp_path): @pytest.fixture(scope="session") def setuptools_sdist(tmp_path_factory, request): + if os.getenv("PRE_BUILT_SETUPTOOLS_SDIST"): + return Path(os.getenv("PRE_BUILT_SETUPTOOLS_SDIST")).resolve() + with contexts.session_locked_tmp_dir( request, tmp_path_factory, "sdist_build") as tmp: dist = next(tmp.glob("*.tar.gz"), None) @@ -79,6 +84,9 @@ def setuptools_sdist(tmp_path_factory, request): @pytest.fixture(scope="session") def setuptools_wheel(tmp_path_factory, request): + if os.getenv("PRE_BUILT_SETUPTOOLS_WHEEL"): + return Path(os.getenv("PRE_BUILT_SETUPTOOLS_WHEEL")).resolve() + with contexts.session_locked_tmp_dir( request, tmp_path_factory, "wheel_build") as tmp: dist = next(tmp.glob("*.whl"), None) diff --git a/tox.ini b/tox.ini index 6b587e28..a56ea24b 100644 --- a/tox.ini +++ b/tox.ini @@ -14,6 +14,8 @@ usedevelop = True extras = testing passenv = SETUPTOOLS_USE_DISTUTILS + PRE_BUILT_SETUPTOOLS_WHEEL + PRE_BUILT_SETUPTOOLS_SDIST TIMEOUT_BACKEND_TEST # timeout (in seconds) for test_build_meta windir # required for test_pkg_resources # honor git config in pytest-perf -- cgit v1.2.1 From e628030fde4138b7bfb713d56fd1150dcbc8ca12 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 7 Mar 2022 23:40:38 +0000 Subject: [CI] Disable test_pip_upgrade_from_source when network if off As discussed in #3149, builds with setuptools will always try to download `wheel`, therefore if the network is not available there is little sense in testing those builds (they will fail). --- setuptools/tests/test_virtualenv.py | 56 +++++++++++++------------------------ 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/setuptools/tests/test_virtualenv.py b/setuptools/tests/test_virtualenv.py index 0ba89643..65358543 100644 --- a/setuptools/tests/test_virtualenv.py +++ b/setuptools/tests/test_virtualenv.py @@ -1,7 +1,8 @@ import os import sys -import itertools import subprocess +from urllib.request import urlopen +from urllib.error import URLError import pathlib @@ -31,56 +32,39 @@ def test_clean_env_install(venv_without_setuptools, setuptools_wheel): venv_without_setuptools.run(cmd) -def _get_pip_versions(): - # This fixture will attempt to detect if tests are being run without - # network connectivity and if so skip some tests - - network = True +def access_pypi(): + # Detect if tests are being run without connectivity if not os.environ.get('NETWORK_REQUIRED', False): # pragma: nocover - try: - from urllib.request import urlopen - from urllib.error import URLError - except ImportError: - from urllib2 import urlopen, URLError # Python 2.7 compat - try: urlopen('https://pypi.org', timeout=1) except URLError: # No network, disable most of these tests - network = False + return False - def mark(param, *marks): - if not isinstance(param, type(pytest.param(''))): - param = pytest.param(param) - return param._replace(marks=param.marks + marks) + return True - def skip_network(param): - return param if network else mark(param, pytest.mark.skip(reason="no network")) - network_versions = [ - mark('pip<20', pytest.mark.xfail(reason='pypa/pip#6599')), +@pytest.mark.skipif( + 'platform.python_implementation() == "PyPy"', + reason="https://github.com/pypa/setuptools/pull/2865#issuecomment-965834995", +) +@pytest.mark.skipif(not access_pypi(), reason="no network") +# ^-- Even when it is not necessary to install a different version of `pip` +# the build process will still try to download `wheel`, see #3147 and #2986. +@pytest.mark.parametrize( + 'pip_version', + [ + None, + pytest.param('pip<20', marks=pytest.mark.xfail(reason='pypa/pip#6599')), 'pip<20.1', 'pip<21', 'pip<22', - mark( + pytest.param( 'https://github.com/pypa/pip/archive/main.zip', - pytest.mark.xfail(reason='#2975'), + marks=pytest.mark.xfail(reason='#2975'), ), ] - - versions = itertools.chain( - [None], - map(skip_network, network_versions) - ) - - return list(versions) - - -@pytest.mark.skipif( - 'platform.python_implementation() == "PyPy"', - reason="https://github.com/pypa/setuptools/pull/2865#issuecomment-965834995", ) -@pytest.mark.parametrize('pip_version', _get_pip_versions()) def test_pip_upgrade_from_source(pip_version, venv_without_setuptools, setuptools_wheel, setuptools_sdist): """ -- cgit v1.2.1 From d0d83d95c9be99576591988e932949f16dba0a6f Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Tue, 8 Mar 2022 10:35:37 +0000 Subject: Update changelog.d/3147.misc.rst --- changelog.d/3147.misc.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/3147.misc.rst b/changelog.d/3147.misc.rst index 1b0b8685..89556edd 100644 --- a/changelog.d/3147.misc.rst +++ b/changelog.d/3147.misc.rst @@ -1,4 +1,4 @@ -Added options to provide a pre-build ``setuptools`` wheel or sdist for being +Added options to provide a pre-built ``setuptools`` wheel or sdist for being used during tests with virtual environments. Paths for these pre-built distribution files can now be set via the environment variables: ``PRE_BUILT_SETUPTOOLS_SDIST`` and ``PRE_BUILT_SETUPTOOLS_WHEEL``. -- cgit v1.2.1 From 04f6a194c4acf810d4f3ca3c901d6cc1cc955db1 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 13 Mar 2022 13:04:04 -0400 Subject: Vendor nspektr. Utilize it in Distribution._install_dependencies. --- .../_vendor/nspektr-0.3.0.dist-info/INSTALLER | 1 + setuptools/_vendor/nspektr-0.3.0.dist-info/LICENSE | 19 +++ .../_vendor/nspektr-0.3.0.dist-info/METADATA | 57 ++++++++ setuptools/_vendor/nspektr-0.3.0.dist-info/RECORD | 11 ++ .../_vendor/nspektr-0.3.0.dist-info/REQUESTED | 0 setuptools/_vendor/nspektr-0.3.0.dist-info/WHEEL | 5 + .../_vendor/nspektr-0.3.0.dist-info/top_level.txt | 1 + setuptools/_vendor/nspektr/__init__.py | 145 +++++++++++++++++++++ setuptools/_vendor/nspektr/_compat.py | 21 +++ setuptools/_vendor/vendored.txt | 1 + setuptools/dist.py | 20 +-- setuptools/extern/__init__.py | 2 +- tools/vendored.py | 11 ++ 13 files changed, 276 insertions(+), 18 deletions(-) create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/INSTALLER create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/LICENSE create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/METADATA create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/RECORD create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/REQUESTED create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/WHEEL create mode 100644 setuptools/_vendor/nspektr-0.3.0.dist-info/top_level.txt create mode 100644 setuptools/_vendor/nspektr/__init__.py create mode 100644 setuptools/_vendor/nspektr/_compat.py diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/INSTALLER b/setuptools/_vendor/nspektr-0.3.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/LICENSE b/setuptools/_vendor/nspektr-0.3.0.dist-info/LICENSE new file mode 100644 index 00000000..353924be --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright Jason R. Coombs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/METADATA b/setuptools/_vendor/nspektr-0.3.0.dist-info/METADATA new file mode 100644 index 00000000..aadc3749 --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/METADATA @@ -0,0 +1,57 @@ +Metadata-Version: 2.1 +Name: nspektr +Version: 0.3.0 +Summary: package inspector +Home-page: https://github.com/jaraco/nspektr +Author: Jason R. Coombs +Author-email: jaraco@jaraco.com +License: UNKNOWN +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Requires-Python: >=3.7 +License-File: LICENSE +Requires-Dist: jaraco.context +Requires-Dist: jaraco.functools +Requires-Dist: more-itertools +Requires-Dist: packaging +Requires-Dist: importlib-metadata (>=3.6) ; python_version < "3.10" +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: jaraco.packaging (>=9) ; extra == 'docs' +Requires-Dist: rst.linker (>=1.9) ; extra == 'docs' +Provides-Extra: testing +Requires-Dist: pytest (>=6) ; extra == 'testing' +Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing' +Requires-Dist: pytest-flake8 ; extra == 'testing' +Requires-Dist: pytest-cov ; extra == 'testing' +Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing' +Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing' + +.. image:: https://img.shields.io/pypi/v/nspektr.svg + :target: `PyPI link`_ + +.. image:: https://img.shields.io/pypi/pyversions/nspektr.svg + :target: `PyPI link`_ + +.. _PyPI link: https://pypi.org/project/nspektr + +.. image:: https://github.com/jaraco/nspektr/workflows/tests/badge.svg + :target: https://github.com/jaraco/nspektr/actions?query=workflow%3A%22tests%22 + :alt: tests + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + +.. .. image:: https://readthedocs.org/projects/skeleton/badge/?version=latest +.. :target: https://skeleton.readthedocs.io/en/latest/?badge=latest + +.. image:: https://img.shields.io/badge/skeleton-2022-informational + :target: https://blog.jaraco.com/skeleton + + diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/RECORD b/setuptools/_vendor/nspektr-0.3.0.dist-info/RECORD new file mode 100644 index 00000000..5e5de5eb --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/RECORD @@ -0,0 +1,11 @@ +nspektr-0.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +nspektr-0.3.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050 +nspektr-0.3.0.dist-info/METADATA,sha256=X0stV4vwFBDBxvzhBl4kAHVdGWPIjEitqAuTJItcQH0,2162 +nspektr-0.3.0.dist-info/RECORD,, +nspektr-0.3.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +nspektr-0.3.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +nspektr-0.3.0.dist-info/top_level.txt,sha256=uEA20Ixo04XS3wOIt5-Jk5ZuMkBrtlleFipRr8Y1SjQ,8 +nspektr/__init__.py,sha256=d6-d-ZlGAQQP-MEi_NZMiyn2vLbq8Hw3HxICgm3X0Q8,3949 +nspektr/__pycache__/__init__.cpython-310.pyc,, +nspektr/__pycache__/_compat.cpython-310.pyc,, +nspektr/_compat.py,sha256=2QoozYhuhgow_NMUATmhoM-yppBV3jiZYQgdiP-ww0s,582 diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/REQUESTED b/setuptools/_vendor/nspektr-0.3.0.dist-info/REQUESTED new file mode 100644 index 00000000..e69de29b diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/WHEEL b/setuptools/_vendor/nspektr-0.3.0.dist-info/WHEEL new file mode 100644 index 00000000..becc9a66 --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/setuptools/_vendor/nspektr-0.3.0.dist-info/top_level.txt b/setuptools/_vendor/nspektr-0.3.0.dist-info/top_level.txt new file mode 100644 index 00000000..b10ef50a --- /dev/null +++ b/setuptools/_vendor/nspektr-0.3.0.dist-info/top_level.txt @@ -0,0 +1 @@ +nspektr diff --git a/setuptools/_vendor/nspektr/__init__.py b/setuptools/_vendor/nspektr/__init__.py new file mode 100644 index 00000000..938bbdb9 --- /dev/null +++ b/setuptools/_vendor/nspektr/__init__.py @@ -0,0 +1,145 @@ +import itertools +import functools +import contextlib + +from setuptools.extern.packaging.requirements import Requirement +from setuptools.extern.packaging.version import Version +from setuptools.extern.more_itertools import always_iterable +from setuptools.extern.jaraco.context import suppress +from setuptools.extern.jaraco.functools import apply + +from ._compat import metadata, repair_extras + + +def resolve(req: Requirement) -> metadata.Distribution: + """ + Resolve the requirement to its distribution. + + Ignore exception detail for Python 3.9 compatibility. + + >>> resolve(Requirement('pytest<3')) # doctest: +IGNORE_EXCEPTION_DETAIL + Traceback (most recent call last): + ... + importlib.metadata.PackageNotFoundError: No package metadata was found for pytest<3 + """ + dist = metadata.distribution(req.name) + if not req.specifier.contains(Version(dist.version), prereleases=True): + raise metadata.PackageNotFoundError(str(req)) + dist.extras = req.extras # type: ignore + return dist + + +@apply(bool) +@suppress(metadata.PackageNotFoundError) +def is_satisfied(req: Requirement): + return resolve(req) + + +unsatisfied = functools.partial(itertools.filterfalse, is_satisfied) + + +class NullMarker: + @classmethod + def wrap(cls, req: Requirement): + return req.marker or cls() + + def evaluate(self, *args, **kwargs): + return True + + +def find_direct_dependencies(dist, extras=None): + """ + Find direct, declared dependencies for dist. + """ + simple = ( + req + for req in map(Requirement, always_iterable(dist.requires)) + if NullMarker.wrap(req).evaluate(dict(extra=None)) + ) + extra_deps = ( + req + for req in map(Requirement, always_iterable(dist.requires)) + for extra in always_iterable(getattr(dist, 'extras', extras)) + if NullMarker.wrap(req).evaluate(dict(extra=extra)) + ) + return itertools.chain(simple, extra_deps) + + +def traverse(items, visit): + """ + Given an iterable of items, traverse the items. + + For each item, visit is called to return any additional items + to include in the traversal. + """ + while True: + try: + item = next(items) + except StopIteration: + return + yield item + items = itertools.chain(items, visit(item)) + + +def find_req_dependencies(req): + with contextlib.suppress(metadata.PackageNotFoundError): + dist = resolve(req) + yield from find_direct_dependencies(dist) + + +def find_dependencies(dist, extras=None): + """ + Find all reachable dependencies for dist. + + dist is an importlib.metadata.Distribution (or similar). + TODO: create a suitable protocol for type hint. + + >>> deps = find_dependencies(resolve(Requirement('nspektr'))) + >>> all(isinstance(dep, Requirement) for dep in deps) + True + >>> not any('pytest' in str(dep) for dep in deps) + True + >>> test_deps = find_dependencies(resolve(Requirement('nspektr[testing]'))) + >>> any('pytest' in str(dep) for dep in test_deps) + True + """ + + def visit(req, seen=set()): + if req in seen: + return () + seen.add(req) + return find_req_dependencies(req) + + return traverse(find_direct_dependencies(dist, extras), visit) + + +class Unresolved(Exception): + def __iter__(self): + return iter(self.args[0]) + + +def missing(ep): + """ + Generate the unresolved dependencies (if any) of ep. + """ + return unsatisfied(find_dependencies(ep.dist, repair_extras(ep.extras))) + + +def check(ep): + """ + >>> ep, = metadata.entry_points(group='console_scripts', name='pip') + >>> check(ep) + >>> dist = metadata.distribution('nspektr') + + Since 'docs' extras are not installed, requesting them should fail. + + >>> ep = metadata.EntryPoint( + ... group=None, name=None, value='nspektr [docs]')._for(dist) + >>> check(ep) + Traceback (most recent call last): + ... + nspektr.Unresolved: [...] + """ + missed = list(missing(ep)) + if missed: + raise Unresolved(missed) diff --git a/setuptools/_vendor/nspektr/_compat.py b/setuptools/_vendor/nspektr/_compat.py new file mode 100644 index 00000000..3278379a --- /dev/null +++ b/setuptools/_vendor/nspektr/_compat.py @@ -0,0 +1,21 @@ +import contextlib +import sys + + +if sys.version_info >= (3, 10): + import importlib.metadata as metadata +else: + import setuptools.extern.importlib_metadata as metadata # type: ignore # noqa: F401 + + +def repair_extras(extras): + """ + Repair extras that appear as match objects. + + python/importlib_metadata#369 revealed a flaw in the EntryPoint + implementation. This function wraps the extras to ensure + they are proper strings even on older implementations. + """ + with contextlib.suppress(AttributeError): + return list(item.group(0) for item in extras) + return extras diff --git a/setuptools/_vendor/vendored.txt b/setuptools/_vendor/vendored.txt index db24b402..4320b352 100644 --- a/setuptools/_vendor/vendored.txt +++ b/setuptools/_vendor/vendored.txt @@ -5,6 +5,7 @@ more_itertools==8.8.0 jaraco.text==3.7.0 importlib_resources==5.4.0 importlib_metadata==4.11.1 +nspektr==0.3.0 # required for importlib_metadata on older Pythons typing_extensions==4.0.1 # required for importlib_resources and _metadata on older Pythons diff --git a/setuptools/dist.py b/setuptools/dist.py index e825785e..fcce7560 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -28,7 +28,8 @@ from distutils.util import rfc822_escape from setuptools.extern import packaging from setuptools.extern import ordered_set -from setuptools.extern.more_itertools import unique_everseen, always_iterable +from setuptools.extern.more_itertools import unique_everseen +from setuptools.extern import nspektr from ._importlib import metadata @@ -876,25 +877,10 @@ class Distribution(_Distribution): Given an entry point, ensure that any declared extras for its distribution are installed. """ - reqs = { - req - for req in map(requirements.Requirement, always_iterable(ep.dist.requires)) - for extra in ep.extras - if extra in req.extras - } - missing = itertools.filterfalse(self._is_installed, reqs) - for req in missing: + for req in nspektr.missing(ep): # fetch_build_egg expects pkg_resources.Requirement self.fetch_build_egg(pkg_resources.Requirement(str(req))) - def _is_installed(self, req): - try: - dist = metadata.distribution(req.name) - except metadata.PackageNotFoundError: - return False - found_ver = packaging.version.Version(dist.version()) - return found_ver in req.specifier - def get_egg_cache_dir(self): egg_cache_dir = os.path.join(os.curdir, '.eggs') if not os.path.exists(egg_cache_dir): diff --git a/setuptools/extern/__init__.py b/setuptools/extern/__init__.py index 98235a4b..7907fafc 100644 --- a/setuptools/extern/__init__.py +++ b/setuptools/extern/__init__.py @@ -71,6 +71,6 @@ class VendorImporter: names = ( 'packaging', 'pyparsing', 'ordered_set', 'more_itertools', 'importlib_metadata', - 'zipp', 'importlib_resources', 'jaraco', 'typing_extensions', + 'zipp', 'importlib_resources', 'jaraco', 'typing_extensions', 'nspektr', ) VendorImporter(__name__, names, 'setuptools._vendor').install() diff --git a/tools/vendored.py b/tools/vendored.py index 8a122ad7..cd15adbf 100644 --- a/tools/vendored.py +++ b/tools/vendored.py @@ -89,6 +89,16 @@ def rewrite_more_itertools(pkg_files: Path): more_file.write_text(text) +def rewrite_nspektr(pkg_files: Path, new_root): + for file in pkg_files.glob('*.py'): + text = file.read_text() + text = re.sub(r' (more_itertools)', rf' {new_root}.\1', text) + text = re.sub(r' (jaraco\.\w+)', rf' {new_root}.\1', text) + text = re.sub(r' (packaging)', rf' {new_root}.\1', text) + text = re.sub(r' (importlib_metadata)', rf' {new_root}.\1', text) + file.write_text(text) + + def clean(vendor): """ Remove all files out of the vendor directory except the meta @@ -133,6 +143,7 @@ def update_setuptools(): rewrite_importlib_resources(vendor / 'importlib_resources', 'setuptools.extern') rewrite_importlib_metadata(vendor / 'importlib_metadata', 'setuptools.extern') rewrite_more_itertools(vendor / "more_itertools") + rewrite_nspektr(vendor / "nspektr", 'setuptools.extern') __name__ == '__main__' and update_vendored() -- cgit v1.2.1 From 542304c1c9accea1b8c04d3afc18b24bddbeb151 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 13 Mar 2022 13:14:46 -0400 Subject: Update changelog. --- changelog.d/3170.change.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/3170.change.rst diff --git a/changelog.d/3170.change.rst b/changelog.d/3170.change.rst new file mode 100644 index 00000000..8e356ca3 --- /dev/null +++ b/changelog.d/3170.change.rst @@ -0,0 +1 @@ +Adopt nspektr (vendored) to implement Distribution._install_dependencies. -- cgit v1.2.1 From e7b99faf0add4e9bbc1970a975c371657a125e70 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 13 Mar 2022 13:15:38 -0400 Subject: =?UTF-8?q?=F0=9F=91=B9=20Feed=20the=20hobgoblins=20(delint).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setuptools/dist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setuptools/dist.py b/setuptools/dist.py index fcce7560..b55996f0 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -41,7 +41,7 @@ from setuptools import windows_support from setuptools.monkey import get_unpatched from setuptools.config import parse_configuration import pkg_resources -from setuptools.extern.packaging import version, requirements +from setuptools.extern.packaging import version from . import _reqs from . import _entry_points -- cgit v1.2.1 From a0f9662e537fdcc074a7801b11495747f8c22601 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Fri, 11 Mar 2022 23:58:47 +0000 Subject: Attempt to re-enable Windows tests According to a comment in pypa/distutils#118 this problem might be solved by allowing tox to pass some environment variables. --- .github/workflows/main.yml | 3 +-- tox.ini | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d2979efd..c680fb36 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,8 +24,7 @@ jobs: platform: - ubuntu-latest - macos-latest - # disable tests on Windows due to pypa/distutils#118 - # - windows-latest + - windows-latest include: - platform: ubuntu-latest python: "3.10" diff --git a/tox.ini b/tox.ini index a56ea24b..5fb7cb5b 100644 --- a/tox.ini +++ b/tox.ini @@ -20,6 +20,8 @@ passenv = windir # required for test_pkg_resources # honor git config in pytest-perf HOME + PROGRAMFILES + PROGRAMFILES(x86) [testenv:integration] deps = {[testenv]deps} @@ -27,6 +29,8 @@ extras = testing-integration passenv = {[testenv]passenv} DOWNLOAD_PATH + PROGRAMFILES + PROGRAMFILES(x86) setenv = PROJECT_ROOT = {toxinidir} commands = -- cgit v1.2.1 From 8f3cdf705cbf5ba29238c9e5e900727d488bf463 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Sun, 13 Mar 2022 10:11:27 +0000 Subject: Use windows-2019 for tests in GitHub Actions For the time being let's just use the older version for the GHA host, so we can keep testing on Windows, instead of skipping it at all. --- .github/workflows/main.yml | 2 +- tox.ini | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c680fb36..5be824c1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: platform: - ubuntu-latest - macos-latest - - windows-latest + - windows-2019 include: - platform: ubuntu-latest python: "3.10" diff --git a/tox.ini b/tox.ini index 5fb7cb5b..a56ea24b 100644 --- a/tox.ini +++ b/tox.ini @@ -20,8 +20,6 @@ passenv = windir # required for test_pkg_resources # honor git config in pytest-perf HOME - PROGRAMFILES - PROGRAMFILES(x86) [testenv:integration] deps = {[testenv]deps} @@ -29,8 +27,6 @@ extras = testing-integration passenv = {[testenv]passenv} DOWNLOAD_PATH - PROGRAMFILES - PROGRAMFILES(x86) setenv = PROJECT_ROOT = {toxinidir} commands = -- cgit v1.2.1 From 722e1fd0e50ad69fbdd4d0373fc5bd4d75a1d845 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Sun, 13 Mar 2022 20:55:27 +0000 Subject: [Docs] Improve documentation about migration from distutils --- docs/deprecated/distutils-legacy.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/deprecated/distutils-legacy.rst b/docs/deprecated/distutils-legacy.rst index 148dc259..cdc4e39b 100644 --- a/docs/deprecated/distutils-legacy.rst +++ b/docs/deprecated/distutils-legacy.rst @@ -3,11 +3,10 @@ Porting from Distutils Setuptools and the PyPA have a `stated goal `_ to make Setuptools the reference API for distutils. -Since the 49.1.2 release, Setuptools includes a local, vendored copy of distutils (from late copies of CPython) that is disabled by default. To enable the use of this copy of distutils when invoking setuptools, set the enviroment variable: +Since the 49.1.2 release, Setuptools includes a local, vendored copy of distutils (from late copies of CPython) that is enabled by default. To disable the use of this copy of distutils when invoking setuptools, set the enviroment variable: - SETUPTOOLS_USE_DISTUTILS=local + SETUPTOOLS_USE_DISTUTILS=stdlib -This behavior is planned to become the default. Prefer Setuptools ----------------- @@ -20,12 +19,15 @@ As Distutils is deprecated, any usage of functions or objects from distutils is ``distutils.command.{build_clib,build_ext,build_py,sdist}`` → ``setuptools.command.*`` -``distutils.log`` → (no replacement yet) +``distutils.log`` → :mod:`logging` (standard library) ``distutils.version.*`` → ``packaging.version.*`` ``distutils.errors.*`` → ``setuptools.errors.*`` [#errors]_ + +Migration is also provided by :pep:`632#migration-advice`. + If a project relies on uses of ``distutils`` that do not have a suitable replacement above, please search the `Setuptools issue tracker `_ and file a request, describing the use-case so that Setuptools' maintainers can investigate. Please provide enough detail to help the maintainers understand how distutils is used, what value it provides, and why that behavior should be supported. -- cgit v1.2.1 From c522737c9488472d30ced2a11739e607a6f8ddff Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Sun, 13 Mar 2022 21:00:22 +0000 Subject: Fix version of setuptools for default local distutils --- docs/deprecated/distutils-legacy.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deprecated/distutils-legacy.rst b/docs/deprecated/distutils-legacy.rst index cdc4e39b..f600c52b 100644 --- a/docs/deprecated/distutils-legacy.rst +++ b/docs/deprecated/distutils-legacy.rst @@ -3,7 +3,7 @@ Porting from Distutils Setuptools and the PyPA have a `stated goal `_ to make Setuptools the reference API for distutils. -Since the 49.1.2 release, Setuptools includes a local, vendored copy of distutils (from late copies of CPython) that is enabled by default. To disable the use of this copy of distutils when invoking setuptools, set the enviroment variable: +Since the 60.0.0 release, Setuptools includes a local, vendored copy of distutils (from late copies of CPython) that is enabled by default. To disable the use of this copy of distutils when invoking setuptools, set the enviroment variable: SETUPTOOLS_USE_DISTUTILS=stdlib -- cgit v1.2.1 From 82141a2e22141cefe93f8b686ee7489ad7461a71 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Sun, 13 Mar 2022 21:04:12 +0000 Subject: Fix PEP 632 link display --- docs/deprecated/distutils-legacy.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deprecated/distutils-legacy.rst b/docs/deprecated/distutils-legacy.rst index f600c52b..9987013a 100644 --- a/docs/deprecated/distutils-legacy.rst +++ b/docs/deprecated/distutils-legacy.rst @@ -26,7 +26,7 @@ As Distutils is deprecated, any usage of functions or objects from distutils is ``distutils.errors.*`` → ``setuptools.errors.*`` [#errors]_ -Migration is also provided by :pep:`632#migration-advice`. +Migration is also provided by :pep:`PEP 632 <632#migration-advice>`. If a project relies on uses of ``distutils`` that do not have a suitable replacement above, please search the `Setuptools issue tracker `_ and file a request, describing the use-case so that Setuptools' maintainers can investigate. Please provide enough detail to help the maintainers understand how distutils is used, what value it provides, and why that behavior should be supported. -- cgit v1.2.1 From 19609c020dc01146658d80a9ba13ce4369f6c483 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Sun, 13 Mar 2022 21:15:00 +0000 Subject: Link packaging --- docs/conf.py | 1 + docs/deprecated/distutils-legacy.rst | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index da4d9f33..4c00d46f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -200,6 +200,7 @@ favicons = [ intersphinx_mapping['pip'] = 'https://pip.pypa.io/en/latest', None intersphinx_mapping['PyPUG'] = ('https://packaging.python.org/en/latest/', None) +intersphinx_mapping['packaging'] = ('https://packaging.pypa.io/en/latest/', None) intersphinx_mapping['importlib-resources'] = ( 'https://importlib-resources.readthedocs.io/en/latest', None ) diff --git a/docs/deprecated/distutils-legacy.rst b/docs/deprecated/distutils-legacy.rst index 9987013a..e73cdff5 100644 --- a/docs/deprecated/distutils-legacy.rst +++ b/docs/deprecated/distutils-legacy.rst @@ -21,12 +21,12 @@ As Distutils is deprecated, any usage of functions or objects from distutils is ``distutils.log`` → :mod:`logging` (standard library) -``distutils.version.*`` → ``packaging.version.*`` +``distutils.version.*`` → :doc:`packaging.version.* ` ``distutils.errors.*`` → ``setuptools.errors.*`` [#errors]_ -Migration is also provided by :pep:`PEP 632 <632#migration-advice>`. +Migration advice is also provided by :pep:`PEP 632 <632#migration-advice>`. If a project relies on uses of ``distutils`` that do not have a suitable replacement above, please search the `Setuptools issue tracker `_ and file a request, describing the use-case so that Setuptools' maintainers can investigate. Please provide enough detail to help the maintainers understand how distutils is used, what value it provides, and why that behavior should be supported. -- cgit v1.2.1 From fb258ed194228a95a3043c19abe215bd8c23ddab Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 14 Mar 2022 01:12:06 +0000 Subject: Exclude PyPy+Windows from test matrix --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5be824c1..bc5b1e4d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,6 +29,11 @@ jobs: - platform: ubuntu-latest python: "3.10" distutils: stdlib + exclude: + # The combination of PyPy+Windows+pytest-xdist+ProcessPoolExecutor is flaky/problematic + - platform: windows-2019 + python: pypy-3.7 + distutils: local runs-on: ${{ matrix.platform }} env: SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }} -- cgit v1.2.1 From 8afae7f683766e7e716a226a43ccc95d69675851 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 14 Mar 2022 01:18:43 +0000 Subject: Just skip the most problematic test for PyPy on Windows --- .github/workflows/main.yml | 5 ----- setuptools/tests/test_build_meta.py | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bc5b1e4d..5be824c1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,11 +29,6 @@ jobs: - platform: ubuntu-latest python: "3.10" distutils: stdlib - exclude: - # The combination of PyPy+Windows+pytest-xdist+ProcessPoolExecutor is flaky/problematic - - platform: windows-2019 - python: pypy-3.7 - distutils: local runs-on: ${{ matrix.platform }} env: SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }} diff --git a/setuptools/tests/test_build_meta.py b/setuptools/tests/test_build_meta.py index eb43fe9b..c4cdda03 100644 --- a/setuptools/tests/test_build_meta.py +++ b/setuptools/tests/test_build_meta.py @@ -18,6 +18,13 @@ TIMEOUT = int(os.getenv("TIMEOUT_BACKEND_TEST", "180")) # in seconds IS_PYPY = '__pypy__' in sys.builtin_module_names +pytestmark = pytest.mark.skipif( + sys.platform == "win32" and IS_PYPY, + reason="The combination of PyPy + Windows + pytest-xdist + ProcessPoolExecutor " + "is flaky and problematic" +) + + class BuildBackendBase: def __init__(self, cwd='.', env={}, backend_name='setuptools.build_meta'): self.cwd = cwd -- cgit v1.2.1 From 5a0fbfb860b8c380c9a84c0bd977dbba2ed1825c Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Wed, 16 Mar 2022 14:55:58 +0000 Subject: Fix towncrier command in tools/finalize --- tools/finalize.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/finalize.py b/tools/finalize.py index e4f65543..5a4df5df 100644 --- a/tools/finalize.py +++ b/tools/finalize.py @@ -42,6 +42,7 @@ def update_changelog(): cmd = [ sys.executable, '-m', 'towncrier', + 'build', '--version', get_version(), '--yes', ] -- cgit v1.2.1 From 02f3821b9af91feadae2326b78a814ac2fbbe520 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Wed, 16 Mar 2022 14:56:08 +0000 Subject: =?UTF-8?q?Bump=20version:=2060.9.3=20=E2=86=92=2060.10.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- CHANGES.rst | 36 ++++++++++++++++++++++++++++++++++++ changelog.d/2971.change.rst | 1 - changelog.d/3120.misc.rst | 4 ---- changelog.d/3124.misc.rst | 2 -- changelog.d/3133.misc.rst | 1 - changelog.d/3137.change.rst | 1 - changelog.d/3144.doc.rst | 1 - changelog.d/3147.misc.rst | 4 ---- changelog.d/3148.doc.1.rst | 3 --- changelog.d/3148.doc.2.rst | 4 ---- changelog.d/3170.change.rst | 1 - setup.cfg | 2 +- 13 files changed, 38 insertions(+), 24 deletions(-) delete mode 100644 changelog.d/2971.change.rst delete mode 100644 changelog.d/3120.misc.rst delete mode 100644 changelog.d/3124.misc.rst delete mode 100644 changelog.d/3133.misc.rst delete mode 100644 changelog.d/3137.change.rst delete mode 100644 changelog.d/3144.doc.rst delete mode 100644 changelog.d/3147.misc.rst delete mode 100644 changelog.d/3148.doc.1.rst delete mode 100644 changelog.d/3148.doc.2.rst delete mode 100644 changelog.d/3170.change.rst diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 79260da6..fd32042d 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 60.9.3 +current_version = 60.10.0 commit = True tag = True diff --git a/CHANGES.rst b/CHANGES.rst index a24cd2ad..3c724e47 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,39 @@ +v60.10.0 +-------- + + +Changes +^^^^^^^ +* #2971: Deprecated upload_docs command, to be removed in the future. +* #3137: Use samefile from stdlib, supported on Windows since Python 3.2. +* #3170: Adopt nspektr (vendored) to implement Distribution._install_dependencies. + +Documentation changes +^^^^^^^^^^^^^^^^^^^^^ +* #3144: Added documentation on using console_scripts from setup.py, which was previously only shown in setup.cfg -- by :user:`xhlulu` +* #3148: Added clarifications about ``MANIFEST.in``, that include links to PyPUG docs + and more prominent mentions to using a revision control system plugin as an + alternative. +* #3148: Removed mention to ``pkg_resources`` as the recommended way of accessing data + files, in favour of :doc:`importlib.resources`. + Additionally more emphasis was put on the fact that *package data files* reside + **inside** the *package directory* (and therefore should be *read-only*). + +Misc +^^^^ +* #3120: Added workaround for intermittent failures of backend tests on PyPy. + These tests now are marked with `XFAIL + `_, instead of erroring + out directly. +* #3124: Improved configuration for :pypi:`rst-linker` (extension used to build the + changelog). +* #3133: Enhanced isolation of tests using virtual environments - PYTHONPATH is not leaking to spawned subprocesses -- by :user:`befeleme` +* #3147: Added options to provide a pre-built ``setuptools`` wheel or sdist for being + used during tests with virtual environments. + Paths for these pre-built distribution files can now be set via the environment + variables: ``PRE_BUILT_SETUPTOOLS_SDIST`` and ``PRE_BUILT_SETUPTOOLS_WHEEL``. + + v60.9.3 ------- diff --git a/changelog.d/2971.change.rst b/changelog.d/2971.change.rst deleted file mode 100644 index b9a093b4..00000000 --- a/changelog.d/2971.change.rst +++ /dev/null @@ -1 +0,0 @@ -Deprecated upload_docs command, to be removed in the future. diff --git a/changelog.d/3120.misc.rst b/changelog.d/3120.misc.rst deleted file mode 100644 index 3531a0ab..00000000 --- a/changelog.d/3120.misc.rst +++ /dev/null @@ -1,4 +0,0 @@ -Added workaround for intermittent failures of backend tests on PyPy. -These tests now are marked with `XFAIL -`_, instead of erroring -out directly. diff --git a/changelog.d/3124.misc.rst b/changelog.d/3124.misc.rst deleted file mode 100644 index aba19b80..00000000 --- a/changelog.d/3124.misc.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improved configuration for :pypi:`rst-linker` (extension used to build the -changelog). diff --git a/changelog.d/3133.misc.rst b/changelog.d/3133.misc.rst deleted file mode 100644 index 3377e061..00000000 --- a/changelog.d/3133.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Enhanced isolation of tests using virtual environments - PYTHONPATH is not leaking to spawned subprocesses -- by :user:`befeleme` diff --git a/changelog.d/3137.change.rst b/changelog.d/3137.change.rst deleted file mode 100644 index e4186054..00000000 --- a/changelog.d/3137.change.rst +++ /dev/null @@ -1 +0,0 @@ -Use samefile from stdlib, supported on Windows since Python 3.2. diff --git a/changelog.d/3144.doc.rst b/changelog.d/3144.doc.rst deleted file mode 100644 index 36cc6521..00000000 --- a/changelog.d/3144.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Added documentation on using console_scripts from setup.py, which was previously only shown in setup.cfg -- by :user:`xhlulu` \ No newline at end of file diff --git a/changelog.d/3147.misc.rst b/changelog.d/3147.misc.rst deleted file mode 100644 index 89556edd..00000000 --- a/changelog.d/3147.misc.rst +++ /dev/null @@ -1,4 +0,0 @@ -Added options to provide a pre-built ``setuptools`` wheel or sdist for being -used during tests with virtual environments. -Paths for these pre-built distribution files can now be set via the environment -variables: ``PRE_BUILT_SETUPTOOLS_SDIST`` and ``PRE_BUILT_SETUPTOOLS_WHEEL``. diff --git a/changelog.d/3148.doc.1.rst b/changelog.d/3148.doc.1.rst deleted file mode 100644 index af89bde2..00000000 --- a/changelog.d/3148.doc.1.rst +++ /dev/null @@ -1,3 +0,0 @@ -Added clarifications about ``MANIFEST.in``, that include links to PyPUG docs -and more prominent mentions to using a revision control system plugin as an -alternative. diff --git a/changelog.d/3148.doc.2.rst b/changelog.d/3148.doc.2.rst deleted file mode 100644 index f46fb248..00000000 --- a/changelog.d/3148.doc.2.rst +++ /dev/null @@ -1,4 +0,0 @@ -Removed mention to ``pkg_resources`` as the recommended way of accessing data -files, in favour of :doc:`importlib.resources`. -Additionally more emphasis was put on the fact that *package data files* reside -**inside** the *package directory* (and therefore should be *read-only*). diff --git a/changelog.d/3170.change.rst b/changelog.d/3170.change.rst deleted file mode 100644 index 8e356ca3..00000000 --- a/changelog.d/3170.change.rst +++ /dev/null @@ -1 +0,0 @@ -Adopt nspektr (vendored) to implement Distribution._install_dependencies. diff --git a/setup.cfg b/setup.cfg index 6171f624..58300194 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = setuptools -version = 60.9.3 +version = 60.10.0 author = Python Packaging Authority author_email = distutils-sig@python.org description = Easily download, build, install, upgrade, and uninstall Python packages -- cgit v1.2.1