From 003c7ac56b4da80235d4a147fbcef84b6fbc8248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=D0=BD=20=D0=94=D0=BE=D0=BD=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Sun, 19 Mar 2023 18:50:47 +0300 Subject: [PATCH 1/2] Migrate project metadata to `pyproject.toml` Since setuptools defaults `include_package_data` to `True` if it sees a `project` table, explicitly set it to `False` to prevent unnecessary files from being added. Due to differences between the semantics of `pyproject.toml` and `setup.py` settings, there are some minor changes in the resulting metadata: diff -Nur dist-old/whl/pip-23.1.dev0.dist-info/METADATA dist/whl/pip-23.1.dev0.dist-info/METADATA --- dist-old/whl/pip-23.1.dev0.dist-info/METADATA 2023-03-28 18:46:48.000000000 +0300 +++ dist/whl/pip-23.1.dev0.dist-info/METADATA 2023-03-28 18:43:28.000000000 +0300 @@ -2,10 +2,9 @@ Name: pip Version: 23.1.dev0 Summary: The PyPA recommended tool for installing Python packages. -Home-page: https://pip.pypa.io/ -Author: The pip developers -Author-email: distutils-sig@python.org +Author-email: The pip developers License: MIT +Project-URL: Homepage, https://pip.pypa.io/ Project-URL: Documentation, https://pip.pypa.io Project-URL: Source, https://github.com/pypa/pip Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ @@ -24,6 +23,7 @@ Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Requires-Python: >=3.7 +Description-Content-Type: text/x-rst License-File: LICENSE.txt License-File: AUTHORS.txt black uses the `project.requires-python` setting to infer the target Python version. Reformat one file in which this actually changes the formatting. --- news/11909.process.rst | 1 + pyproject.toml | 41 ++++++++++++++++++++++++++++++++- setup.py | 35 +--------------------------- tests/unit/test_network_auth.py | 2 +- 4 files changed, 43 insertions(+), 36 deletions(-) create mode 100644 news/11909.process.rst diff --git a/news/11909.process.rst b/news/11909.process.rst new file mode 100644 index 00000000000..a396d93d963 --- /dev/null +++ b/news/11909.process.rst @@ -0,0 +1 @@ +Most project metadata is now defined statically via pip's ``pyproject.toml`` file. diff --git a/pyproject.toml b/pyproject.toml index b720c460297..3e85ea37156 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,44 @@ +[project] +dynamic = ["version", "scripts"] + +name = "pip" +description = "The PyPA recommended tool for installing Python packages." +readme = "README.rst" +license = {text = "MIT"} +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Topic :: Software Development :: Build Tools", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] +authors = [ + {name = "The pip developers", email = "distutils-sig@python.org"}, +] + +# NOTE: requires-python is duplicated in __pip-runner__.py. +# When changing this value, please change the other copy as well. +requires-python = ">=3.7" + +[project.urls] +Homepage = "https://pip.pypa.io/" +Documentation = "https://pip.pypa.io" +Source = "https://github.com/pypa/pip" +Changelog = "https://pip.pypa.io/en/stable/news/" + [build-system] -requires = ["setuptools", "wheel"] +# The lower bound is for . +requires = ["setuptools>=67.6.1", "wheel"] build-backend = "setuptools.build_meta" [tool.towncrier] diff --git a/setup.py b/setup.py index d73c77b7346..19175c995e3 100644 --- a/setup.py +++ b/setup.py @@ -21,44 +21,14 @@ def get_version(rel_path: str) -> str: raise RuntimeError("Unable to find version string.") -long_description = read("README.rst") - setup( - name="pip", version=get_version("src/pip/__init__.py"), - description="The PyPA recommended tool for installing Python packages.", - long_description=long_description, - license="MIT", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "Topic :: Software Development :: Build Tools", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - ], - url="https://pip.pypa.io/", - project_urls={ - "Documentation": "https://pip.pypa.io", - "Source": "https://github.com/pypa/pip", - "Changelog": "https://pip.pypa.io/en/stable/news/", - }, - author="The pip developers", - author_email="distutils-sig@python.org", package_dir={"": "src"}, packages=find_packages( where="src", exclude=["contrib", "docs", "tests*", "tasks"], ), + include_package_data=False, package_data={ "pip": ["py.typed"], "pip._vendor": ["vendor.txt"], @@ -82,7 +52,4 @@ def get_version(rel_path: str) -> str: ], }, zip_safe=False, - # NOTE: python_requires is duplicated in __pip-runner__.py. - # When changing this value, please change the other copy as well. - python_requires=">=3.7", ) diff --git a/tests/unit/test_network_auth.py b/tests/unit/test_network_auth.py index 5bd85f8cd95..5c12d870156 100644 --- a/tests/unit/test_network_auth.py +++ b/tests/unit/test_network_auth.py @@ -406,7 +406,7 @@ def __call__( stdin: Optional[Any] = None, stdout: Optional[Any] = None, input: Optional[bytes] = None, - check: Optional[bool] = None + check: Optional[bool] = None, ) -> Any: if cmd[1] == "get": assert stdin == -3 # subprocess.DEVNULL From 21c7cb4c30fa8fe42db31acc3e94113a04fb2e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=D0=BD=20=D0=94=D0=BE=D0=BD=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Sun, 1 Oct 2023 00:59:16 +0300 Subject: [PATCH 2/2] Move the setuptools settings into pyproject.toml Except for `zip_safe`. It's not especially relevant nowadays, so just delete it. --- pyproject.toml | 26 ++++++++++++++++++++++++++ setup.py | 44 +------------------------------------------- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3e85ea37156..a65d79e9f11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,32 @@ Changelog = "https://pip.pypa.io/en/stable/news/" requires = ["setuptools>=67.6.1", "wheel"] build-backend = "setuptools.build_meta" +[tool.setuptools] +package-dir = {"" = "src"} +include-package-data = false + +[tool.setuptools.dynamic] +version = {attr = "pip.__version__"} + +[tool.setuptools.packages.find] +where = ["src"] +exclude = ["contrib", "docs", "tests*", "tasks"] + +[tool.setuptools.package-data] +"pip" = ["py.typed"] +"pip._vendor" = ["vendor.txt"] +"pip._vendor.certifi" = ["*.pem"] +"pip._vendor.requests" = ["*.pem"] +"pip._vendor.distlib._backport" = ["sysconfig.cfg"] +"pip._vendor.distlib" = [ + "t32.exe", + "t64.exe", + "t64-arm.exe", + "w32.exe", + "w64.exe", + "w64-arm.exe", +] + [tool.towncrier] # For finding the __version__ package = "pip" diff --git a/setup.py b/setup.py index 19175c995e3..b15e60549cb 100644 --- a/setup.py +++ b/setup.py @@ -1,49 +1,8 @@ -import os import sys -from setuptools import find_packages, setup - - -def read(rel_path: str) -> str: - here = os.path.abspath(os.path.dirname(__file__)) - # intentionally *not* adding an encoding option to open, See: - # https://github.com/pypa/virtualenv/issues/201#issuecomment-3145690 - with open(os.path.join(here, rel_path)) as fp: - return fp.read() - - -def get_version(rel_path: str) -> str: - for line in read(rel_path).splitlines(): - if line.startswith("__version__"): - # __version__ = "0.9" - delim = '"' if '"' in line else "'" - return line.split(delim)[1] - raise RuntimeError("Unable to find version string.") - +from setuptools import setup setup( - version=get_version("src/pip/__init__.py"), - package_dir={"": "src"}, - packages=find_packages( - where="src", - exclude=["contrib", "docs", "tests*", "tasks"], - ), - include_package_data=False, - package_data={ - "pip": ["py.typed"], - "pip._vendor": ["vendor.txt"], - "pip._vendor.certifi": ["*.pem"], - "pip._vendor.requests": ["*.pem"], - "pip._vendor.distlib._backport": ["sysconfig.cfg"], - "pip._vendor.distlib": [ - "t32.exe", - "t64.exe", - "t64-arm.exe", - "w32.exe", - "w64.exe", - "w64-arm.exe", - ], - }, entry_points={ "console_scripts": [ "pip=pip._internal.cli.main:main", @@ -51,5 +10,4 @@ def get_version(rel_path: str) -> str: "pip{}.{}=pip._internal.cli.main:main".format(*sys.version_info[:2]), ], }, - zip_safe=False, )