NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #9 most downloaded on PyPI
Most extensible Python build backend with support for C/C++ extension modules
Last release 1 months ago
08 Aug 2026
Ships unpredictably
gaps range from 9 days to 8 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
10 versions withdrawn
withdrawn after publishing
20 years old
625 releases · first in 2006
* #882: Ensure extras are honored when building the working set. * #913: Fix issue in develop if package directory has a trailing slash.
#882: Ensure extras are honored when building the working set.
#913: Fix issue in develop if package directory has a trailing slash.
24 Jan 2017
#882 : Ensure extras are honored when building the working set.
#913 : Fix issue in develop if package directory has a trailing slash.
* #935: Fix glob syntax in graft.
One column per quarter.
23 Jan 2017
#935 : Fix glob syntax in graft.
Users are welcome to contrive other means to install or upgrade Setuptools using other means, such as pre-installing the Setuptools dependencies with
#581: Instead of vendoring the growing list of dependencies that Setuptools requires to function, Setuptools now requires these dependencies just like any other project. Unlike other projects, however, Setuptools cannot rely on setup_requires to demand the dependencies it needs to install because its own machinery would be necessary to pull those dependencies if not present (a bootstrapping problem). As a result, Setuptools no longer supports self upgrade or installation in the general case. Instead, users are directed to use pip to install and upgrade using the wheel distributions of setuptools.
Users are welcome to contrive other means to install or upgrade Setuptools using other means, such as pre-installing the Setuptools dependencies with pip or a bespoke bootstrap tool, but such usage is not recommended and is not supported.
As discovered in #940, not all versions of pip will successfully install Setuptools from its pre-built wheel. If you encounter issues with "No module named six" or "No module named packaging", especially following a line "Running setup.py egg_info for package setuptools", then your pip is not new enough.
There's an additional issue in pip where setuptools is upgraded concurrently with other source packages, described in pip #4253. The proposed workaround is to always upgrade Setuptools first prior to upgrading other packages that would upgrade Setuptools.
* #921: Correct issue where certifi fallback not being reached on Windows.
#921: Correct issue where certifi fallback not being reached on Windows.
16 Jan 2017
#921 : Correct issue where certifi fallback not being reached on Windows.
Installation via pip, as indicated in the Python Packaging User's Guide _, is the officially-supported mechanism for installing Setuptools, and this r
Installation via pip, as indicated in the Python Packaging User's Guide, is the officially-supported mechanism for installing Setuptools, and this recommendation is now explicit in the much more concise README.
Other edits and tweaks were made to the documentation. The codebase is unchanged.
* #866: Use dis.Bytecode on Python 3.4 and later in setuptools.depends.
#866: Use dis.Bytecode on Python 3.4 and later in setuptools.depends.
28 Dec 2016
#866 : Use dis.Bytecode on Python 3.4 and later in setuptools.depends .
* #889: Backport proposed fix for disabling interpolation in distutils.Distribution.parse_config_files.
#889: Backport proposed fix for disabling interpolation in distutils.Distribution.parse_config_files.
24 Dec 2016
#889 : Backport proposed fix for disabling interpolation in distutils.Distribution.parse_config_files.
* #884: Restore support for running the tests under pytest-runner _ by ensuring that PYTHONPATH is honored in tests invoking a subprocess.
#884: Restore support for running the tests under pytest-runner by ensuring that PYTHONPATH is honored in tests invoking a subprocess.
22 Dec 2016
#884 : Restore support for running the tests under pytest-runner by ensuring that PYTHONPATH is honored in tests invoking a subprocess.
* #706: Add rmtree compatibility shim for environments where rmtree fails when passed a unicode string.
#706: Add rmtree compatibility shim for environments where rmtree fails when passed a unicode string.
21 Dec 2016
#706 : Add rmtree compatibility shim for environments where rmtree fails when passed a unicode string.
* #893: Only release sdist in zip format as warehouse now disallows releasing two different formats.
#893: Only release sdist in zip format as warehouse now disallows releasing two different formats.
18 Dec 2016
#893 : Only release sdist in zip format as warehouse now disallows releasing two different formats.
* #704: More selectively ensure that 'rmtree' is not invoked with a byte string, enabling it to remove files that are non-ascii, even on Python 2. * #
#704: More selectively ensure that 'rmtree' is not invoked with a byte string, enabling it to remove files that are non-ascii, even on Python 2.
#712: In 'sandbox.run_setup', ensure that __file__ is always a str, modeling the behavior observed by the interpreter when invoking scripts and modules.
* #891: In 'test' command on test failure, raise DistutilsError, suppression invocation of subsequent commands.
#891: In 'test' command on test failure, raise DistutilsError, suppression invocation of subsequent commands.
16 Dec 2016
#891 : In ‘test’ command on test failure, raise DistutilsError, suppression invocation of subsequent commands.
* #890: Revert #849. global-exclude .foo will not match all *.foo files any more. Package authors must add an explicit wildcard, such as global-exclud
#890: Revert #849. global-exclude .foo will not match all *.foo files any more. Package authors must add an explicit wildcard, such as global-exclude *.foo, to match all .foo files. See #886, #849.
* #885: Fix regression where 'pkg_resources._rebuild_mod_path' would fail when a namespace package's '__path__' was not a list with a sort attribute.
#885: Fix regression where 'pkg_resources._rebuild_mod_path' would fail when a namespace package's '__path__' was not a list with a sort attribute.
14 Dec 2016
#885 : Fix regression where ‘pkg_resources._rebuild_mod_path’ would fail when a namespace package’s ‘path’ was not a list with a sort attribute.
* #250: Install '-nspkg.pth' files for packages installed with 'setup.py develop'. These .pth files allow namespace packages installed by pip or devel
#250: Install '-nspkg.pth' files for packages installed with 'setup.py develop'. These .pth files allow namespace packages installed by pip or develop to co-mingle. This change required the removal of the change for #805 and pip #1924, introduced in 28.3.0 and implicated in #870, but means that namespace packages not in a site packages directory will no longer work on Python earlier than 3.5, whereas before they would work on Python not earlier than 3.3.
read_configuration() now accepts ignore_option_errors argument. This allows scraping tools to read metadata without a need to download entire packages
#879: For declarative config:
read_configuration() now accepts ignore_option_errors argument. This allows scraping tools to read metadata without a need to download entire packages. E.g. we can gather some stats right from GitHub repos just by downloading setup.cfg.
packages find: directive now supports fine tuning from a subsection. The same arguments as for find() are accepted.
* #394 via #862: Added support for declarative package config in a setup.cfg file _.
#394 via #862: Added support for declarative package config in a setup.cfg file.
08 Dec 2016
#394 via #862 : Added support for declarative package config in a setup.cfg file .
* #850: In test command, invoke unittest.main with indication not to exit the process.
#850: In test command, invoke unittest.main with indication not to exit the process.
08 Dec 2016
#850 : In test command, invoke unittest.main with indication not to exit the process.
* #854: Bump to vendored Packaging 16.8.
#854: Bump to vendored Packaging 16.8.
* #846: Also trap 'socket.error' when opening URLs in package_index. * #849: Manifest processing now matches the filename pattern anywhere in the file
#846: Also trap 'socket.error' when opening URLs in package_index.
#849: Manifest processing now matches the filename pattern anywhere in the filename and not just at the start. Restores behavior found prior to 28.5.0.
* #864: Drop support for Python 3.2. Systems requiring Python 3.2 support must use 'setuptools < 30'. * #825: Suppress warnings for single files. * #8
#864: Drop support for Python 3.2. Systems requiring Python 3.2 support must use 'setuptools < 30'.
#825: Suppress warnings for single files.
#830 via #843: Once again restored inclusion of data files to sdists, but now trap TypeError caused by techniques employed rjsmin and similar.
* #861: Re-release of v29.0.1 with the executable script launchers bundled. Now, launchers are included by default and users that want to disable this
#861: Re-release of v29.0.1 with the executable script launchers bundled. Now, launchers are included by default and users that want to disable this behavior must set the environment variable 'SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES' to a false value like "false" or "0".
* #841: Drop special exception for packages invoking win32com during the build/install process. See Distribute #118 for history.
#841: Drop special exception for packages invoking win32com during the build/install process. See Distribute #118 for history.
25 Nov 2016
#841 : Drop special exception for packages invoking win32com during the build/install process. See Distribute #118 for history.
Nothing published for this version
* #629: Per the discussion, refine the sorting to use version value order for more accurate detection of the latest available version when scanning fo
#629: Per the discussion, refine the sorting to use version value order for more accurate detection of the latest available version when scanning for packages. See also #829.
#837: Rely on the config var "SO" for Python 3.3.0 only when determining the ext filename.
* #827: Update PyPI root for dependency links. * #833: Backed out changes from #830 as the implementation seems to have problems in some cases.
#827: Update PyPI root for dependency links.
#833: Backed out changes from #830 as the implementation seems to have problems in some cases.
29 Oct 2016
#827 : Update PyPI root for dependency links.
#833 : Backed out changes from #830 as the implementation seems to have problems in some cases.
* #832: Moved much of the namespace package handling functionality into a separate module for re-use in something like #789. * #830: sdist command no
#832: Moved much of the namespace package handling functionality into a separate module for re-use in something like #789.
#830: sdist command no longer suppresses the inclusion of data files, re-aligning with the expectation of distutils and addressing #274 and #521.
* #816: Fix manifest file list order in tests.
#816: Fix manifest file list order in tests.
* #629: When scanning for packages, pkg_resources now ignores empty egg-info directories and gives precedence to packages whose versions are lexicogra
#629: When scanning for packages, pkg_resources now ignores empty egg-info directories and gives precedence to packages whose versions are lexicographically greatest, a rough approximation for preferring the latest available version.
* #810: Tests are now invoked with tox and not setup.py test. * #249 and #450 via #764: Avoid scanning the whole tree when building the manifest. Also
#810: Tests are now invoked with tox and not setup.py test.
#249 and #450 via #764: Avoid scanning the whole tree when building the manifest. Also fixes a long-standing bug where patterns in MANIFEST.in had implicit wildcard matching. This caused global-exclude .foo to exclude all *.foo files, but also global-exclude bar.py to exclude foo_bar.py.
Updated setuptools.command.sdist to re-use most of the functionality directly from distutils.command.sdist for the add_defaults method with strategic
#732: Now extras with a hyphen are honored per PEP 426.
#811: Update to pyparsing 2.1.10.
Updated setuptools.command.sdist to re-use most of the functionality directly from distutils.command.sdist for the add_defaults method with strategic overrides. See #750 for rationale.
#760 via #762: Look for certificate bundle where SUSE Linux typically presents it. Use certifi.where() to locate the bundle.
* #809: In find_packages(), restore support for excluding a parent package without excluding a child package. * #805: Disable -nspkg.pth behavior on P
#809: In find_packages(), restore support for excluding a parent package without excluding a child package.
#805: Disable -nspkg.pth behavior on Python 3.3+ where PEP-420 functionality is adequate. Fixes pip #1924.
Nothing published for this version
* #803: Bump certifi to 2016.9.26.
#803: Bump certifi to 2016.9.26.
* #733: Do not search excluded directories for packages. This introduced a backwards incompatible change in find_packages() so that find_packages(excl
#733: Do not search excluded directories for packages. This introduced a backwards incompatible change in find_packages() so that find_packages(exclude=['foo']) == [], excluding subpackages of foo. Previously, find_packages(exclude=['foo']) == ['foo.bar'], even though the parent foo package was excluded.
#795: Bump certifi.
#719: Suppress decoding errors and instead log a warning when metadata cannot be decoded.
* #790: In MSVC monkeypatching, explicitly patch each function by name in the target module instead of inferring the module from the function's __modu
#790: In MSVC monkeypatching, explicitly patch each function by name in the target module instead of inferring the module from the function's __module__. Improves compatibility with other packages that might have previously patched distutils functions (i.e. NumPy).
* #794: In test command, add installed eggs to PYTHONPATH when invoking tests so that subprocesses will also have the dependencies available. Fixes to
#794: In test command, add installed eggs to PYTHONPATH when invoking tests so that subprocesses will also have the dependencies available. Fixes tox 330.
#795: Update vendored pyparsing 2.1.9.
Nicer, more consistent interfaces for msvc monkeypatching.
#520 and #513: Suppress ValueErrors in fixup_namespace_packages when lookup fails.
Nicer, more consistent interfaces for msvc monkeypatching.
14 Sep 2016
#520 and #513 : Suppress ValueErrors in fixup_namespace_packages when lookup fails.
Nicer, more consistent interfaces for msvc monkeypatching.
* #779 via #781: Fix circular import.
#779 via #781: Fix circular import.
Introduce the (private) monkey module to encapsulate the distutils monkeypatching behavior.
Introduce the (private) monkey module to encapsulate the distutils monkeypatching behavior.
09 Sep 2016
Introduce the (private) monkey module to encapsulate the distutils monkeypatching behavior.
The upload_docs command will continue to use the python.org site, but the command is now deprecated. Users are urged to use Read The Docs instead.
Now use Warehouse by default for upload, patching distutils.config.PyPIRCCommand to affect default behavior.
Any config in .pypirc should be updated to replace
with
Similarly, any passwords stored in the keyring should be updated to use this new value for "system".
The upload_docs command will continue to use the python.org site, but the command is now deprecated. Users are urged to use Read The Docs instead.
#776: Use EXT_SUFFIX for py_limited_api renaming.
#774 and #775: Use LegacyVersion from packaging when detecting numpy versions.
Re-release of 26.1.0 with pytest pinned to allow for automated deployment and thus proper packaging environment variables, fixing issues with missing
Re-release of 26.1.0 with pytest pinned to allow for automated deployment and thus proper packaging environment variables, fixing issues with missing executable launchers.
29 Aug 2016
Re-release of 26.1.0 with pytest pinned to allow for automated deployment and thus proper packaging environment variables, fixing issues with missing executable launchers.
* #763: pkg_resources.get_default_cache now defers to the appdirs project to resolve the cache directory. Adds a vendored dependency on appdirs to pkg
#763: pkg_resources.get_default_cache now defers to the appdirs project to resolve the cache directory. Adds a vendored dependency on appdirs to pkg_resources.
28 Aug 2016
#763 : pkg_resources.get_default_cache now defers to the appdirs project to resolve the cache directory. Adds a vendored dependency on appdirs to pkg_resources.
* #748: By default, sdists are now produced in gzipped tarfile format by default on all platforms, adding forward compatibility for the same behavior
#748: By default, sdists are now produced in gzipped tarfile format by default on all platforms, adding forward compatibility for the same behavior in Python 3.6 (See Python #27819).
#459 via #736: On Windows with script launchers, sys.argv[0] now reflects the name of the entry point, consistent with the behavior in distlib and pip wrappers.
#752 via #753: When indicating py_limited_api to Extension, it must be passed as a keyword argument.
Add Extension(py_limited_api=True). When set to a truthy value, that extension gets a filename appropriate for code using Py_LIMITED_API. When used co
Add Extension(py_limited_api=True). When set to a truthy value, that extension gets a filename appropriate for code using Py_LIMITED_API. When used correctly this allows a single compiled extension to work on all future versions of CPython 3. The py_limited_api argument only controls the filename. To be compatible with multiple versions of Python 3, the C extension will also need to set -DPy_LIMITED_API=... and be modified to use only the functions in the limited API.
Style updates. See #740, #741, #743, #744, #742, #747.
#739 Fix unquoted libpaths by fixing compatibility between numpy.distutils and distutils._msvccompiler for numpy < 1.11.2 (Fix issue #728, error also fixed in Numpy).
#731: Bump certifi.
Style updates. See #740, #741, #743, #744, #742, #747.
#735: include license file.
* #612 via #730: Add a LICENSE file which needs to be provided by the terms of the MIT license.
#612 via #730: Add a LICENSE file which needs to be provided by the terms of the MIT license.
12 Aug 2016
#612 via #730 : Add a LICENSE file which needs to be provided by the terms of the MIT license.
* #725: revert library_dir_option patch (Error is related to numpy.distutils and make errors on non Numpy users).
#725: revert library_dir_option patch (Error is related to numpy.distutils and make errors on non Numpy users).
05 Aug 2016
#725 : revert library_dir_option patch (Error is related to numpy.distutils and make errors on non Numpy users).
* #720 * #723: Improve patch for library_dir_option.
#720
#723: Improve patch for library_dir_option.
* #717 * #713 * #707: Fix Python 2 compatibility for MSVC by catching errors properly. * #715: Fix unquoted libpaths by patching library_dir_option.
#717
#713
#707: Fix Python 2 compatibility for MSVC by catching errors properly.
#715: Fix unquoted libpaths by patching library_dir_option.
04 Aug 2016
#717
#713
#707 : Fix Python 2 compatibility for MSVC by catching errors properly.
#715 : Fix unquoted libpaths by patching library_dir_option .
* #714 and #704: Revert fix as it breaks other components downstream that can't handle unicode. See #709, #710, and #712.
#714 and #704: Revert fix as it breaks other components downstream that can't handle unicode. See #709, #710, and #712.
02 Aug 2016
#714 and #704 : Revert fix as it breaks other components downstream that can’t handle unicode. See #709 , #710 , and #712 .
* #704: Fix errors when installing a zip sdist that contained files named with non-ascii characters on Windows would crash the install when it attempt
#704: Fix errors when installing a zip sdist that contained files named with non-ascii characters on Windows would crash the install when it attempted to clean up the build.
#646: MSVC compatibility - catch errors properly in RegistryInfo.lookup.
#702: Prevent UnboundLocalError when initial working_set is empty.
* #686: Fix issue in sys.path ordering by pkg_resources when rewrite technique is "raw". * #699: Fix typo in msvc support.
#686: Fix issue in sys.path ordering by pkg_resources when rewrite technique is "raw".
#699: Fix typo in msvc support.
28 Jul 2016
#686 : Fix issue in sys.path ordering by pkg_resources when rewrite technique is “raw”.
#699 : Fix typo in msvc support.
* #609: Setuptools will now try to download a distribution from the next possible download location if the first download fails. This means you can no
#609: Setuptools will now try to download a distribution from the next possible download location if the first download fails. This means you can now specify multiple links as dependency_links and all links will be tried until a working download link is encountered.
* #688: Fix AttributeError in setup.py when invoked not from the current directory.
#688: Fix AttributeError in setup.py when invoked not from the current directory.
25 Jul 2016
#688 : Fix AttributeError in setup.py when invoked not from the current directory.
Fixed documentation builders by allowing setup.py to be imported without having bootstrapped the metadata.
Cleanup of setup.py script.
Fixed documentation builders by allowing setup.py to be imported without having bootstrapped the metadata.
More style cleanup. See #677, #678, #679, #681, #685.
To retain the old behavior when using any easy_install operation (including setup.py install when setuptools is present), set the environment variable
#674: Default sys.path manipulation by easy-install.pth is now "raw", meaning that when writing easy-install.pth during any install operation, the sys.path will not be rewritten and will no longer give preference to easy_installed packages.
To retain the old behavior when using any easy_install operation (including setup.py install when setuptools is present), set the environment variable:
SETUPTOOLS_SYS_PATH_TECHNIQUE=rewrite
This project hopes that that few if any environments find it necessary to retain the old behavior, and intends to drop support for it altogether in a future release. Please report any relevant concerns in the ticket for this change.
* #398: Fix shebang handling on Windows in script headers where spaces in sys.executable would produce an improperly-formatted shebang header, introdu
#398: Fix shebang handling on Windows in script headers where spaces in sys.executable would produce an improperly-formatted shebang header, introduced in 12.0 with the fix for #188.
#663, #670: More style updates.
* #516: Disable os.link to avoid hard linking in sdist.make_distribution, avoiding errors on systems that support hard links but not on the file syste
#516: Disable os.link to avoid hard linking in sdist.make_distribution, avoiding errors on systems that support hard links but not on the file system in which the build is occurring.
* #667: Update Metadata-Version to 1.2 when python_requires is supplied.
#667: Update Metadata-Version to 1.2 when python_requires is supplied.
21 Jul 2016
#667 : Update Metadata-Version to 1.2 when python_requires is supplied.
Your coding agent can read these notes before it upgrades. Set up the MCP server →