[bumpversion]
-current_version = 52.0.0
+current_version = 53.0.0
commit = True
tag = True
+v53.0.0
+-------
+
+
+Breaking Changes
+^^^^^^^^^^^^^^^^
+* #1527: Removed bootstrap script. Now Setuptools requires pip or another pep517-compliant builder such as 'build' to build. Now Setuptools can be installed from Github main branch.
+
+
v52.0.0
-------
-"""
-If setuptools is not already installed in the environment, it's not possible
-to invoke setuptools' own commands. This routine will bootstrap this local
-environment by creating a minimal egg-info directory and then invoking the
-egg-info command to flesh out the egg-info directory.
-"""
+import warnings
-import os
-import sys
-import textwrap
-import subprocess
-import io
+msg = "bootstrap.py is no longer needed. Use a PEP-517-compatible builder instead."
-minimal_egg_info = textwrap.dedent("""
- [distutils.commands]
- egg_info = setuptools.command.egg_info:egg_info
- [distutils.setup_keywords]
- include_package_data = setuptools.dist:assert_bool
- install_requires = setuptools.dist:check_requirements
- extras_require = setuptools.dist:check_extras
- entry_points = setuptools.dist:check_entry_points
-
- [egg_info.writers]
- PKG-INFO = setuptools.command.egg_info:write_pkg_info
- dependency_links.txt = setuptools.command.egg_info:overwrite_arg
- entry_points.txt = setuptools.command.egg_info:write_entries
- requires.txt = setuptools.command.egg_info:write_requirements
- """)
-
-
-def ensure_egg_info():
- if os.path.exists('setuptools.egg-info'):
- return
- print("adding minimal entry_points")
- add_minimal_info()
- run_egg_info()
-
-
-def add_minimal_info():
- """
- Build a minimal egg-info, enough to invoke egg_info
- """
-
- os.mkdir('setuptools.egg-info')
- with io.open('setuptools.egg-info/entry_points.txt', 'w') as ep:
- ep.write(minimal_egg_info)
-
-
-def run_egg_info():
- cmd = [sys.executable, 'setup.py', 'egg_info']
- print("Regenerating egg_info")
- subprocess.check_call(cmd)
-
-
-__name__ == '__main__' and ensure_egg_info()
+__name__ == '__main__' and warnings.warn(msg)
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import subprocess
-import sys
-import os
-
-
extensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker']
master_doc = "index"
}
-# hack to run the bootstrap script so that jaraco.packaging.sphinx
-# can invoke setup.py
-'READTHEDOCS' in os.environ and subprocess.check_call(
- [sys.executable, '-m', 'bootstrap'],
- cwd=os.path.join(os.path.dirname(__file__), os.path.pardir),
-)
-
-
# Add support for linking usernames
github_url = 'https://github.com'
github_sponsors_url = f'{github_url}/sponsors'
[build-system]
requires = [
- # avoid self install on Python 2; ref #1996
"setuptools >= 40.8; python_version > '3'",
"wheel",
]
license_files =
LICENSE
name = setuptools
-version = 52.0.0
+version = 53.0.0
author = Python Packaging Authority
author_email = distutils-sig@python.org
description = Easily download, build, install, upgrade, and uninstall Python packages
here = os.path.dirname(__file__)
-def require_metadata():
- "Prevent improper installs without necessary metadata. See #659"
- egg_info_dir = os.path.join(here, 'setuptools.egg-info')
- if not os.path.exists(egg_info_dir):
- msg = (
- "Cannot build setuptools without metadata. "
- "Run `bootstrap.py`."
- )
- raise RuntimeError(msg)
-
-
def read_commands():
command_ns = {}
cmd_module_path = 'setuptools/command/__init__.py'
if __name__ == '__main__':
# allow setup.py to run from another directory
here and os.chdir(here)
- require_metadata()
dist = setuptools.setup(**setup_params)
+++ /dev/null
-import os
-import subprocess
-import sys
-import re
-
-
-def remove_setuptools():
- """
- Remove setuptools from the current environment.
- """
- print("Removing setuptools")
- cmd = [sys.executable, '-m', 'pip', 'uninstall', '-y', 'setuptools']
- # set cwd to something other than '.' to avoid detecting
- # '.' as the installed package.
- subprocess.check_call(cmd, cwd=os.environ['TOX_WORK_DIR'])
-
-
-def bootstrap():
- print("Running bootstrap")
- cmd = [sys.executable, '-m', 'bootstrap']
- subprocess.check_call(cmd)
-
-
-def is_install_self(args):
- """
- Do the args represent an install of .?
- """
- def strip_extras(arg):
- match = re.match(r'(.*)?\[.*\]$', arg)
- return match.group(1) if match else arg
-
- return (
- 'install' in args
- and any(
- arg in ['.', os.getcwd()]
- for arg in map(strip_extras, args)
- )
- )
-
-
-def pip(*args):
- cmd = [sys.executable, '-m', 'pip'] + list(args)
- return subprocess.check_call(cmd)
-
-
-def test_dependencies():
- from ConfigParser import ConfigParser
-
- def clean(dep):
- spec, _, _ = dep.partition('#')
- return spec.strip()
-
- parser = ConfigParser()
- parser.read('setup.cfg')
- raw = parser.get('options.extras_require', 'tests').split('\n')
- return filter(None, map(clean, raw))
-
-
-def run(args):
- os.environ['PIP_USE_PEP517'] = 'true'
-
- if is_install_self(args):
- remove_setuptools()
- bootstrap()
-
- pip(*args)
-
-
-if __name__ == '__main__':
- run(sys.argv[1:])
pytest {posargs}
usedevelop = True
extras = testing
-install_command = {[helpers]pip} install {opts} {packages}
-list_dependencies_command = {[helpers]pip} freeze --all
setenv =
COVERAGE_FILE={toxworkdir}/.coverage.{envname}
passenv =
python -m twine upload dist/*
python -m jaraco.develop.create-github-release
python -m jaraco.tidelift.publish-release-notes
-
-[helpers]
-# Custom pip behavior
-pip = python {toxinidir}/tools/tox_pip.py