summaryrefslogtreecommitdiff
path: root/assets/info/setuptools.info
diff options
context:
space:
mode:
Diffstat (limited to 'assets/info/setuptools.info')
-rw-r--r--assets/info/setuptools.info26390
1 files changed, 26390 insertions, 0 deletions
diff --git a/assets/info/setuptools.info b/assets/info/setuptools.info
new file mode 100644
index 00000000..48a55082
--- /dev/null
+++ b/assets/info/setuptools.info
@@ -0,0 +1,26390 @@
+This is setuptools.info, produced by makeinfo version 6.5 from
+setuptools.texi.
+
+ setuptools 50.3.2, Dec 04, 2020
+
+ Python Packaging Authority
+
+ Copyright © Python Packaging Authority
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* setuptools: (setuptools.info). One line description of project
+END-INFO-DIR-ENTRY
+
+
+ Generated by Sphinx 2.3.1.
+
+
+File: setuptools.info, Node: Top, Next: Building and Distributing Packages with Setuptools, Up: (dir)
+
+setuptools
+**********
+
+ setuptools 50.3.2, Dec 04, 2020
+
+ Python Packaging Authority
+
+ Copyright © Python Packaging Authority
+
+Setuptools is a fully-featured, actively-maintained, and stable library
+designed to facilitate packaging Python projects.
+
+Documentation content:
+
+* Menu:
+
+* Building and Distributing Packages with Setuptools::
+* Build System Support::
+* Package Discovery and Resource Access using pkg_resources::
+* Keywords::
+* Roadmap::
+* Building and Distributing Packages with Setuptools: Building and Distributing Packages with Setuptools<2>.
+* Development on Setuptools::
+* Guides on backward compatibility & deprecated practice::
+* History: History<2>.
+* Credits::
+* Index::
+
+ — The Detailed Node Listing —
+
+Building and Distributing Packages with Setuptools
+
+* Transition to PEP517::
+
+Transition to PEP517
+
+* setuptools Quickstart::
+* Package Discovery and Namespace Package::
+* Entry Points::
+* Dependencies Management in Setuptools::
+* Data Files Support::
+* “Development Mode”::
+* Tagging and “Daily Build” or “Snapshot” Releases::
+* Generating Source Distributions::
+* Distributing Extensions compiled with Cython::
+* Specifying Your Project’s Version::
+* Creating distutils Extensions::
+* Configuring setup() using setup.cfg files: Configuring setup using setup cfg files.
+* New and Changed setup() Keywords: New and Changed setup Keywords.
+* Command Reference::
+* Using setuptools to package and distribute your project::
+* Automatic Resource Extraction::
+* Defining Additional Metadata::
+* Setting the zip_safe flag::
+
+setuptools Quickstart
+
+* Installation::
+* Python packaging at a glance::
+* Basic Use::
+* Automatic package discovery::
+* Entry points and automatic script creation::
+* Dependency management::
+* Including Data Files::
+* Development mode::
+* Uploading your package to PyPI::
+* Transitioning from setup.py to setup.cfg: Transitioning from setup py to setup cfg.
+* Resources on Python packaging::
+
+Package Discovery and Namespace Package
+
+* Using find; or find_packages: Using find or find_packages.
+* Using find_namespace; or find_namespace_packages: Using find_namespace or find_namespace_packages.
+* Legacy Namespace Packages::
+
+Legacy Namespace Packages
+
+* pkg_resource style namespace package::
+* pkgutil style namespace package::
+
+Entry Points
+
+* Console Scripts::
+* Advertising Behavior::
+* Dependency Management::
+
+Dependencies Management in Setuptools
+
+* Build system requirement::
+* Declaring required dependency::
+* Optional dependencies::
+* Python requirement::
+
+Build system requirement
+
+* Package requirement::
+
+Declaring required dependency
+
+* Platform specific dependencies::
+* Dependencies that aren’t in PyPI::
+
+Data Files Support
+
+* Accessing Data Files at Runtime::
+* Non-Package Data Files::
+
+Generating Source Distributions
+
+* Making “Official” (Non-Snapshot) Releases: Making “Official” Non-Snapshot Releases.
+
+Creating distutils Extensions
+
+* Adding Commands::
+* Adding setup() Arguments: Adding setup Arguments.
+* Customizing Distribution Options::
+* Adding new EGG-INFO Files::
+* Adding Support for Revision Control Systems::
+
+Configuring setup() using setup.cfg files
+
+* Using a src/ layout::
+* Specifying values::
+
+Specifying values
+
+* Metadata::
+* Options::
+
+Command Reference
+
+* alias - Define shortcuts for commonly used commands::
+* bdist_egg - Create a Python Egg for the project::
+* develop - Deploy the project source in “Development Mode”::
+* egg_info - Create egg metadata and set build tags::
+* rotate - Delete outdated distribution files::
+* saveopts - Save used options to a configuration file::
+* setopt - Set a distutils or setuptools option in a config file::
+* test - Build package and run a unittest suite::
+* upload - Upload source and/or egg distributions to PyPI::
+
+egg_info - Create egg metadata and set build tags
+
+* Release Tagging Options::
+* Other egg_info Options::
+* egg_info Examples::
+
+saveopts - Save used options to a configuration file
+
+* Configuration File Options::
+
+Build System Support
+
+* What is it?::
+* How to use it?::
+
+Package Discovery and Resource Access using pkg_resources
+
+* Overview::
+* API Reference::
+
+API Reference
+
+* Namespace Package Support::
+* WorkingSet Objects::
+* Environment Objects::
+* Requirement Objects::
+* Entry Points: Entry Points<2>.
+* Distribution Objects::
+* ResourceManager API::
+* Metadata API::
+* Exceptions::
+* Supporting Custom Importers::
+* Utility Functions::
+
+WorkingSet Objects
+
+* Basic WorkingSet Methods::
+* WorkingSet Methods and Attributes::
+* Receiving Change Notifications::
+* Locating Plugins::
+
+Requirement Objects
+
+* Requirements Parsing::
+* Requirement Methods and Attributes::
+
+Entry Points
+
+* Convenience API::
+* Creating and Parsing::
+* EntryPoint Objects::
+
+Distribution Objects
+
+* Getting or Creating Distributions::
+* Distribution Attributes::
+* Distribution Methods::
+
+ResourceManager API
+
+* Basic Resource Access::
+* Resource Extraction::
+* “Provider” Interface::
+
+Metadata API
+
+* IMetadataProvider Methods::
+
+Supporting Custom Importers
+
+* IResourceProvider::
+* Built-in Resource Providers::
+
+Utility Functions
+
+* Parsing Utilities::
+* Platform Utilities::
+* PEP 302 Utilities::
+* File/Path Utilities::
+* History::
+
+Building and Distributing Packages with Setuptools
+
+* Developer’s Guide::
+
+Developer’s Guide
+
+* TRANSITIONAL NOTE::
+
+TRANSITIONAL NOTE
+
+* setup.cfg-only projects: setup cfg-only projects.
+* Configuration API::
+* Mailing List and Bug Tracker::
+
+Development on Setuptools
+
+* Developer’s Guide for Setuptools::
+* Release Process::
+
+Developer’s Guide for Setuptools
+
+* Recommended Reading::
+* Project Management::
+* Authoring Tickets::
+* Making a pull request::
+* Auto-Merge Requests::
+* Testing::
+* Semantic Versioning::
+* Building Documentation::
+* Vendored Dependencies::
+
+Making a pull request
+
+* Adding change notes with your PRs::
+* Alright! So how to add a news fragment?::
+* Examples for adding changelog entries to your Pull Requests::
+
+Release Process
+
+* Release Frequency::
+* Release Managers::
+
+Guides on backward compatibility & deprecated practice
+
+* Supporting both Python 2 and Python 3 with Setuptools::
+* The Internal Structure of Python Eggs::
+* Easy Install::
+* Porting from Distutils::
+* “Eggsecutable” Scripts::
+
+Supporting both Python 2 and Python 3 with Setuptools
+
+* Using 2to3::
+* Distributing Python 3 modules::
+* Advanced features::
+
+Using 2to3
+
+* Differential conversion::
+
+The Internal Structure of Python Eggs
+
+* Eggs and their Formats::
+* Standard Metadata::
+* Other Technical Considerations::
+
+Eggs and their Formats
+
+* Code and Resources::
+* Project Metadata::
+* Filename-Embedded Metadata::
+* Egg Links::
+
+Standard Metadata
+
+* .txt File Formats: txt File Formats.
+* Dependency Metadata::
+* namespace_packages.txt – Namespace Package Metadata: namespace_packages txt – Namespace Package Metadata.
+* entry_points.txt – “Entry Point”/Plugin Metadata: entry_points txt – “Entry Point”/Plugin Metadata.
+* The scripts Subdirectory::
+* Zip Support Metadata::
+* top_level.txt – Conflict Management Metadata: top_level txt – Conflict Management Metadata.
+* SOURCES.txt – Source Files Manifest: SOURCES txt – Source Files Manifest.
+
+Dependency Metadata
+
+* requires.txt: requires txt.
+* setup_requires.txt: setup_requires txt.
+* dependency_links.txt: dependency_links txt.
+* depends.txt – Obsolete, do not create!: depends txt – Obsolete do not create!.
+
+Zip Support Metadata
+
+* native_libs.txt: native_libs txt.
+* eager_resources.txt: eager_resources txt.
+* zip-safe and not-zip-safe::
+
+Other Technical Considerations
+
+* Zip File Issues::
+* Installation and Path Management Issues::
+
+Zip File Issues
+
+* The Extraction Process::
+* Extension Import Wrappers::
+
+Installation and Path Management Issues
+
+* Script Wrappers::
+
+Easy Install
+
+* Using “Easy Install”::
+* Reference Manual::
+
+Using “Easy Install”
+
+* Installing “Easy Install”::
+* Downloading and Installing a Package::
+* Upgrading a Package::
+* Changing the Active Version::
+* Uninstalling Packages::
+* Managing Scripts::
+* Executables and Launchers::
+* Tips & Techniques::
+* Password-Protected Sites::
+* Using .pypirc Credentials: Using pypirc Credentials.
+
+Installing “Easy Install”
+
+* Troubleshooting::
+* Windows Notes::
+
+Executables and Launchers
+
+* Windows Executable Launcher::
+* Natural Script Launcher::
+
+Tips & Techniques
+
+* Multiple Python Versions::
+* Restricting Downloads with --allow-hosts::
+* Installing on Un-networked Machines::
+* Packaging Others’ Projects As Eggs::
+* Creating your own Package Index::
+
+Using .pypirc Credentials
+
+* Controlling Build Options::
+* Editing and Viewing Source Packages::
+* Dealing with Installation Conflicts::
+* Compressed Installation::
+
+Reference Manual
+
+* Configuration Files::
+* Command-Line Options::
+* Custom Installation Locations::
+* Package Index “API”::
+
+Custom Installation Locations
+
+* Use the “–user” option::
+* Use the “–user” option and customize “PYTHONUSERBASE”::
+* Use “virtualenv”::
+
+Porting from Distutils
+
+* Prefer Setuptools::
+
+History
+
+* v50.3.2: v50 3 2.
+* v50.3.1: v50 3 1.
+* v50.3.0: v50 3 0.
+* v50.2.0: v50 2 0.
+* v50.1.0: v50 1 0.
+* v50.0.3: v50 0 3.
+* v50.0.2: v50 0 2.
+* v50.0.1: v50 0 1.
+* v50.0.0: v50 0 0.
+* v49.6.0: v49 6 0.
+* v49.5.0: v49 5 0.
+* v49.4.0: v49 4 0.
+* v49.3.2: v49 3 2.
+* v49.3.1: v49 3 1.
+* v49.3.0: v49 3 0.
+* v49.2.1: v49 2 1.
+* v49.2.0: v49 2 0.
+* v49.1.3: v49 1 3.
+* v49.1.2: v49 1 2.
+* v49.1.1: v49 1 1.
+* v49.0.1: v49 0 1.
+* v49.1.0: v49 1 0.
+* v49.0.0: v49 0 0.
+* v48.0.0: v48 0 0.
+* v47.3.2: v47 3 2.
+* v47.3.1: v47 3 1.
+* v47.3.0: v47 3 0.
+* v47.2.0: v47 2 0.
+* v47.1.1: v47 1 1.
+* v44.1.1: v44 1 1.
+* v47.1.0: v47 1 0.
+* v47.0.0: v47 0 0.
+* v46.4.0: v46 4 0.
+* v46.3.1: v46 3 1.
+* v46.3.0: v46 3 0.
+* v46.2.0: v46 2 0.
+* v46.1.3: v46 1 3.
+* v46.1.2: v46 1 2.
+* v46.1.1: v46 1 1.
+* v46.1.0: v46 1 0.
+* v44.1.0: v44 1 0.
+* v46.0.0: v46 0 0.
+* v45.3.0: v45 3 0.
+* v45.2.0: v45 2 0.
+* v45.1.0: v45 1 0.
+* v45.0.0: v45 0 0.
+* v44.0.0: v44 0 0.
+* v43.0.0: v43 0 0.
+* v42.0.2: v42 0 2.
+* v42.0.1: v42 0 1.
+* v42.0.0: v42 0 0.
+* v41.6.0: v41 6 0.
+* v41.5.1: v41 5 1.
+* v41.5.0: v41 5 0.
+* v41.4.0: v41 4 0.
+* v41.3.0: v41 3 0.
+* v41.2.0: v41 2 0.
+* v41.1.0: v41 1 0.
+* v41.0.1: v41 0 1.
+* v41.0.0: v41 0 0.
+* v40.9.0: v40 9 0.
+* v40.8.0: v40 8 0.
+* v40.7.3: v40 7 3.
+* v40.7.2: v40 7 2.
+* v40.7.1: v40 7 1.
+* v40.7.0: v40 7 0.
+* v40.6.3: v40 6 3.
+* v40.6.2: v40 6 2.
+* v40.6.1: v40 6 1.
+* v40.6.0: v40 6 0.
+* v40.5.0: v40 5 0.
+* v40.4.3: v40 4 3.
+* v40.4.2: v40 4 2.
+* v40.4.1: v40 4 1.
+* v40.4.0: v40 4 0.
+* v40.3.0: v40 3 0.
+* v40.2.0: v40 2 0.
+* v40.1.1: v40 1 1.
+* v40.1.0: v40 1 0.
+* v40.0.0: v40 0 0.
+* v39.2.0: v39 2 0.
+* v39.1.0: v39 1 0.
+* v39.0.1: v39 0 1.
+* v39.0.0: v39 0 0.
+* v38.7.0: v38 7 0.
+* v38.6.1: v38 6 1.
+* v38.6.0: v38 6 0.
+* v38.5.2: v38 5 2.
+* v38.5.1: v38 5 1.
+* v38.5.0: v38 5 0.
+* v38.4.1: v38 4 1.
+* v38.4.0: v38 4 0.
+* v38.3.0: v38 3 0.
+* v38.2.5: v38 2 5.
+* v38.2.4: v38 2 4.
+* v38.2.3: v38 2 3.
+* v38.2.2: v38 2 2.
+* v38.2.1: v38 2 1.
+* v38.2.0: v38 2 0.
+* v38.1.0: v38 1 0.
+* v38.0.0: v38 0 0.
+* v37.0.0: v37 0 0.
+* v36.8.0: v36 8 0.
+* v36.7.3: v36 7 3.
+* v36.7.2: v36 7 2.
+* v36.7.1: v36 7 1.
+* v36.7.0: v36 7 0.
+* v36.6.1: v36 6 1.
+* v36.6.0: v36 6 0.
+* v36.5.0: v36 5 0.
+* v36.4.0: v36 4 0.
+* v36.3.0: v36 3 0.
+* v36.2.7: v36 2 7.
+* v36.2.6: v36 2 6.
+* v36.2.5: v36 2 5.
+* v36.2.4: v36 2 4.
+* v36.2.3: v36 2 3.
+* v36.2.2: v36 2 2.
+* v36.2.1: v36 2 1.
+* v36.2.0: v36 2 0.
+* v36.1.1: v36 1 1.
+* v36.1.0: v36 1 0.
+* v36.0.1: v36 0 1.
+* v36.0.0: v36 0 0.
+* v35.0.2: v35 0 2.
+* v35.0.1: v35 0 1.
+* v35.0.0: v35 0 0.
+* v34.4.1: v34 4 1.
+* v34.4.0: v34 4 0.
+* v34.3.3: v34 3 3.
+* v34.3.2: v34 3 2.
+* v34.3.1: v34 3 1.
+* v34.3.0: v34 3 0.
+* v34.2.0: v34 2 0.
+* v34.1.1: v34 1 1.
+* v34.1.0: v34 1 0.
+* v34.0.3: v34 0 3.
+* v34.0.2: v34 0 2.
+* v34.0.1: v34 0 1.
+* v34.0.0: v34 0 0.
+* v33.1.1: v33 1 1.
+* v33.1.0: v33 1 0.
+* v33.0.0: v33 0 0.
+* v32.3.1: v32 3 1.
+* v32.3.0: v32 3 0.
+* v32.2.0: v32 2 0.
+* v32.1.3: v32 1 3.
+* v32.1.2: v32 1 2.
+* v32.1.1: v32 1 1.
+* v32.1.0: v32 1 0.
+* v32.0.0: v32 0 0.
+* v31.0.1: v31 0 1.
+* v31.0.0: v31 0 0.
+* v30.4.0: v30 4 0.
+* v30.3.0: v30 3 0.
+* v30.2.1: v30 2 1.
+* v30.2.0: v30 2 0.
+* v30.1.0: v30 1 0.
+* v30.0.0: v30 0 0.
+* v29.0.1: v29 0 1.
+* v29.0.0: v29 0 0.
+* v28.8.0: v28 8 0.
+* v28.7.1: v28 7 1.
+* v28.7.0: v28 7 0.
+* v28.6.1: v28 6 1.
+* v28.6.0: v28 6 0.
+* v28.5.0: v28 5 0.
+* v28.4.0: v28 4 0.
+* v28.3.0: v28 3 0.
+* v28.1.0: v28 1 0.
+* v28.0.0: v28 0 0.
+* v27.3.1: v27 3 1.
+* v27.3.0: v27 3 0.
+* v27.2.0: v27 2 0.
+* v27.1.2: v27 1 2.
+* v27.1.1: v27 1 1.
+* v27.1.0: v27 1 0.
+* v27.0.0: v27 0 0.
+* v26.1.1: v26 1 1.
+* v26.1.0: v26 1 0.
+* v26.0.0: v26 0 0.
+* v25.4.0: v25 4 0.
+* v25.3.0: v25 3 0.
+* v25.2.0: v25 2 0.
+* v25.1.6: v25 1 6.
+* v25.1.5: v25 1 5.
+* v25.1.4: v25 1 4.
+* v25.1.3: v25 1 3.
+* v25.1.2: v25 1 2.
+* v25.1.1: v25 1 1.
+* v25.1.0: v25 1 0.
+* v25.0.2: v25 0 2.
+* v25.0.1: v25 0 1.
+* v25.0.0: v25 0 0.
+* v24.3.1: v24 3 1.
+* v24.3.0: v24 3 0.
+* v24.2.1: v24 2 1.
+* v24.2.0: v24 2 0.
+* v24.1.1: v24 1 1.
+* v24.1.0: v24 1 0.
+* v24.0.3: v24 0 3.
+* v24.0.2: v24 0 2.
+* v24.0.1: v24 0 1.
+* v24.0.0: v24 0 0.
+* v23.2.1: v23 2 1.
+* v23.1.0: v23 1 0.
+* v23.0.0: v23 0 0.
+* v22.0.5: v22 0 5.
+* v22.0.4: v22 0 4.
+* v22.0.3: v22 0 3.
+* v22.0.2: v22 0 2.
+* v22.0.1: v22 0 1.
+* v22.0.0: v22 0 0.
+* v21.2.2: v21 2 2.
+* v21.2.1: v21 2 1.
+* v21.2.0: v21 2 0.
+* v21.1.0: v21 1 0.
+* v21.0.0: v21 0 0.
+* v20.10.0: v20 10 0.
+* v20.9.0: v20 9 0.
+* v20.8.1: v20 8 1.
+* v20.8.0: v20 8 0.
+* v20.7.0: v20 7 0.
+* v20.6.8: v20 6 8.
+* v20.6.7: v20 6 7.
+* v20.6.6: v20 6 6.
+* v20.6.0: v20 6 0.
+* 20.5: 20 5.
+* 20.4: 20 4.
+* 20.3.1: 20 3 1.
+* 20.3: 20 3.
+* 20.2.2: 20 2 2.
+* 20.2.1: 20 2 1.
+* 20.2: 20 2.
+* 20.1.1: 20 1 1.
+* 20.1: 20 1.
+* 20.0: 20 0.
+* 19.7: 19 7.
+* 19.6.2: 19 6 2.
+* 19.6.1: 19 6 1.
+* 19.6: 19 6.
+* 19.5: 19 5.
+* 19.4.1: 19 4 1.
+* 19.4: 19 4.
+* 19.3: 19 3.
+* 19.2: 19 2.
+* 19.1.1: 19 1 1.
+* 19.1: 19 1.
+* 19.0: 19 0.
+* 18.8.1: 18 8 1.
+* 18.8: 18 8.
+* 18.7.1: 18 7 1.
+* 18.7: 18 7.
+* 18.6.1: 18 6 1.
+* 18.6: 18 6.
+* 18.5: 18 5.
+* 18.4: 18 4.
+* 18.3.2: 18 3 2.
+* 18.3.1: 18 3 1.
+* 18.3: 18 3.
+* 18.2: 18 2.
+* 18.1: 18 1.
+* 18.0.1: 18 0 1.
+* 18.0: 18 0.
+* 17.1.1: 17 1 1.
+* 17.1: 17 1.
+* 17.0: 17 0.
+* 16.0: 16 0.
+* 15.2: 15 2.
+* 15.1: 15 1.
+* 15.0: 15 0.
+* 14.3.1: 14 3 1.
+* 14.3: 14 3.
+* 14.2: 14 2.
+* 14.1.1: 14 1 1.
+* 14.1: 14 1.
+* 14.0: 14 0.
+* 13.0.2: 13 0 2.
+* 13.0.1: 13 0 1.
+* 13.0: 13 0.
+* 12.4: 12 4.
+* 12.3: 12 3.
+* 12.2: 12 2.
+* 12.1: 12 1.
+* 12.0.5: 12 0 5.
+* 12.0.4: 12 0 4.
+* 12.0.3: 12 0 3.
+* 12.0.2: 12 0 2.
+* 12.0.1: 12 0 1.
+* 12.0: 12 0.
+* 11.3.1: 11 3 1.
+* 11.3: 11 3.
+* 11.2: 11 2.
+* 11.1: 11 1.
+* 11.0: 11 0.
+* 10.2.1: 10 2 1.
+* 10.2: 10 2.
+* 10.1: 10 1.
+* 10.0.1: 10 0 1.
+* 10.0: 10 0.
+* 9.1: 9 1.
+* 9.0.1: 9 0 1.
+* 9.0: 9 0.
+* 8.4: 8 4.
+* 8.3: 8 3.
+* 8.2.1: 8 2 1.
+* 8.2: 8 2.
+* 8.1: 8 1.
+* 8.0.4: 8 0 4.
+* 8.0.3: 8 0 3.
+* 8.0.2: 8 0 2.
+* 8.0.1: 8 0 1.
+* 8.0: 8 0.
+* 7.0: 7 0.
+* 6.1: 6 1.
+* 6.0.2: 6 0 2.
+* 6.0.1: 6 0 1.
+* 6.0: 6 0.
+* 5.8: 5 8.
+* 5.7: 5 7.
+* 5.6: 5 6.
+* 5.5.1: 5 5 1.
+* 5.5: 5 5.
+* 5.4.2: 5 4 2.
+* 5.4.1: 5 4 1.
+* 5.4: 5 4.
+* 5.3: 5 3.
+* 5.2: 5 2.
+* 5.1: 5 1.
+* 5.0.2: 5 0 2.
+* 5.0.1: 5 0 1.
+* 5.0: 5 0.
+* 3.7.1 and 3.8.1 and 4.0.1: 3 7 1 and 3 8 1 and 4 0 1.
+* 4.0: 4 0.
+* 3.8: 3 8.
+* 3.7: 3 7.
+* 3.6: 3 6.
+* 3.5.2: 3 5 2.
+* 3.5.1: 3 5 1.
+* 3.5: 3 5.
+* 3.4.4: 3 4 4.
+* 3.4.3: 3 4 3.
+* 3.4.2: 3 4 2.
+* 3.4.1: 3 4 1.
+* 3.4: 3 4.
+* 3.3: 3 3.
+* 3.2: 3 2.
+* 3.1: 3 1.
+* 3.0.2: 3 0 2.
+* 3.0.1: 3 0 1.
+* 3.0: 3 0.
+* 2.2: 2 2.
+* 2.1.2: 2 1 2.
+* 2.1.1: 2 1 1.
+* 2.1: 2 1.
+* 2.0.2: 2 0 2.
+* 2.0.1: 2 0 1.
+* 2.0: 2 0.
+* 1.4.2: 1 4 2.
+* 1.4.1: 1 4 1.
+* 1.4: 1 4.
+* 1.3.2: 1 3 2.
+* 1.3.1: 1 3 1.
+* 1.3: 1 3.
+* 1.2: 1 2.
+* 1.1.7: 1 1 7.
+* 1.1.6: 1 1 6.
+* 1.1.5: 1 1 5.
+* 1.1.4: 1 1 4.
+* 1.1.3: 1 1 3.
+* 1.1.2: 1 1 2.
+* 1.1.1: 1 1 1.
+* 1.1: 1 1.
+* 1.0: 1 0.
+* 0.9.8: 0 9 8.
+* 0.9.7: 0 9 7.
+* 0.9.6: 0 9 6.
+* 0.9.5: 0 9 5.
+* 0.9.4: 0 9 4.
+* 0.9.3: 0 9 3.
+* 0.9.2: 0 9 2.
+* 0.9.1: 0 9 1.
+* 0.9: 0 9.
+* 0.8: 0 8.
+* 0.7.8: 0 7 8.
+* 0.7.7: 0 7 7.
+* 0.7.6: 0 7 6.
+* 0.7.5: 0 7 5.
+* 0.7.4: 0 7 4.
+* 0.7.3: 0 7 3.
+* 0.7.2: 0 7 2.
+* 0.7.1: 0 7 1.
+* 0.7: 0 7.
+* 0.7b4: 0 7b4.
+* 0.6.49: 0 6 49.
+* 0.6.48: 0 6 48.
+* 0.6.47: 0 6 47.
+* 0.6.46: 0 6 46.
+* 0.6.45: 0 6 45.
+* 0.6.44: 0 6 44.
+* 0.6.43: 0 6 43.
+* 0.6.42: 0 6 42.
+* 0.6.41: 0 6 41.
+* 0.6.40: 0 6 40.
+* 0.6.39: 0 6 39.
+* 0.6.38: 0 6 38.
+* 0.6.37: 0 6 37.
+* 0.6.36: 0 6 36.
+* 0.6.35: 0 6 35.
+* 0.6.34: 0 6 34.
+* 0.6.33: 0 6 33.
+* 0.6.32: 0 6 32.
+* 0.6.31: 0 6 31.
+* 0.6.30: 0 6 30.
+* 0.6.29: 0 6 29.
+* 0.6.28: 0 6 28.
+* 0.6.27: 0 6 27.
+* 0.6.26: 0 6 26.
+* 0.6.25: 0 6 25.
+* 0.6.24: 0 6 24.
+* 0.6.23: 0 6 23.
+* 0.6.21: 0 6 21.
+* 0.6.20: 0 6 20.
+* 0.6.19: 0 6 19.
+* 0.6.18: 0 6 18.
+* 0.6.17: 0 6 17.
+* 0.6.16: 0 6 16.
+* 0.6.15: 0 6 15.
+* 0.6.14: 0 6 14.
+* 0.6.13: 0 6 13.
+* 0.6.12: 0 6 12.
+* 0.6.11: 0 6 11.
+* 0.6.10: 0 6 10.
+* 0.6.9: 0 6 9.
+* 0.6.8: 0 6 8.
+* 0.6.7: 0 6 7.
+* 0.6.6: 0 6 6.
+* 0.6.5: 0 6 5.
+* 0.6.4: 0 6 4.
+* 0.6.3: 0 6 3.
+* 0.6.2: 0 6 2.
+* 0.6.1: 0 6 1.
+* 0.6: 0 6.
+* 0.6c9: 0 6c9.
+* 0.6c7: 0 6c7.
+* 0.6c6: 0 6c6.
+* 0.6c5: 0 6c5.
+* 0.6c4: 0 6c4.
+* 0.6c3: 0 6c3.
+* 0.6c2: 0 6c2.
+* 0.6c1: 0 6c1.
+* 0.6b4: 0 6b4.
+* 0.6b3: 0 6b3.
+* 0.6b2: 0 6b2.
+* 0.6b1: 0 6b1.
+* 0.6a11: 0 6a11.
+* 0.6a10: 0 6a10.
+* 0.6a9: 0 6a9.
+* 0.6a8: 0 6a8.
+* 0.6a7: 0 6a7.
+* 0.6a6: 0 6a6.
+* 0.6a5: 0 6a5.
+* 0.6a3: 0 6a3.
+* 0.6a2: 0 6a2.
+* 0.6a1: 0 6a1.
+* 0.5a12: 0 5a12.
+* 0.5a11: 0 5a11.
+* 0.5a10: 0 5a10.
+* 0.5a9: 0 5a9.
+* 0.5a8: 0 5a8.
+* 0.5a7: 0 5a7.
+* 0.5a6: 0 5a6.
+* 0.5a5: 0 5a5.
+* 0.5a4: 0 5a4.
+* 0.5a3: 0 5a3.
+* 0.5a2: 0 5a2.
+* 0.5a1: 0 5a1.
+* 0.4a4: 0 4a4.
+* 0.4a3: 0 4a3.
+* 0.4a2: 0 4a2.
+* 0.4a1: 0 4a1.
+* 0.3a4: 0 3a4.
+* 0.3a3: 0 3a3.
+* 0.3a2: 0 3a2.
+* 0.3a1: 0 3a1.
+
+v50.3.2
+
+* Documentation changes::
+* Misc::
+
+v50.3.1
+
+* Documentation changes: Documentation changes<2>.
+* Misc: Misc<2>.
+
+v50.3.0
+
+* Changes::
+
+v50.2.0
+
+* Changes: Changes<2>.
+
+v50.1.0
+
+* Changes: Changes<3>.
+
+v50.0.3
+
+* Misc: Misc<3>.
+
+v50.0.2
+
+* Misc: Misc<4>.
+
+v50.0.1
+
+* Misc: Misc<5>.
+
+v50.0.0
+
+* Breaking Changes::
+* Changes: Changes<4>.
+
+v49.6.0
+
+* Changes: Changes<5>.
+
+v49.5.0
+
+* Changes: Changes<6>.
+
+v49.4.0
+
+* Changes: Changes<7>.
+
+v49.3.2
+
+* Documentation changes: Documentation changes<3>.
+* Misc: Misc<6>.
+
+v49.3.1
+
+* Changes: Changes<8>.
+
+v49.3.0
+
+* Changes: Changes<9>.
+
+v49.2.1
+
+* Misc: Misc<7>.
+
+v49.2.0
+
+* Changes: Changes<10>.
+
+v49.1.3
+
+* Misc: Misc<8>.
+
+v49.1.2
+
+* Changes: Changes<11>.
+
+v49.1.1
+
+* Misc: Misc<9>.
+
+v49.0.1
+
+* Misc: Misc<10>.
+
+v49.1.0
+
+* Changes: Changes<12>.
+
+v49.0.0
+
+* Breaking Changes: Breaking Changes<2>.
+* Changes: Changes<13>.
+* Misc: Misc<11>.
+
+v48.0.0
+
+* Breaking Changes: Breaking Changes<3>.
+
+v47.3.2
+
+* Misc: Misc<12>.
+
+v47.3.1
+
+* Misc: Misc<13>.
+
+v47.3.0
+
+* Changes: Changes<14>.
+* Misc: Misc<14>.
+
+v47.2.0
+
+* Changes: Changes<15>.
+
+v47.1.1
+
+* Documentation changes: Documentation changes<4>.
+* Incorporate changes from v44.1.1;: Incorporate changes from v44 1 1.
+
+v44.1.1
+
+* Misc: Misc<15>.
+
+v47.1.0
+
+* Changes: Changes<16>.
+
+v47.0.0
+
+* Breaking Changes: Breaking Changes<4>.
+* Changes: Changes<17>.
+
+v46.4.0
+
+* Changes: Changes<18>.
+
+v46.3.0
+
+* Changes: Changes<19>.
+* Misc: Misc<16>.
+
+v46.2.0
+
+* Changes: Changes<20>.
+* Documentation changes: Documentation changes<5>.
+* Misc: Misc<17>.
+
+v46.1.2
+
+* Misc: Misc<18>.
+
+v46.1.0
+
+* Changes: Changes<21>.
+* Incorporate changes from v44.1.0;: Incorporate changes from v44 1 0.
+
+v44.1.0
+
+* Changes: Changes<22>.
+
+v46.0.0
+
+* Breaking Changes: Breaking Changes<5>.
+* Changes: Changes<23>.
+* Documentation changes: Documentation changes<6>.
+* Misc: Misc<19>.
+
+v45.3.0
+
+* Changes: Changes<24>.
+
+v45.2.0
+
+* Changes: Changes<25>.
+* Misc: Misc<20>.
+
+v45.1.0
+
+* Changes: Changes<26>.
+
+v45.0.0
+
+* Breaking Changes: Breaking Changes<6>.
+* Changes: Changes<27>.
+
+v44.0.0
+
+* Breaking Changes: Breaking Changes<7>.
+
+v43.0.0
+
+* Breaking Changes: Breaking Changes<8>.
+* Changes: Changes<28>.
+
+v42.0.2
+
+* Changes: Changes<29>.
+
+v42.0.1
+
+* Changes: Changes<30>.
+
+v42.0.0
+
+* Breaking Changes: Breaking Changes<9>.
+* Changes: Changes<31>.
+
+v41.6.0
+
+* Changes: Changes<32>.
+
+v41.5.1
+
+* Changes: Changes<33>.
+
+v41.5.0
+
+* Changes: Changes<34>.
+* Documentation changes: Documentation changes<7>.
+* Misc: Misc<21>.
+
+v41.4.0
+
+* Changes: Changes<35>.
+
+v41.3.0
+
+* Changes: Changes<36>.
+* Misc: Misc<22>.
+
+v41.2.0
+
+* Changes: Changes<37>.
+* Misc: Misc<23>.
+
+v41.1.0
+
+* Misc: Misc<24>.
+* Documentation changes: Documentation changes<8>.
+
+v41.0.1
+
+* Changes: Changes<38>.
+
+v41.0.0
+
+* Breaking Changes: Breaking Changes<10>.
+
+v40.9.0
+
+* Changes: Changes<39>.
+* Documentation changes: Documentation changes<9>.
+
+v40.8.0
+
+* Changes: Changes<40>.
+
+v40.7.3
+
+* Changes: Changes<41>.
+
+v40.7.2
+
+* Changes: Changes<42>.
+
+v40.7.1
+
+* Changes: Changes<43>.
+
+v40.7.0
+
+* Breaking Changes: Breaking Changes<11>.
+* Changes: Changes<44>.
+
+v40.6.3
+
+* Changes: Changes<45>.
+
+v40.6.2
+
+* Changes: Changes<46>.
+
+v40.6.1
+
+* Changes: Changes<47>.
+
+v40.6.0
+
+* Deprecations::
+* Changes: Changes<48>.
+* Documentation changes: Documentation changes<10>.
+* Misc: Misc<25>.
+
+v40.5.0
+
+* Changes: Changes<49>.
+* Documentation changes: Documentation changes<11>.
+
+v40.4.3
+
+* Changes: Changes<50>.
+
+v40.4.2
+
+* Misc: Misc<26>.
+
+v40.4.1
+
+* Changes: Changes<51>.
+
+v40.4.0
+
+* Changes: Changes<52>.
+
+v40.3.0
+
+* Changes: Changes<53>.
+* Misc: Misc<27>.
+
+v40.2.0
+
+* Changes: Changes<54>.
+
+v40.1.1
+
+* Changes: Changes<55>.
+
+v40.1.0
+
+* Changes: Changes<56>.
+* Misc: Misc<28>.
+
+v40.0.0
+
+* Breaking Changes: Breaking Changes<12>.
+* Changes: Changes<57>.
+* Documentation changes: Documentation changes<12>.
+* Misc: Misc<29>.
+
+v39.2.0
+
+* Changes: Changes<58>.
+* Documentation changes: Documentation changes<13>.
+* Misc: Misc<30>.
+
+1.0
+
+* Backward-Incompatible Changes::
+
+0.6.3
+
+* setuptools::
+* bootstrapping::
+
+0.6.2
+
+* setuptools: setuptools<2>.
+* bootstrapping: bootstrapping<2>.
+
+0.6.1
+
+* setuptools: setuptools<3>.
+* bootstrapping: bootstrapping<3>.
+
+0.6
+
+* setuptools: setuptools<4>.
+* pkg_resources::
+* easy_install::
+
+
+
+File: setuptools.info, Node: Building and Distributing Packages with Setuptools, Next: Build System Support, Prev: Top, Up: Top
+
+1 Building and Distributing Packages with Setuptools
+****************************************************
+
+‘Setuptools’ is a collection of enhancements to the Python ‘distutils’
+that allow developers to more easily build and distribute Python
+packages, especially ones that have dependencies on other packages.
+
+Packages built and distributed using ‘setuptools’ look to the user like
+ordinary Python packages based on the ‘distutils’.
+
+* Menu:
+
+* Transition to PEP517::
+
+
+File: setuptools.info, Node: Transition to PEP517, Up: Building and Distributing Packages with Setuptools
+
+1.1 Transition to PEP517
+========================
+
+Since setuptools no longer serves as the default build tool, one must
+explicitly opt in (by providing a ‘pyproject.toml’ file) to use this
+library. The user facing part is provided by tools such as pip and
+backend interface is described *note in this document: 5. The
+quickstart provides an overview of the new workflow.
+
+* Menu:
+
+* setuptools Quickstart::
+* Package Discovery and Namespace Package::
+* Entry Points::
+* Dependencies Management in Setuptools::
+* Data Files Support::
+* “Development Mode”::
+* Tagging and “Daily Build” or “Snapshot” Releases::
+* Generating Source Distributions::
+* Distributing Extensions compiled with Cython::
+* Specifying Your Project’s Version::
+* Creating distutils Extensions::
+* Configuring setup() using setup.cfg files: Configuring setup using setup cfg files.
+* New and Changed setup() Keywords: New and Changed setup Keywords.
+* Command Reference::
+* Using setuptools to package and distribute your project::
+* Automatic Resource Extraction::
+* Defining Additional Metadata::
+* Setting the zip_safe flag::
+
+
+File: setuptools.info, Node: setuptools Quickstart, Next: Package Discovery and Namespace Package, Up: Transition to PEP517
+
+1.1.1 ‘setuptools’ Quickstart
+-----------------------------
+
+* Menu:
+
+* Installation::
+* Python packaging at a glance::
+* Basic Use::
+* Automatic package discovery::
+* Entry points and automatic script creation::
+* Dependency management::
+* Including Data Files::
+* Development mode::
+* Uploading your package to PyPI::
+* Transitioning from setup.py to setup.cfg: Transitioning from setup py to setup cfg.
+* Resources on Python packaging::
+
+
+File: setuptools.info, Node: Installation, Next: Python packaging at a glance, Up: setuptools Quickstart
+
+1.1.1.1 Installation
+....................
+
+To install the latest version of setuptools, use:
+
+ pip install --upgrade setuptools
+
+
+File: setuptools.info, Node: Python packaging at a glance, Next: Basic Use, Prev: Installation, Up: setuptools Quickstart
+
+1.1.1.2 Python packaging at a glance
+....................................
+
+The landscape of Python packaging is shifting and ‘Setuptools’ has
+evolved to only provide backend support, no longer being the de-facto
+packaging tool in the market. All python package must provide a
+‘pyproject.toml’ and specify the backend (build system) it wants to use.
+The distribution can then be generated with whatever tools that provides
+a ‘build sdist’-alike functionality. While this may appear cumbersome,
+given the added pieces, it in fact tremendously enhances the portability
+of your package. The change is driven under 517(1). To learn more
+about Python packaging in general, navigate to the bottom(2) of this
+page.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0517#build-requirements
+
+ (2) Resourcesonpythonpackaging
+
+
+File: setuptools.info, Node: Basic Use, Next: Automatic package discovery, Prev: Python packaging at a glance, Up: setuptools Quickstart
+
+1.1.1.3 Basic Use
+.................
+
+For basic use of setuptools, you will need a ‘pyproject.toml’ with the
+exact following info, which declares you want to use ‘setuptools’ to
+package your project:
+
+ [build-system]
+ requires = ["setuptools", "wheel"]
+ build-backend = "setuptools.build_meta"
+
+Then, you will need a ‘setup.cfg’ to specify your package information,
+such as metadata, contents, dependencies, etc. Here we demonstrate the
+minimum
+
+ [metadata]
+ name = "mypackage"
+ version = 0.0.1
+
+ [options]
+ packages = "mypackage"
+ install_requires =
+ requests
+ importlib; python_version == "2.6"
+
+This is what your project would look like:
+
+ ~/mypackage/
+ pyproject.toml
+ setup.cfg
+ mypackage/__init__.py
+
+Then, you need an installer, such as pep517(1) which you can obtain via
+‘pip install pep517’. After downloading it, invoke the installer:
+
+ python -m pep517.build
+
+You now have your distribution ready (e.g. a ‘tar.gz’ file and a ‘.whl’
+file in the ‘dist’ directory), which you can upload to PyPI!
+
+Of course, before you release your project to PyPI, you’ll want to add a
+bit more information to your setup script to help people find or learn
+about your project. And maybe your project will have grown by then to
+include a few dependencies, and perhaps some data files and scripts. In
+the next few section, we will walk through those additional but
+essential information you need to specify to properly package your
+project.
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/pep517/
+
+
+File: setuptools.info, Node: Automatic package discovery, Next: Entry points and automatic script creation, Prev: Basic Use, Up: setuptools Quickstart
+
+1.1.1.4 Automatic package discovery
+...................................
+
+For simple projects, it’s usually easy enough to manually add packages
+to the ‘packages’ keyword in ‘setup.cfg’. However, for very large
+projects , it can be a big burden to keep the package list updated.
+‘setuptools’ therefore provides two convenient tools to ease the burden:
+‘find:’ and ‘find_namespace:’. To use it in your project:
+
+ [options]
+ packages = find:
+
+ [options.packages.find] #optional
+ include=pkg1, pkg2
+ exclude=pk3, pk4
+
+When you pass the above information, alongside other necessary ones,
+‘setuptools’ walks through the directory specified in ‘where’ (omitted
+here as the package reside in current directory) and filters the
+packages it can find following the ‘include’ (default to none), then
+remove those that match the ‘exclude’ and return a list of Python
+packages. Note that each entry in the ‘[options.packages.find]’ is
+optional. The above setup also allows you to adopt a ‘src/’ layout.
+For more details and advanced use, go to *note Package Discovery and
+Namespace Package: c.
+
+
+File: setuptools.info, Node: Entry points and automatic script creation, Next: Dependency management, Prev: Automatic package discovery, Up: setuptools Quickstart
+
+1.1.1.5 Entry points and automatic script creation
+..................................................
+
+Setuptools support automatic creation of scripts upon installation, that
+runs code within your package if you specify them with the
+‘entry_points’ keyword. This is what allows you to run commands like
+‘pip install’ instead of having to type ‘python -m pip install’. To
+accomplish this, add the entry_points keyword in your ‘setup.cfg’:
+
+ [options.entry_points]
+ console_scripts =
+ main = mypkg:some_func
+
+When this project is installed, a ‘main’ script will be installed and
+will invoke the ‘some_func’ in the ‘__init__.py’ file when called by the
+user. For detailed usage, including managing the additional or optional
+dependencies, go to *note Entry Points: e.
+
+
+File: setuptools.info, Node: Dependency management, Next: Including Data Files, Prev: Entry points and automatic script creation, Up: setuptools Quickstart
+
+1.1.1.6 Dependency management
+.............................
+
+‘setuptools’ supports automatically installing dependencies when a
+package is installed. The simplest way to include requirement
+specifiers is to use the ‘install_requires’ argument to ‘setup.cfg’. It
+takes a string or list of strings containing requirement specifiers (A
+version specifier is one of the operators <, >, <=, >=, == or !=,
+followed by a version identifier):
+
+ [options]
+ install_requires =
+ docutils >= 0.3
+ requests <= 0.4
+
+When your project is installed, all of the dependencies not already
+installed will be located (via PyPI), downloaded, built (if necessary),
+and installed. This, of course, is a simplified scenarios.
+‘setuptools’ also provide additional keywords such as ‘setup_requires’
+that allows you to install dependencies before running the script, and
+‘extras_requires’ that take care of those needed by automatically
+generated scripts. It also provides mechanisms to handle dependencies
+that are not in PyPI. For more advanced use, see *note Dependencies
+Management in Setuptools: 10.
+
+
+File: setuptools.info, Node: Including Data Files, Next: Development mode, Prev: Dependency management, Up: setuptools Quickstart
+
+1.1.1.7 Including Data Files
+............................
+
+The distutils have traditionally allowed installation of “data files”,
+which are placed in a platform-specific location. Setuptools offers
+three ways to specify data files to be included in your packages. For
+the simpliest use, you can simply use the ‘include_package_data’
+keyword:
+
+ [options]
+ include_package_data = True
+
+This tells setuptools to install any data files it finds in your
+packages. The data files must be specified via the distutils’
+‘MANIFEST.in’ file. For more details, see *note Data Files Support: 13.
+
+
+File: setuptools.info, Node: Development mode, Next: Uploading your package to PyPI, Prev: Including Data Files, Up: setuptools Quickstart
+
+1.1.1.8 Development mode
+........................
+
+‘setuptools’ allows you to install a package without copying any files
+to your interpretor directory (e.g. the ‘site-packages’ directory).
+This allows you to modify your source code and have the changes take
+effect without you having to rebuild and reinstall. This is currently
+incompatible with PEP 517 and therefore it requires a ‘setup.py’ script
+with the following content:
+
+ import setuptools
+ setuptools.setup()
+
+Then:
+
+ pip install --editable .
+
+This creates a link file in your interpretor site package directory
+which associate with your source code. For more information, see: (WIP)
+
+
+File: setuptools.info, Node: Uploading your package to PyPI, Next: Transitioning from setup py to setup cfg, Prev: Development mode, Up: setuptools Quickstart
+
+1.1.1.9 Uploading your package to PyPI
+......................................
+
+After generating the distribution files, next step would be to upload
+your distribution so others can use it. This functionality is provided
+by twine(1) and we will only demonstrate the basic use here.
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/twine/
+
+
+File: setuptools.info, Node: Transitioning from setup py to setup cfg, Next: Resources on Python packaging, Prev: Uploading your package to PyPI, Up: setuptools Quickstart
+
+1.1.1.10 Transitioning from ‘setup.py’ to ‘setup.cfg’
+.....................................................
+
+To avoid executing arbitary scripts and boilerplate code, we are
+transitioning into a full-fledged ‘setup.cfg’ to declare your package
+information instead of running ‘setup()’. This inevitably brings
+challenges due to a different syntax. Here we provide a quick guide to
+understanding how ‘setup.cfg’ is parsed by ‘setuptool’ to ease the pain
+of transition.
+
+
+File: setuptools.info, Node: Resources on Python packaging, Prev: Transitioning from setup py to setup cfg, Up: setuptools Quickstart
+
+1.1.1.11 Resources on Python packaging
+......................................
+
+Packaging in Python is hard. Here we provide a list of links for those
+that want to learn more.
+
+
+File: setuptools.info, Node: Package Discovery and Namespace Package, Next: Entry Points, Prev: setuptools Quickstart, Up: Transition to PEP517
+
+1.1.2 Package Discovery and Namespace Package
+---------------------------------------------
+
+ Note: a full specification for the keyword supplied to ‘setup.cfg’
+ or ‘setup.py’ can be found at *note keywords reference: 1a.
+
+ Note: the examples provided here are only to demonstrate the
+ functionality introduced. More metadata and options arguments need
+ to be supplied if you want to replicate them on your system. If
+ you are completely new to setuptools, the *note quickstart section:
+ 6. is a good place to start.
+
+‘Setuptools’ provide powerful tools to handle package discovery,
+including support for namespace package. Normally, you would specify
+the package to be included manually in the following manner:
+
+ [options]
+ #...
+ packages =
+ mypkg1
+ mypkg2
+
+ setup(
+ #...
+ packages = ['mypkg1', 'mypkg2']
+ )
+
+This can get tiresome reallly quickly. To speed things up, we introduce
+two functions provided by setuptools:
+
+ [options]
+ packages = find:
+ #or
+ packages = find_namespace:
+
+ from setuptools import find_packages
+ #or
+ from setuptools import find_namespace_packages
+
+* Menu:
+
+* Using find; or find_packages: Using find or find_packages.
+* Using find_namespace; or find_namespace_packages: Using find_namespace or find_namespace_packages.
+* Legacy Namespace Packages::
+
+
+File: setuptools.info, Node: Using find or find_packages, Next: Using find_namespace or find_namespace_packages, Up: Package Discovery and Namespace Package
+
+1.1.2.1 Using ‘find:’ or ‘find_packages’
+........................................
+
+Let’s start with the first tool. ‘find:’ (‘find_packages’) takes a
+source directory and two lists of package name patterns to exclude and
+include, and then return a list of ‘str’ representing the packages it
+could find. To use it, consider the following directory
+
+ mypkg/
+ src/
+ pkg1/__init__.py
+ pkg2/__init__.py
+ additional/__init__.py
+
+ setup.cfg #or setup.py
+
+To have your setup.cfg or setup.py to automatically include packages
+found in ‘src’ that starts with the name ‘pkg’ and not ‘additional’:
+
+ [options]
+ packages = find:
+ package_dir =
+ =src
+
+ [options.packages.find]
+ where = src
+ include = pkg*
+ exclude = additional
+
+ setup(
+ #...
+ packages = find_packages(
+ where = 'src',
+ include = ['pkg*',],
+ exclude = ['additional',]
+ ),
+ package_dir = {"":"src"}
+ #...
+ )
+
+
+File: setuptools.info, Node: Using find_namespace or find_namespace_packages, Next: Legacy Namespace Packages, Prev: Using find or find_packages, Up: Package Discovery and Namespace Package
+
+1.1.2.2 Using ‘find_namespace:’ or ‘find_namespace_packages’
+............................................................
+
+‘setuptools’ provides the ‘find_namespace:’ (‘find_namespace_packages’)
+which behaves similarly to ‘find:’ but works with namespace package.
+Before diving in, it is important to have a good understanding of what
+namespace packages are. Here is a quick recap:
+
+Suppose you have two packages named as follows:
+
+ /Users/Desktop/timmins/foo/__init__.py
+ /Library/timmins/bar/__init__.py
+
+If both ‘Desktop’ and ‘Library’ are on your ‘PYTHONPATH’, then a
+namespace package called ‘timmins’ will be created automatically for you
+when you invoke the import mechanism, allowing you to accomplish the
+following
+
+ >>> import timmins.foo
+ >>> import timmins.bar
+
+as if there is only one ‘timmins’ on your system. The two packages can
+then be distributed separately and installed individually without
+affecting the other one. Suppose you are packaging the ‘foo’ part:
+
+ foo/
+ src/
+ timmins/foo/__init__.py
+ setup.cfg # or setup.py
+
+and you want the ‘foo’ to be automatically included, ‘find:’ won’t work
+because timmins doesn’t contain ‘__init__.py’ directly, instead, you
+have to use ‘find_namespace:’:
+
+ [options]
+ package_dir =
+ =src
+ packages = find_namespace:
+
+ [options.packages.find_namespace]
+ where = src
+
+When you install the zipped distribution, ‘timmins.foo’ would become
+available to your interpreter.
+
+You can think of ‘find_namespace:’ as identical to ‘find:’ except it
+would count a directory as a package even if it doesn’t contain
+‘__init__.py’ file directly. As a result, this creates an interesting
+side effect. If you organize your package like this:
+
+ foo/
+ timmins/
+ foo/__init__.py
+ setup.cfg # or setup.py
+ tests/
+ test_foo/__init__.py
+
+a naive ‘find_namespace:’ would include tests as part of your package to
+be installed. A simple way to fix it is to adopt the aforementioned
+‘src’ layout.
+
+
+File: setuptools.info, Node: Legacy Namespace Packages, Prev: Using find_namespace or find_namespace_packages, Up: Package Discovery and Namespace Package
+
+1.1.2.3 Legacy Namespace Packages
+.................................
+
+The fact you can create namespace package so effortlessly above is
+credited to PEP 420(1). It use to be more cumbersome to accomplish the
+same result. Historically, there were two methods to create namespace
+packages. One is the ‘pkg_resources’ style supported by ‘setuptools’
+and the other one being ‘pkgutils’ style offered by ‘pkgutils’ module in
+Python. Both are now considered deprecated despite the fact they still
+linger in many existing packages. These two differ in many subtle yet
+significant aspects and you can find out more on Python packaging user
+guide(2)
+
+* Menu:
+
+* pkg_resource style namespace package::
+* pkgutil style namespace package::
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0420/
+
+ (2) https://packaging.python.org/guides/packaging-namespace-packages/
+
+
+File: setuptools.info, Node: pkg_resource style namespace package, Next: pkgutil style namespace package, Up: Legacy Namespace Packages
+
+1.1.2.4 ‘pkg_resource’ style namespace package
+..............................................
+
+This is the method ‘setuptools’ directly supports. Starting with the
+same layout, there are two pieces you need to add to it. First, an
+‘__init__.py’ file directly under your namespace package directory that
+contains the following:
+
+ __import__("pkg_resources").declare_namespace(__name__)
+
+And the ‘namespace_packages’ keyword in your ‘setup.cfg’ or ‘setup.py’:
+
+ [options]
+ namespace_packages = timmins
+
+ setup(
+ # ...
+ namespace_packages = ['timmins']
+ )
+
+And your directory should look like this
+
+ /foo/
+ src/
+ timmins/
+ __init__.py
+ foo/__init__.py
+ setup.cfg #or setup.py
+
+Repeat the same for other packages and you can achieve the same result
+as the previous section.
+
+
+File: setuptools.info, Node: pkgutil style namespace package, Prev: pkg_resource style namespace package, Up: Legacy Namespace Packages
+
+1.1.2.5 ‘pkgutil’ style namespace package
+.........................................
+
+This method is almost identical to the ‘pkg_resource’ except that the
+‘namespace_packages’ declaration is omitted and the ‘__init__.py’ file
+contains the following:
+
+ __path__ = __import__('pkgutil').extend_path(__path__, __name__)
+
+The project layout remains the same and ‘setup.cfg’ remains the same.
+
+
+File: setuptools.info, Node: Entry Points, Next: Dependencies Management in Setuptools, Prev: Package Discovery and Namespace Package, Up: Transition to PEP517
+
+1.1.3 Entry Points
+------------------
+
+Packages may provide commands to be run at the console (console
+scripts), such as the ‘pip’ command. These commands are defined for a
+package as a specific kind of entry point in the ‘setup.cfg’ or
+‘setup.py’.
+
+* Menu:
+
+* Console Scripts::
+* Advertising Behavior::
+* Dependency Management::
+
+
+File: setuptools.info, Node: Console Scripts, Next: Advertising Behavior, Up: Entry Points
+
+1.1.3.1 Console Scripts
+.......................
+
+First consider an example without entry points. Imagine a package
+defined thus:
+
+ timmins/
+ timmins/__init__.py
+ timmins/__main__.py
+ setup.cfg # or setup.py
+ #other necessary files
+
+with ‘__init__.py’ as:
+
+ def helloworld():
+ print("Hello world")
+
+and ‘__main__.py’ providing a hook:
+
+ from . import hello_world
+ if __name__ == '__main__':
+ hello_world()
+
+After installing the package, the function may be invoked through the
+runpy(1) module:
+
+ python -m timmins
+
+Adding a console script entry point allows the package to define a
+user-friendly name for installers of the package to execute. Installers
+like pip will create wrapper scripts to execute a function. In the
+above example, to create a command ‘hello-world’ that invokes
+‘timmins.hello_world’, add a console script entry point to ‘setup.cfg’:
+
+ [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.
+
+The syntax for entry points is specified as follows:
+
+ <name> = [<package>.[<subpackage>.]]<module>[:<object>.<object>]
+
+where ‘name’ is the name for the script you want to create, the left
+hand side of ‘:’ is the module that contains your function and the right
+hand side is the object you want to invoke (e.g. a function).
+
+In addition to ‘console_scripts’, Setuptools supports ‘gui_scripts’,
+which will launch a GUI application without running in a terminal
+window.
+
+ ---------- Footnotes ----------
+
+ (1) https://docs.python.org/3/library/runpy.html
+
+
+File: setuptools.info, Node: Advertising Behavior, Next: Dependency Management, Prev: Console Scripts, Up: Entry Points
+
+1.1.3.2 Advertising Behavior
+............................
+
+Console scripts are one use of the more general concept of entry points.
+Entry points more generally allow a packager to advertise behavior for
+discovery by other libraries and applications. This feature enables
+“plug-in”-like functionality, where one library solicits entry points
+and any number of other libraries provide those entry points.
+
+A good example of this plug-in behavior can be seen in pytest
+plugins(1), where pytest is a test framework that allows other libraries
+to extend or modify its functionality through the ‘pytest11’ entry
+point.
+
+The console scripts work similarly, where libraries advertise their
+commands and tools like ‘pip’ create wrapper scripts that invoke those
+commands.
+
+For a project wishing to solicit entry points, Setuptools recommends the
+importlib.metadata(2) module (part of stdlib since Python 3.8) or its
+backport, importlib_metadata(3).
+
+For example, to find the console script entry points from the example
+above:
+
+ >>> from importlib import metadata
+ >>> eps = metadata.entry_points()['console_scripts']
+
+‘eps’ is now a list of ‘EntryPoint’ objects, one of which corresponds to
+the ‘hello-world = timmins:hello_world’ defined above. Each
+‘EntryPoint’ contains the ‘name’, ‘group’, and ‘value’. It also
+supplies a ‘.load()’ method to import and load that entry point (module
+or object).
+
+ [options.entry_points]
+ my.plugins =
+ hello-world = timmins:hello_world
+
+Then, a different project wishing to load ‘my.plugins’ plugins could run
+the following routine to load (and invoke) such plugins:
+
+ >>> from importlib import metadata
+ >>> eps = metadata.entry_points()['my.plugins']
+ >>> for ep in eps:
+ ... plugin = ep.load()
+ ... plugin()
+
+The project soliciting the entry points needs not to have any dependency
+or prior knowledge about the libraries implementing the entry points,
+and downstream users are able to compose functionality by pulling
+together libraries implementing the entry points.
+
+ ---------- Footnotes ----------
+
+ (1) https://docs.pytest.org/en/latest/writing_plugins.html
+
+ (2) https://docs.python.org/3/library/importlib.metadata.html
+
+ (3) https://pypi.org/project/importlib_metadata
+
+
+File: setuptools.info, Node: Dependency Management, Prev: Advertising Behavior, Up: Entry Points
+
+1.1.3.3 Dependency Management
+.............................
+
+Some entry points may require additional dependencies to properly
+function. For such an entry point, declare in square brakets any number
+of dependency ‘extras’ following the entry point definition. Such entry
+points will only be viable if their extras were declared and installed.
+See the *note guide on dependencies management: 10. for more information
+on defining extra requirements. Consider from the above example:
+
+ [options.entry_points]
+ console_scripts =
+ hello-world = timmins:hello_world [pretty-printer]
+
+In this case, the ‘hello-world’ script is only viable if the
+‘pretty-printer’ extra is indicated, and so a plugin host might exclude
+that entry point (i.e. not install a console script) if the relevant
+extra dependencies are not installed.
+
+
+File: setuptools.info, Node: Dependencies Management in Setuptools, Next: Data Files Support, Prev: Entry Points, Up: Transition to PEP517
+
+1.1.4 Dependencies Management in Setuptools
+-------------------------------------------
+
+There are three types of dependency styles offered by setuptools: 1)
+build system requirement, required dependency and 3) optional
+dependency.
+
+ Note: Packages that are added to dependency can be optionally
+ specified with the version by following PEP 440(1)
+
+* Menu:
+
+* Build system requirement::
+* Declaring required dependency::
+* Optional dependencies::
+* Python requirement::
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0440/
+
+
+File: setuptools.info, Node: Build system requirement, Next: Declaring required dependency, Up: Dependencies Management in Setuptools
+
+1.1.4.1 Build system requirement
+................................
+
+* Menu:
+
+* Package requirement::
+
+
+File: setuptools.info, Node: Package requirement, Up: Build system requirement
+
+1.1.4.2 Package requirement
+...........................
+
+After organizing all the scripts and files and getting ready for
+packaging, there needs to be a way to tell Python what programs it need
+to actually do the packgaging (in our case, ‘setuptools’ of course).
+Usually, you also need the ‘wheel’ package as well since it is
+recommended that you upload a ‘.whl’ file to PyPI alongside your
+‘.tar.gz’ file. Unlike the other two types of dependency keyword, this
+one is specified in your ‘pyproject.toml’ file (if you have forgot what
+this is, go to *note setuptools Quickstart: 6. or (WIP)):
+
+ [build-system]
+ requires = ["setuptools", "wheel"]
+ #...
+
+ Note: This used to be accomplished with the ‘setup_requires’
+ keyword but is now considered deprecated in favor of the PEP 517
+ style described above. To peek into how this legacy keyword is
+ used, consult our *note guide on deprecated practice (WIP): 2a.
+
+
+File: setuptools.info, Node: Declaring required dependency, Next: Optional dependencies, Prev: Build system requirement, Up: Dependencies Management in Setuptools
+
+1.1.4.3 Declaring required dependency
+.....................................
+
+This is where a package declares its core dependencies, without which it
+won’t be able to run. ‘setuptools’ support automatically download and
+install these dependencies when the package is installed. Although
+there is more finess to it, let’s start with a simple example.
+
+ [options]
+ #...
+ install_requires =
+ docutils
+ BazSpam ==1.1
+
+ setup(
+ #...,
+ install_requires = [
+ 'docutils',
+ 'BazSpam ==1.1'
+ ]
+ )
+
+When your project is installed (e.g. using pip), all of the
+dependencies not already installed will be located (via PyPI),
+downloaded, built (if necessary), and installed and 2) Any scripts in
+your project will be installed with wrappers that verify the
+availability of the specified dependencies at runtime.
+
+* Menu:
+
+* Platform specific dependencies::
+* Dependencies that aren’t in PyPI::
+
+
+File: setuptools.info, Node: Platform specific dependencies, Next: Dependencies that aren’t in PyPI, Up: Declaring required dependency
+
+1.1.4.4 Platform specific dependencies
+......................................
+
+Setuptools offer the capability to evaluate certain conditions before
+blindly installing everything listed in ‘install_requires’. This is
+great for platform specific dependencies. For example, the ‘enum’
+package was added in Python 3.4, therefore, package that depends on it
+can elect to install it only when the Python version is older than 3.4.
+To accomplish this
+
+ [options]
+ #...
+ install_requires =
+ enum34;python_version<'3.4'
+
+ setup(
+ #...
+ install_requires=[
+ "enum34;python_version<'3.4'",]
+ )
+
+Similarly, if you also wish to declare ‘pywin32’ with a minimal version
+of 1.0 and only install it if the user is using a Windows operating
+system:
+
+ [options]
+ #...
+ install_requires =
+ enum34;python_version<'3.4'
+ pywin32 >= 1.0;platform_system=='Windows'
+
+ setup(
+ #...
+ install_requires=[
+ "enum34;python_version<'3.4'",
+ "pywin32 >= 1.0;platform_system=='Windows'"
+ ]
+ )
+
+The environmental markers that may be used for testing platform types
+are detailed in PEP 508(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0508/
+
+
+File: setuptools.info, Node: Dependencies that aren’t in PyPI, Prev: Platform specific dependencies, Up: Declaring required dependency
+
+1.1.4.5 Dependencies that aren’t in PyPI
+........................................
+
+ Warning: Dependency links support has been dropped by pip starting
+ with version 19.0 (released 2019-01-22).
+
+If your project depends on packages that don’t exist on PyPI, you may
+still be able to depend on them, as long as they are available for
+download as:
+
+ - an egg, in the standard distutils ‘sdist’ format,
+
+ - a single ‘.py’ file, or
+
+ - a VCS repository (Subversion, Mercurial, or Git).
+
+You just need to add some URLs to the ‘dependency_links’ argument to
+‘setup()’.
+
+The URLs must be either:
+
+ 1. direct download URLs,
+
+ 2. the URLs of web pages that contain direct download links, or
+
+ 3. the repository’s URL
+
+In general, it’s better to link to web pages, because it is usually less
+complex to update a web page than to release a new version of your
+project. You can also use a SourceForge ‘showfiles.php’ link in the
+case where a package you depend on is distributed via SourceForge.
+
+If you depend on a package that’s distributed as a single ‘.py’ file,
+you must include an ‘"#egg=project-version"’ suffix to the URL, to give
+a project name and version number. (Be sure to escape any dashes in the
+name or version by replacing them with underscores.) EasyInstall will
+recognize this suffix and automatically create a trivial ‘setup.py’ to
+wrap the single ‘.py’ file as an egg.
+
+In the case of a VCS checkout, you should also append
+‘#egg=project-version’ in order to identify for what package that
+checkout should be used. You can append ‘@REV’ to the URL’s path
+(before the fragment) to specify a revision. Additionally, you can also
+force the VCS being used by prepending the URL with a certain prefix.
+Currently available are:
+
+ - ‘svn+URL’ for Subversion,
+
+ - ‘git+URL’ for Git, and
+
+ - ‘hg+URL’ for Mercurial
+
+A more complete example would be:
+
+ ‘vcs+proto://host/path@revision#egg=project-version’
+
+Be careful with the version. It should match the one inside the project
+files. If you want to disregard the version, you have to omit it both
+in the ‘requires’ and in the URL’s fragment.
+
+This will do a checkout (or a clone, in Git and Mercurial parlance) to a
+temporary folder and run ‘setup.py bdist_egg’.
+
+The ‘dependency_links’ option takes the form of a list of URL strings.
+For example, this will cause a search of the specified page for eggs or
+source distributions, if the package’s dependencies aren’t already
+installed:
+
+ [options]
+ #...
+ dependency_links = http://peak.telecommunity.com/snapshots/
+
+ setup(
+ #...
+ dependency_links=[
+ "http://peak.telecommunity.com/snapshots/"
+ ],
+ )
+
+
+File: setuptools.info, Node: Optional dependencies, Next: Python requirement, Prev: Declaring required dependency, Up: Dependencies Management in Setuptools
+
+1.1.4.6 Optional dependencies
+.............................
+
+Setuptools allows you to declare dependencies that only get installed
+under specific circumstances. These dependencies are specified with
+‘extras_require’ keyword and are only installed if another package
+depends on it (either directly or indirectly) This makes it convenient
+to declare dependencies for ancillary functions such as “tests” and
+“docs”.
+
+ Note: ‘tests_require’ is now deprecated
+
+For example, Package-A offers optional PDF support and requires two
+other dependencies for it to work:
+
+ [metadata]
+ name = Package-A
+
+ [options.extras_require]
+ PDF = ReportLab>=1.2; RXP
+
+ setup(
+ name="Project-A",
+ #...
+ extras_require={
+ "PDF": ["ReportLab>=1.2", "RXP"],
+ }
+ )
+
+The name ‘PDF’ is an arbitary identifier of such a list of dependencies,
+to which other components can refer and have them installed. There are
+two common use cases.
+
+First is the console_scripts entry point:
+
+ [metadata]
+ name = Project A
+ #...
+
+ [options]
+ #...
+ entry_points=
+ [console_scripts]
+ rst2pdf = project_a.tools.pdfgen [PDF]
+ rst2html = project_a.tools.htmlgen
+
+ setup(
+ name = "Project-A"
+ #...,
+ entry_points={
+ "console_scripts": [
+ "rst2pdf = project_a.tools.pdfgen [PDF]",
+ "rst2html = project_a.tools.htmlgen",
+ ],
+ }
+ )
+
+When the script ‘rst2pdf’ is run, it will trigger the installation of
+the two dependencies ‘PDF’ maps to.
+
+The second use case is that other package can use this “extra” for their
+own dependencies. For example, if “Project-B” needs “project A” with
+PDF support installed, it might declare the dependency like this:
+
+ [metadata]
+ name = Project-B
+ #...
+
+ [options]
+ #...
+ install_requires =
+ Project-A[PDF]
+
+ setup(
+ name="Project-B",
+ install_requires=["Project-A[PDF]"],
+ ...
+ )
+
+This will cause ReportLab to be installed along with project A, if
+project B is installed – even if project A was already installed. In
+this way, a project can encapsulate groups of optional “downstream
+dependencies” under a feature name, so that packages that depend on it
+don’t have to know what the downstream dependencies are. If a later
+version of Project A builds in PDF support and no longer needs
+ReportLab, or if it ends up needing other dependencies besides ReportLab
+in order to provide PDF support, Project B’s setup information does not
+need to change, but the right packages will still be installed if
+needed.
+
+ Note: Best practice: if a project ends up not needing any other
+ packages to support a feature, it should keep an empty requirements
+ list for that feature in its ‘extras_require’ argument, so that
+ packages depending on that feature don’t break (due to an invalid
+ feature name).
+
+
+File: setuptools.info, Node: Python requirement, Prev: Optional dependencies, Up: Dependencies Management in Setuptools
+
+1.1.4.7 Python requirement
+..........................
+
+In some cases, you might need to specify the minimum required python
+version. This is handled with the ‘python_requires’ keyword supplied to
+‘setup.cfg’ or ‘setup.py’.
+
+Example WIP
+
+
+File: setuptools.info, Node: Data Files Support, Next: “Development Mode”, Prev: Dependencies Management in Setuptools, Up: Transition to PEP517
+
+1.1.5 Data Files Support
+------------------------
+
+The distutils have traditionally allowed installation of “data files”,
+which are placed in a platform-specific location. However, the most
+common use case for data files distributed with a package is for use
+`by' the package, usually by including the data files in the package
+directory.
+
+Setuptools offers three ways to specify data files to be included in
+your packages. First, you can simply use the ‘include_package_data’
+keyword, e.g.:
+
+ from setuptools import setup, find_packages
+ setup(
+ ...
+ include_package_data=True
+ )
+
+This tells setuptools to install any data files it finds in your
+packages. The data files must be specified via the distutils’
+‘MANIFEST.in’ file. (They can also be tracked by a revision control
+system, using an appropriate plugin. See the section below on *note
+Adding Support for Revision Control Systems: 32. for information on how
+to write such plugins.)
+
+If you want finer-grained control over what files are included (for
+example, if you have documentation files in your package directories and
+want to exclude them from installation), then you can also use the
+‘package_data’ keyword, e.g.:
+
+ from setuptools import setup, find_packages
+ setup(
+ ...
+ package_data={
+ # If any package contains *.txt or *.rst files, include them:
+ "": ["*.txt", "*.rst"],
+ # And include any *.msg files found in the "hello" package, too:
+ "hello": ["*.msg"],
+ }
+ )
+
+The ‘package_data’ argument is a dictionary that maps from package names
+to lists of glob patterns. The globs may include subdirectory names, if
+the data files are contained in a subdirectory of the package. For
+example, if the package tree looks like this:
+
+ setup.py
+ src/
+ mypkg/
+ __init__.py
+ mypkg.txt
+ data/
+ somefile.dat
+ otherdata.dat
+
+The setuptools setup file might look like this:
+
+ from setuptools import setup, find_packages
+ setup(
+ ...
+ packages=find_packages("src"), # include all packages under src
+ package_dir={"": "src"}, # tell distutils packages are under src
+
+ package_data={
+ # If any package contains *.txt files, include them:
+ "": ["*.txt"],
+ # And include any *.dat files found in the "data" subdirectory
+ # of the "mypkg" package, also:
+ "mypkg": ["data/*.dat"],
+ }
+ )
+
+Notice that if you list patterns in ‘package_data’ under the empty
+string, these patterns are used to find files in every package, even
+ones that also have their own patterns listed. Thus, in the above
+example, the ‘mypkg.txt’ file gets included even though it’s not listed
+in the patterns for ‘mypkg’.
+
+Also notice that if you use paths, you `must' use a forward slash (‘/’)
+as the path separator, even if you are on Windows. Setuptools
+automatically converts slashes to appropriate platform-specific
+separators at build time.
+
+If datafiles are contained in a subdirectory of a package that isn’t a
+package itself (no ‘__init__.py’), then the subdirectory names (or ‘*’)
+are required in the ‘package_data’ argument (as shown above with
+‘"data/*.dat"’).
+
+When building an ‘sdist’, the datafiles are also drawn from the
+‘package_name.egg-info/SOURCES.txt’ file, so make sure that this is
+removed if the ‘setup.py’ ‘package_data’ list is updated before calling
+‘setup.py’.
+
+(Note: although the ‘package_data’ argument was previously only
+available in ‘setuptools’, it was also added to the Python ‘distutils’
+package as of Python 2.4; there is some documentation for the feature(1)
+available on the python.org website. If using the setuptools-specific
+‘include_package_data’ argument, files specified by ‘package_data’ will
+`not' be automatically added to the manifest unless they are listed in
+the MANIFEST.in file.)
+
+Sometimes, the ‘include_package_data’ or ‘package_data’ options alone
+aren’t sufficient to precisely define what files you want included. For
+example, you may want to include package README files in your revision
+control system and source distributions, but exclude them from being
+installed. So, setuptools offers an ‘exclude_package_data’ option as
+well, that allows you to do things like this:
+
+ from setuptools import setup, find_packages
+ setup(
+ ...
+ packages=find_packages("src"), # include all packages under src
+ package_dir={"": "src"}, # tell distutils packages are under src
+
+ include_package_data=True, # include everything in source control
+
+ # ...but exclude README.txt from all packages
+ exclude_package_data={"": ["README.txt"]},
+ )
+
+The ‘exclude_package_data’ option is a dictionary mapping package names
+to lists of wildcard patterns, just like the ‘package_data’ option.
+And, just as with that option, a key of ‘""’ will apply the given
+pattern(s) to all packages. However, any files that match these
+patterns will be `excluded' from installation, even if they were listed
+in ‘package_data’ or were included as a result of using
+‘include_package_data’.
+
+In summary, the three options allow you to:
+
+‘include_package_data’
+
+ Accept all data files and directories matched by ‘MANIFEST.in’.
+
+‘package_data’
+
+ Specify additional patterns to match files that may or may not be
+ matched by ‘MANIFEST.in’ or found in source control.
+
+‘exclude_package_data’
+
+ Specify patterns for data files and directories that should `not'
+ be included when a package is installed, even if they would
+ otherwise have been included due to the use of the preceding
+ options.
+
+NOTE: Due to the way the distutils build process works, a data file that
+you include in your project and then stop including may be “orphaned” in
+your project’s build directories, requiring you to run ‘setup.py clean
+--all’ to fully remove them. This may also be important for your users
+and contributors if they track intermediate revisions of your project
+using Subversion; be sure to let them know when you make changes that
+remove files from inclusion so they can run ‘setup.py clean --all’.
+
+* Menu:
+
+* Accessing Data Files at Runtime::
+* Non-Package Data Files::
+
+ ---------- Footnotes ----------
+
+ (1)
+https://docs.python.org/3/distutils/setupscript.html#installing-package-data
+
+
+File: setuptools.info, Node: Accessing Data Files at Runtime, Next: Non-Package Data Files, Up: Data Files Support
+
+1.1.5.1 Accessing Data Files at Runtime
+.......................................
+
+Typically, existing programs manipulate a package’s ‘__file__’ attribute
+in order to find the location of data files. However, this manipulation
+isn’t compatible with PEP 302-based import hooks, including importing
+from zip files and Python Eggs. It is strongly recommended that, if you
+are using data files, you should use the *note ResourceManager API: 35.
+of ‘pkg_resources’ to access them. The ‘pkg_resources’ module is
+distributed as part of setuptools, so if you’re using setuptools to
+distribute your package, there is no reason not to use its resource
+management API. See also Importlib Resources(1) for a quick example of
+converting code that uses ‘__file__’ to use ‘pkg_resources’ instead.
+
+ ---------- Footnotes ----------
+
+ (1)
+https://docs.python.org/3/library/importlib.html#module-importlib.resources
+
+
+File: setuptools.info, Node: Non-Package Data Files, Prev: Accessing Data Files at Runtime, Up: Data Files Support
+
+1.1.5.2 Non-Package Data Files
+..............................
+
+Historically, ‘setuptools’ by way of ‘easy_install’ would encapsulate
+data files from the distribution into the egg (see the old docs(1)). As
+eggs are deprecated and pip-based installs fall back to the
+platform-specific location for installing data files, there is no
+supported facility to reliably retrieve these resources.
+
+Instead, the PyPA recommends that any data files you wish to be
+accessible at run time be included in the package.
+
+ ---------- Footnotes ----------
+
+ (1)
+https://github.com/pypa/setuptools/blob/52aacd5b276fedd6849c3a648a0014f5da563e93/docs/setuptools.txt#L970-L1001
+
+
+File: setuptools.info, Node: “Development Mode”, Next: Tagging and “Daily Build” or “Snapshot” Releases, Prev: Data Files Support, Up: Transition to PEP517
+
+1.1.6 “Development Mode”
+------------------------
+
+Under normal circumstances, the ‘distutils’ assume that you are going to
+build a distribution of your project, not use it in its “raw” or
+“unbuilt” form. If you were to use the ‘distutils’ that way, you would
+have to rebuild and reinstall your project every time you made a change
+to it during development.
+
+Another problem that sometimes comes up with the ‘distutils’ is that you
+may need to do development on two related projects at the same time.
+You may need to put both projects’ packages in the same directory to run
+them, but need to keep them separate for revision control purposes. How
+can you do this?
+
+Setuptools allows you to deploy your projects for use in a common
+directory or staging area, but without copying any files. Thus, you can
+edit each project’s code in its checkout directory, and only need to run
+build commands when you change a project’s C extensions or similarly
+compiled files. You can even deploy a project into another project’s
+checkout directory, if that’s your preferred way of working (as opposed
+to using a common independent staging area or the site-packages
+directory).
+
+To do this, use the ‘setup.py develop’ command. It works very similarly
+to ‘setup.py install’, except that it doesn’t actually install anything.
+Instead, it creates a special ‘.egg-link’ file in the deployment
+directory, that links to your project’s source code. And, if your
+deployment directory is Python’s ‘site-packages’ directory, it will also
+update the ‘easy-install.pth’ file to include your project’s source
+code, thereby making it available on ‘sys.path’ for all programs using
+that Python installation.
+
+If you have enabled the ‘use_2to3’ flag, then of course the ‘.egg-link’
+will not link directly to your source code when run under Python 3,
+since that source code would be made for Python 2 and not work under
+Python 3. Instead the ‘setup.py develop’ will build Python 3 code under
+the ‘build’ directory, and link there. This means that after doing code
+changes you will have to run ‘setup.py build’ before these changes are
+picked up by your Python 3 installation.
+
+In addition, the ‘develop’ command creates wrapper scripts in the target
+script directory that will run your in-development scripts after
+ensuring that all your ‘install_requires’ packages are available on
+‘sys.path’.
+
+You can deploy the same project to multiple staging areas, e.g. if you
+have multiple projects on the same machine that are sharing the same
+project you’re doing development work.
+
+When you’re done with a given development task, you can remove the
+project source from a staging area using ‘setup.py develop --uninstall’,
+specifying the desired staging area if it’s not the default.
+
+There are several options to control the precise behavior of the
+‘develop’ command; see the section on the *note develop: 3a. command
+below for more details.
+
+Note that you can also apply setuptools commands to non-setuptools
+projects, using commands like this:
+
+ python -c "import setuptools; with open('setup.py') as f: exec(compile(f.read(), 'setup.py', 'exec'))" develop
+
+That is, you can simply list the normal setup commands and options
+following the quoted part.
+
+
+File: setuptools.info, Node: Tagging and “Daily Build” or “Snapshot” Releases, Next: Generating Source Distributions, Prev: “Development Mode”, Up: Transition to PEP517
+
+1.1.7 Tagging and “Daily Build” or “Snapshot” Releases
+------------------------------------------------------
+
+When a set of related projects are under development, it may be
+important to track finer-grained version increments than you would
+normally use for e.g. “stable” releases. While stable releases might
+be measured in dotted numbers with alpha/beta/etc. status codes,
+development versions of a project often need to be tracked by revision
+or build number or even build date. This is especially true when
+projects in development need to refer to one another, and therefore may
+literally need an up-to-the-minute version of something!
+
+To support these scenarios, ‘setuptools’ allows you to “tag” your source
+and egg distributions by adding one or more of the following to the
+project’s “official” version identifier:
+
+ * A manually-specified pre-release tag, such as “build” or “dev”, or
+ a manually-specified post-release tag, such as a build or revision
+ number (‘--tag-build=STRING, -bSTRING’)
+
+ * An 8-character representation of the build date (‘--tag-date, -d’),
+ as a postrelease tag
+
+You can add these tags by adding ‘egg_info’ and the desired options to
+the command line ahead of the ‘sdist’ or ‘bdist’ commands that you want
+to generate a daily build or snapshot for. See the section below on the
+*note egg_info: 3d. command for more details.
+
+(Also, before you release your project, be sure to see the section above
+on *note Specifying Your Project’s Version: 3e. for more information
+about how pre- and post-release tags affect how version numbers are
+interpreted. This is important in order to make sure that dependency
+processing tools will know which versions of your project are newer than
+others.)
+
+Finally, if you are creating builds frequently, and either building them
+in a downloadable location or are copying them to a distribution server,
+you should probably also check out the *note rotate: 3f. command, which
+lets you automatically delete all but the N most-recently-modified
+distributions matching a glob pattern. So, you can use a command line
+like:
+
+ setup.py egg_info -rbDEV bdist_egg rotate -m.egg -k3
+
+to build an egg whose version info includes “DEV-rNNNN” (where NNNN is
+the most recent Subversion revision that affected the source tree), and
+then delete any egg files from the distribution directory except for the
+three that were built most recently.
+
+If you have to manage automated builds for multiple packages, each with
+different tagging and rotation policies, you may also want to check out
+the *note alias: 40. command, which would let each package define an
+alias like ‘daily’ that would perform the necessary tag, build, and
+rotate commands. Then, a simpler script or cron job could just run
+‘setup.py daily’ in each project directory. (And, you could also define
+sitewide or per-user default versions of the ‘daily’ alias, so that
+projects that didn’t define their own would use the appropriate
+defaults.)
+
+
+File: setuptools.info, Node: Generating Source Distributions, Next: Distributing Extensions compiled with Cython, Prev: Tagging and “Daily Build” or “Snapshot” Releases, Up: Transition to PEP517
+
+1.1.8 Generating Source Distributions
+-------------------------------------
+
+‘setuptools’ enhances the distutils’ default algorithm for source file
+selection with pluggable endpoints for looking up files to include. If
+you are using a revision control system, and your source distributions
+only need to include files that you’re tracking in revision control, use
+a corresponding plugin instead of writing a ‘MANIFEST.in’ file. See the
+section below on *note Adding Support for Revision Control Systems: 32.
+for information on plugins.
+
+If you need to include automatically generated files, or files that are
+kept in an unsupported revision control system, you’ll need to create a
+‘MANIFEST.in’ file to specify any files that the default file location
+algorithm doesn’t catch. See the distutils documentation for more
+information on the format of the ‘MANIFEST.in’ file.
+
+But, be sure to ignore any part of the distutils documentation that
+deals with ‘MANIFEST’ or how it’s generated from ‘MANIFEST.in’;
+setuptools shields you from these issues and doesn’t work the same way
+in any case. Unlike the distutils, setuptools regenerates the source
+distribution manifest file every time you build a source distribution,
+and it builds it inside the project’s ‘.egg-info’ directory, out of the
+way of your main project directory. You therefore need not worry about
+whether it is up-to-date or not.
+
+Indeed, because setuptools’ approach to determining the contents of a
+source distribution is so much simpler, its ‘sdist’ command omits nearly
+all of the options that the distutils’ more complex ‘sdist’ process
+requires. For all practical purposes, you’ll probably use only the
+‘--formats’ option, if you use any option at all.
+
+* Menu:
+
+* Making “Official” (Non-Snapshot) Releases: Making “Official” Non-Snapshot Releases.
+
+
+File: setuptools.info, Node: Making “Official” Non-Snapshot Releases, Up: Generating Source Distributions
+
+1.1.8.1 Making “Official” (Non-Snapshot) Releases
+.................................................
+
+When you make an official release, creating source or binary
+distributions, you will need to override the tag settings from
+‘setup.cfg’, so that you don’t end up registering versions like
+‘foobar-0.7a1.dev-r34832’. This is easy to do if you are developing on
+the trunk and using tags or branches for your releases - just make the
+change to ‘setup.cfg’ after branching or tagging the release, so the
+trunk will still produce development snapshots.
+
+Alternately, if you are not branching for releases, you can override the
+default version options on the command line, using something like:
+
+ setup.py egg_info -Db "" sdist bdist_egg
+
+The first part of this command (‘egg_info -Db ""’) will override the
+configured tag information, before creating source and binary eggs.
+Thus, these commands will use the plain version from your ‘setup.py’,
+without adding the build designation string.
+
+Of course, if you will be doing this a lot, you may wish to create a
+personal alias for this operation, e.g.:
+
+ setup.py alias -u release egg_info -Db ""
+
+You can then use it like this:
+
+ setup.py release sdist bdist_egg
+
+Or of course you can create more elaborate aliases that do all of the
+above. See the sections below on the *note egg_info: 3d. and *note
+alias: 40. commands for more ideas.
+
+
+File: setuptools.info, Node: Distributing Extensions compiled with Cython, Next: Specifying Your Project’s Version, Prev: Generating Source Distributions, Up: Transition to PEP517
+
+1.1.9 Distributing Extensions compiled with Cython
+--------------------------------------------------
+
+‘setuptools’ will detect at build time whether Cython is installed or
+not. If Cython is not found ‘setuptools’ will ignore pyx files.
+
+To ensure Cython is available, include Cython in the build-requires
+section of your pyproject.toml:
+
+ [build-system]
+ requires=[..., "cython"]
+
+Built with pip 10 or later, that declaration is sufficient to include
+Cython in the build. For broader compatibility, declare the dependency
+in your setup-requires of setup.cfg:
+
+ [options]
+ setup_requires =
+ ...
+ cython
+
+As long as Cython is present in the build environment, ‘setuptools’
+includes transparent support for building Cython extensions, as long as
+extensions are defined using ‘setuptools.Extension’.
+
+If you follow these rules, you can safely list ‘.pyx’ files as the
+source of your ‘Extension’ objects in the setup script. If it is, then
+‘setuptools’ will use it.
+
+Of course, for this to work, your source distributions must include the
+C code generated by Cython, as well as your original ‘.pyx’ files. This
+means that you will probably want to include current ‘.c’ files in your
+revision control system, rebuilding them whenever you check changes in
+for the ‘.pyx’ source files. This will ensure that people tracking your
+project in a revision control system will be able to build it even if
+they don’t have Cython installed, and that your source releases will be
+similarly usable with or without Cython.
+
+
+File: setuptools.info, Node: Specifying Your Project’s Version, Next: Creating distutils Extensions, Prev: Distributing Extensions compiled with Cython, Up: Transition to PEP517
+
+1.1.10 Specifying Your Project’s Version
+----------------------------------------
+
+Setuptools can work well with most versioning schemes; there are,
+however, a few special things to watch out for, in order to ensure that
+setuptools and other tools can always tell what version of your package
+is newer than another version. Knowing these things will also help you
+correctly specify what versions of other projects your project depends
+on.
+
+A version consists of an alternating series of release numbers and
+pre-release or post-release tags. A release number is a series of
+digits punctuated by dots, such as ‘2.4’ or ‘0.5’. Each series of
+digits is treated numerically, so releases ‘2.1’ and ‘2.1.0’ are
+different ways to spell the same release number, denoting the first
+subrelease of release 2. But ‘2.10’ is the `tenth' subrelease of
+release 2, and so is a different and newer release from ‘2.1’ or
+‘2.1.0’. Leading zeros within a series of digits are also ignored, so
+‘2.01’ is the same as ‘2.1’, and different from ‘2.0.1’.
+
+Following a release number, you can have either a pre-release or
+post-release tag. Pre-release tags make a version be considered `older'
+than the version they are appended to. So, revision ‘2.4’ is `newer'
+than revision ‘2.4c1’, which in turn is newer than ‘2.4b1’ or ‘2.4a1’.
+Postrelease tags make a version be considered `newer' than the version
+they are appended to. So, revisions like ‘2.4-1’ and ‘2.4pl3’ are newer
+than ‘2.4’, but are `older' than ‘2.4.1’ (which has a higher release
+number).
+
+A pre-release tag is a series of letters that are alphabetically before
+“final”. Some examples of prerelease tags would include ‘alpha’,
+‘beta’, ‘a’, ‘c’, ‘dev’, and so on. You do not have to place a dot or
+dash before the prerelease tag if it’s immediately after a number, but
+it’s okay to do so if you prefer. Thus, ‘2.4c1’ and ‘2.4.c1’ and
+‘2.4-c1’ all represent release candidate 1 of version ‘2.4’, and are
+treated as identical by setuptools.
+
+In addition, there are three special prerelease tags that are treated as
+if they were the letter ‘c’: ‘pre’, ‘preview’, and ‘rc’. So, version
+‘2.4rc1’, ‘2.4pre1’ and ‘2.4preview1’ are all the exact same version as
+‘2.4c1’, and are treated as identical by setuptools.
+
+A post-release tag is either a series of letters that are alphabetically
+greater than or equal to “final”, or a dash (‘-’). Post-release tags
+are generally used to separate patch numbers, port numbers, build
+numbers, revision numbers, or date stamps from the release number. For
+example, the version ‘2.4-r1263’ might denote Subversion revision 1263
+of a post-release patch of version ‘2.4’. Or you might use
+‘2.4-20051127’ to denote a date-stamped post-release.
+
+Notice that after each pre or post-release tag, you are free to place
+another release number, followed again by more pre- or post-release
+tags. For example, ‘0.6a9.dev-r41475’ could denote Subversion revision
+41475 of the in- development version of the ninth alpha of release 0.6.
+Notice that ‘dev’ is a pre-release tag, so this version is a `lower'
+version number than ‘0.6a9’, which would be the actual ninth alpha of
+release 0.6. But the ‘-r41475’ is a post-release tag, so this version
+is `newer' than ‘0.6a9.dev’.
+
+For the most part, setuptools’ interpretation of version numbers is
+intuitive, but here are a few tips that will keep you out of trouble in
+the corner cases:
+
+ * Don’t stick adjoining pre-release tags together without a dot or
+ number between them. Version ‘1.9adev’ is the ‘adev’ prerelease of
+ ‘1.9’, `not' a development pre-release of ‘1.9a’. Use ‘.dev’
+ instead, as in ‘1.9a.dev’, or separate the prerelease tags with a
+ number, as in ‘1.9a0dev’. ‘1.9a.dev’, ‘1.9a0dev’, and even
+ ‘1.9.a.dev’ are identical versions from setuptools’ point of view,
+ so you can use whatever scheme you prefer.
+
+ * If you want to be certain that your chosen numbering scheme works
+ the way you think it will, you can use the
+ ‘pkg_resources.parse_version()’ function to compare different
+ version numbers:
+
+ >>> from pkg_resources import parse_version
+ >>> parse_version("1.9.a.dev") == parse_version("1.9a0dev")
+ True
+ >>> parse_version("2.1-rc2") < parse_version("2.1")
+ True
+ >>> parse_version("0.6a9dev-r41475") < parse_version("0.6a9")
+ True
+
+Once you’ve decided on a version numbering scheme for your project, you
+can have setuptools automatically tag your in-development releases with
+various pre- or post-release tags. See the following sections for more
+details:
+
+ * *note Tagging and "Daily Build" or "Snapshot" Releases: 3c.
+
+ * The *note egg_info: 3d. command
+
+
+File: setuptools.info, Node: Creating distutils Extensions, Next: Configuring setup using setup cfg files, Prev: Specifying Your Project’s Version, Up: Transition to PEP517
+
+1.1.11 Creating ‘distutils’ Extensions
+--------------------------------------
+
+It can be hard to add new commands or setup arguments to the distutils.
+But the ‘setuptools’ package makes it a bit easier, by allowing you to
+distribute a distutils extension as a separate project, and then have
+projects that need the extension just refer to it in their
+‘setup_requires’ argument.
+
+With ‘setuptools’, your distutils extension projects can hook in new
+commands and ‘setup()’ arguments just by defining “entry points”. These
+are mappings from command or argument names to a specification of where
+to import a handler from. (See the section on *note Advertising
+Behavior: 25. above for some more background on entry points.)
+
+* Menu:
+
+* Adding Commands::
+* Adding setup() Arguments: Adding setup Arguments.
+* Customizing Distribution Options::
+* Adding new EGG-INFO Files::
+* Adding Support for Revision Control Systems::
+
+
+File: setuptools.info, Node: Adding Commands, Next: Adding setup Arguments, Up: Creating distutils Extensions
+
+1.1.11.1 Adding Commands
+........................
+
+You can add new ‘setup’ commands by defining entry points in the
+‘distutils.commands’ group. For example, if you wanted to add a ‘foo’
+command, you might add something like this to your distutils extension
+project’s setup script:
+
+ setup(
+ # ...
+ entry_points={
+ "distutils.commands": [
+ "foo = mypackage.some_module:foo",
+ ],
+ },
+ )
+
+(Assuming, of course, that the ‘foo’ class in ‘mypackage.some_module’ is
+a ‘setuptools.Command’ subclass.)
+
+Once a project containing such entry points has been activated on
+‘sys.path’, (e.g. by running “install” or “develop” with a
+site-packages installation directory) the command(s) will be available
+to any ‘setuptools’-based setup scripts. It is not necessary to use the
+‘--command-packages’ option or to monkeypatch the ‘distutils.command’
+package to install your commands; ‘setuptools’ automatically adds a
+wrapper to the distutils to search for entry points in the active
+distributions on ‘sys.path’. In fact, this is how setuptools’ own
+commands are installed: the setuptools project’s setup script defines
+entry points for them!
+
+
+File: setuptools.info, Node: Adding setup Arguments, Next: Customizing Distribution Options, Prev: Adding Commands, Up: Creating distutils Extensions
+
+1.1.11.2 Adding ‘setup()’ Arguments
+...................................
+
+ Warning: Adding arguments to setup is discouraged as such arguments
+ are only supported through imperative execution and not supported
+ through declarative config.
+
+Sometimes, your commands may need additional arguments to the ‘setup()’
+call. You can enable this by defining entry points in the
+‘distutils.setup_keywords’ group. For example, if you wanted a
+‘setup()’ argument called ‘bar_baz’, you might add something like this
+to your distutils extension project’s setup script:
+
+ setup(
+ # ...
+ entry_points={
+ "distutils.commands": [
+ "foo = mypackage.some_module:foo",
+ ],
+ "distutils.setup_keywords": [
+ "bar_baz = mypackage.some_module:validate_bar_baz",
+ ],
+ },
+ )
+
+The idea here is that the entry point defines a function that will be
+called to validate the ‘setup()’ argument, if it’s supplied. The
+‘Distribution’ object will have the initial value of the attribute set
+to ‘None’, and the validation function will only be called if the
+‘setup()’ call sets it to a non-None value. Here’s an example
+validation function:
+
+ def assert_bool(dist, attr, value):
+ """Verify that value is True, False, 0, or 1"""
+ if bool(value) != value:
+ raise DistutilsSetupError(
+ "%r must be a boolean value (got %r)" % (attr,value)
+ )
+
+Your function should accept three arguments: the ‘Distribution’ object,
+the attribute name, and the attribute value. It should raise a
+‘DistutilsSetupError’ (from the ‘distutils.errors’ module) if the
+argument is invalid. Remember, your function will only be called with
+non-None values, and the default value of arguments defined this way is
+always None. So, your commands should always be prepared for the
+possibility that the attribute will be ‘None’ when they access it later.
+
+If more than one active distribution defines an entry point for the same
+‘setup()’ argument, `all' of them will be called. This allows multiple
+distutils extensions to define a common argument, as long as they agree
+on what values of that argument are valid.
+
+Also note that as with commands, it is not necessary to subclass or
+monkeypatch the distutils ‘Distribution’ class in order to add your
+arguments; it is sufficient to define the entry points in your
+extension, as long as any setup script using your extension lists your
+project in its ‘setup_requires’ argument.
+
+
+File: setuptools.info, Node: Customizing Distribution Options, Next: Adding new EGG-INFO Files, Prev: Adding setup Arguments, Up: Creating distutils Extensions
+
+1.1.11.3 Customizing Distribution Options
+.........................................
+
+Plugins may wish to extend or alter the options on a Distribution object
+to suit the purposes of that project. For example, a tool that infers
+the ‘Distribution.version’ from SCM-metadata may need to hook into the
+option finalization. To enable this feature, Setuptools offers an entry
+point “setuptools.finalize_distribution_options”. That entry point must
+be a callable taking one argument (the Distribution instance).
+
+If the callable has an ‘.order’ property, that value will be used to
+determine the order in which the hook is called. Lower numbers are
+called first and the default is zero (0).
+
+Plugins may read, alter, and set properties on the distribution, but
+each plugin is encouraged to load the configuration/settings for their
+behavior independently.
+
+
+File: setuptools.info, Node: Adding new EGG-INFO Files, Next: Adding Support for Revision Control Systems, Prev: Customizing Distribution Options, Up: Creating distutils Extensions
+
+1.1.11.4 Adding new EGG-INFO Files
+..................................
+
+Some extensible applications or frameworks may want to allow third
+parties to develop plugins with application or framework-specific
+metadata included in the plugins’ EGG-INFO directory, for easy access
+via the ‘pkg_resources’ metadata API. The easiest way to allow this is
+to create a distutils extension to be used from the plugin projects’
+setup scripts (via ‘setup_requires’) that defines a new setup keyword,
+and then uses that data to write an EGG-INFO file when the ‘egg_info’
+command is run.
+
+The ‘egg_info’ command looks for extension points in an
+‘egg_info.writers’ group, and calls them to write the files. Here’s a
+simple example of a distutils extension defining a setup argument
+‘foo_bar’, which is a list of lines that will be written to
+‘foo_bar.txt’ in the EGG-INFO directory of any project that uses the
+argument:
+
+ setup(
+ # ...
+ entry_points={
+ "distutils.setup_keywords": [
+ "foo_bar = setuptools.dist:assert_string_list",
+ ],
+ "egg_info.writers": [
+ "foo_bar.txt = setuptools.command.egg_info:write_arg",
+ ],
+ },
+ )
+
+This simple example makes use of two utility functions defined by
+setuptools for its own use: a routine to validate that a setup keyword
+is a sequence of strings, and another one that looks up a setup argument
+and writes it to a file. Here’s what the writer utility looks like:
+
+ def write_arg(cmd, basename, filename):
+ argname = os.path.splitext(basename)[0]
+ value = getattr(cmd.distribution, argname, None)
+ if value is not None:
+ value = "\n".join(value) + "\n"
+ cmd.write_or_delete_file(argname, filename, value)
+
+As you can see, ‘egg_info.writers’ entry points must be a function
+taking three arguments: a ‘egg_info’ command instance, the basename of
+the file to write (e.g. ‘foo_bar.txt’), and the actual full filename
+that should be written to.
+
+In general, writer functions should honor the command object’s ‘dry_run’
+setting when writing files, and use the ‘distutils.log’ object to do any
+console output. The easiest way to conform to this requirement is to
+use the ‘cmd’ object’s ‘write_file()’, ‘delete_file()’, and
+‘write_or_delete_file()’ methods exclusively for your file operations.
+See those methods’ docstrings for more details.
+
+
+File: setuptools.info, Node: Adding Support for Revision Control Systems, Prev: Adding new EGG-INFO Files, Up: Creating distutils Extensions
+
+1.1.11.5 Adding Support for Revision Control Systems
+....................................................
+
+If the files you want to include in the source distribution are tracked
+using Git, Mercurial or SVN, you can use the following packages to
+achieve that:
+
+ - Git and Mercurial: setuptools_scm(1)
+
+ - SVN: setuptools_svn(2)
+
+If you would like to create a plugin for ‘setuptools’ to find files
+tracked by another revision control system, you can do so by adding an
+entry point to the ‘setuptools.file_finders’ group. The entry point
+should be a function accepting a single directory name, and should yield
+all the filenames within that directory (and any subdirectories thereof)
+that are under revision control.
+
+For example, if you were going to create a plugin for a revision control
+system called “foobar”, you would write a function something like this:
+
+ def find_files_for_foobar(dirname):
+ # loop to yield paths that start with `dirname`
+
+And you would register it in a setup script using something like this:
+
+ entry_points={
+ "setuptools.file_finders": [
+ "foobar = my_foobar_module:find_files_for_foobar",
+ ]
+ }
+
+Then, anyone who wants to use your plugin can simply install it, and
+their local setuptools installation will be able to find the necessary
+files.
+
+It is not necessary to distribute source control plugins with projects
+that simply use the other source control system, or to specify the
+plugins in ‘setup_requires’. When you create a source distribution with
+the ‘sdist’ command, setuptools automatically records what files were
+found in the ‘SOURCES.txt’ file. That way, recipients of source
+distributions don’t need to have revision control at all. However, if
+someone is working on a package by checking out with that system, they
+will need the same plugin(s) that the original author is using.
+
+A few important points for writing revision control file finders:
+
+ * Your finder function MUST return relative paths, created by
+ appending to the passed-in directory name. Absolute paths are NOT
+ allowed, nor are relative paths that reference a parent directory
+ of the passed-in directory.
+
+ * Your finder function MUST accept an empty string as the directory
+ name, meaning the current directory. You MUST NOT convert this to
+ a dot; just yield relative paths. So, yielding a subdirectory
+ named ‘some/dir’ under the current directory should NOT be rendered
+ as ‘./some/dir’ or ‘/somewhere/some/dir’, but `always' as simply
+ ‘some/dir’
+
+ * Your finder function SHOULD NOT raise any errors, and SHOULD deal
+ gracefully with the absence of needed programs (i.e., ones
+ belonging to the revision control system itself. It `may',
+ however, use ‘distutils.log.warn()’ to inform the user of the
+ missing program(s).
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/setuptools_scm/
+
+ (2) https://pypi.org/project/setuptools_svn/
+
+
+File: setuptools.info, Node: Configuring setup using setup cfg files, Next: New and Changed setup Keywords, Prev: Creating distutils Extensions, Up: Transition to PEP517
+
+1.1.12 Configuring setup() using setup.cfg files
+------------------------------------------------
+
+ Note: New in 30.3.0 (8 Dec 2016).
+
+ Important: If compatibility with legacy builds (i.e. those not
+ using the PEP 517(1) build API) is desired, a ‘setup.py’ file
+ containing a ‘setup()’ function call is still required even if your
+ configuration resides in ‘setup.cfg’.
+
+‘Setuptools’ allows using configuration files (usually ‘setup.cfg’) to
+define a package’s metadata and other options that are normally supplied
+to the ‘setup()’ function (declarative config).
+
+This approach not only allows automation scenarios but also reduces
+boilerplate code in some cases.
+
+ Note: This implementation has limited compatibility with the
+ distutils2-like ‘setup.cfg’ sections used by the ‘pbr’ and ‘d2to1’
+ packages.
+
+ Namely: only metadata-related keys from ‘metadata’ section are
+ supported (except for ‘description-file’); keys from ‘files’,
+ ‘entry_points’ and ‘backwards_compat’ are not supported.
+
+ [metadata]
+ name = my_package
+ version = attr: src.VERSION
+ description = My package description
+ long_description = file: README.rst, CHANGELOG.rst, LICENSE.rst
+ keywords = one, two
+ license = BSD 3-Clause License
+ classifiers =
+ Framework :: Django
+ License :: OSI Approved :: BSD License
+ Programming Language :: Python :: 3
+ Programming Language :: Python :: 3.5
+
+ [options]
+ zip_safe = False
+ include_package_data = True
+ packages = find:
+ scripts =
+ bin/first.py
+ bin/second.py
+ install_requires =
+ requests
+ importlib; python_version == "2.6"
+
+ [options.package_data]
+ * = *.txt, *.rst
+ hello = *.msg
+
+ [options.extras_require]
+ pdf = ReportLab>=1.2; RXP
+ rest = docutils>=0.3; pack ==1.1, ==1.3
+
+ [options.packages.find]
+ exclude =
+ src.subpackage1
+ src.subpackage2
+
+ [options.data_files]
+ /etc/my_package =
+ site.d/00_default.conf
+ host.d/00_default.conf
+ data = data/img/logo.png, data/svg/icon.svg
+
+Metadata and options are set in the config sections of the same name.
+
+ * Keys are the same as the keyword arguments one provides to the
+ ‘setup()’ function.
+
+ * Complex values can be written comma-separated or placed one per
+ line in `dangling' config values. The following are equivalent:
+
+ [metadata]
+ keywords = one, two
+
+ [metadata]
+ keywords =
+ one
+ two
+
+ * In some cases, complex values can be provided in dedicated
+ subsections for clarity.
+
+ * Some keys allow ‘file:’, ‘attr:’, ‘find:’, and ‘find_namespace:’
+ directives in order to cover common usecases.
+
+ * Unknown keys are ignored.
+
+* Menu:
+
+* Using a src/ layout::
+* Specifying values::
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0517
+
+
+File: setuptools.info, Node: Using a src/ layout, Next: Specifying values, Up: Configuring setup using setup cfg files
+
+1.1.12.1 Using a ‘src/’ layout
+..............................
+
+One commonly used package configuration has all the module source code
+in a subdirectory (often called the ‘src/’ layout), like this:
+
+ ├── src
+ │   └── mypackage
+ │   ├── __init__.py
+ │   └── mod1.py
+ ├── setup.py
+ └── setup.cfg
+
+You can set up your ‘setup.cfg’ to automatically find all your packages
+in the subdirectory like this:
+
+ # This example contains just the necessary options for a src-layout, set up
+ # the rest of the file as described above.
+
+ [options]
+ package_dir=
+ =src
+ packages=find:
+
+ [options.packages.find]
+ where=src
+
+
+File: setuptools.info, Node: Specifying values, Prev: Using a src/ layout, Up: Configuring setup using setup cfg files
+
+1.1.12.2 Specifying values
+..........................
+
+Some values are treated as simple strings, some allow more logic.
+
+Type names used below:
+
+ * ‘str’ - simple string
+
+ * ‘list-comma’ - dangling list or string of comma-separated values
+
+ * ‘list-semi’ - dangling list or string of semicolon-separated values
+
+ * ‘bool’ - ‘True’ is 1, yes, true
+
+ * ‘dict’ - list-comma where keys are separated from values by ‘=’
+
+ * ‘section’ - values are read from a dedicated (sub)section
+
+Special directives:
+
+ * ‘attr:’ - Value is read from a module attribute. ‘attr:’ supports
+ callables and iterables; unsupported types are cast using ‘str()’.
+
+ In order to support the common case of a literal value assigned to
+ a variable in a module containing (directly or indirectly)
+ third-party imports, ‘attr:’ first tries to read the value from the
+ module by examining the module’s AST. If that fails, ‘attr:’ falls
+ back to importing the module.
+
+ * ‘file:’ - Value is read from a list of files and then concatenated
+
+ Note: The ‘file:’ directive is sandboxed and won’t reach anything
+ outside the directory containing ‘setup.py’.
+
+* Menu:
+
+* Metadata::
+* Options::
+
+
+File: setuptools.info, Node: Metadata, Next: Options, Up: Specifying values
+
+1.1.12.3 Metadata
+.................
+
+ Note: The aliases given below are supported for compatibility
+ reasons, but their use is not advised.
+
+Key Aliases Type Minimum Version Notes
+
+-------------------------------------------------------------------------------------------------------------
+
+name str
+
+
+version attr:, file:, str 39.2.0 1.
+
+
+url home-page str
+
+
+download_url download-url str
+
+
+project_urls dict 38.3.0
+
+
+author str
+
+
+author_email author-email str
+
+
+maintainer str
+
+
+maintainer_email maintainer-email str
+
+
+classifiers classifier file:, list-comma
+
+
+license str
+
+
+license_file str
+
+
+license_files list-comma
+
+
+description summary file:, str
+
+
+long_description long-description file:, str
+
+
+long_description_content_type str 38.6.0
+
+
+keywords list-comma
+
+
+platforms platform list-comma
+
+
+provides list-comma
+
+
+requires list-comma
+
+
+obsoletes list-comma
+
+
+ Note: A version loaded using the ‘file:’ directive must comply with
+ PEP 440. It is easy to accidentally put something other than a
+ valid version string in such a file, so validation is stricter in
+ this case.
+
+Notes: 1. The ‘version’ file attribute has only been supported since
+39.2.0.
+
+
+File: setuptools.info, Node: Options, Prev: Metadata, Up: Specifying values
+
+1.1.12.4 Options
+................
+
+Key Type Minimum Version Notes
+
+--------------------------------------------------------------------------------------------------
+
+zip_safe bool
+
+
+setup_requires list-semi
+
+
+install_requires list-semi
+
+
+extras_require section
+
+
+python_requires str
+
+
+entry_points file:, section
+
+
+use_2to3 bool
+
+
+use_2to3_fixers list-comma
+
+
+use_2to3_exclude_fixers list-comma
+
+
+convert_2to3_doctests list-comma
+
+
+scripts list-comma
+
+
+eager_resources list-comma
+
+
+dependency_links list-comma
+
+
+tests_require list-semi
+
+
+include_package_data bool
+
+
+packages find:, find_namespace:, list-comma
+
+
+package_dir dict
+
+
+package_data section 1.
+
+
+exclude_package_data section
+
+
+namespace_packages list-comma
+
+
+py_modules list-comma
+
+
+data_files dict 40.6.0
+
+
+ Note: `packages' - The ‘find:’ and ‘find_namespace:’ directive can
+ be further configured in a dedicated subsection
+ ‘options.packages.find’. This subsection accepts the same keys as
+ the ‘setuptools.find_packages’ and the
+ ‘setuptools.find_namespace_packages’ function: ‘where’, ‘include’,
+ and ‘exclude’.
+
+ `find_namespace directive' - The ‘find_namespace:’ directive is
+ supported since Python >=3.3.
+
+Notes: 1. In the ‘package_data’ section, a key named with a single
+asterisk (‘*’) refers to all packages, in lieu of the empty string used
+in ‘setup.py’.
+
+
+File: setuptools.info, Node: New and Changed setup Keywords, Next: Command Reference, Prev: Configuring setup using setup cfg files, Up: Transition to PEP517
+
+1.1.13 New and Changed ‘setup()’ Keywords
+-----------------------------------------
+
+The following keyword arguments to ‘setup()’ are added or changed by
+‘setuptools’. All of them are optional; you do not have to supply them
+unless you need the associated ‘setuptools’ feature.
+
+‘include_package_data’
+
+ If set to ‘True’, this tells ‘setuptools’ to automatically include
+ any data files it finds inside your package directories that are
+ specified by your ‘MANIFEST.in’ file. For more information, see
+ the section on *note Including Data Files: 12.
+
+‘exclude_package_data’
+
+ A dictionary mapping package names to lists of glob patterns that
+ should be `excluded' from your package directories. You can use
+ this to trim back any excess files included by
+ ‘include_package_data’. For a complete description and examples,
+ see the section on *note Including Data Files: 12.
+
+‘package_data’
+
+ A dictionary mapping package names to lists of glob patterns. For
+ a complete description and examples, see the section on *note
+ Including Data Files: 12. You do not need to use this option if
+ you are using ‘include_package_data’, unless you need to add e.g.
+ files that are generated by your setup script and build process.
+ (And are therefore not in source control or are files that you
+ don’t want to include in your source distribution.)
+
+‘zip_safe’
+
+ A boolean (True or False) flag specifying whether the project can
+ be safely installed and run from a zip file. If this argument is
+ not supplied, the ‘bdist_egg’ command will have to analyze all of
+ your project’s contents for possible problems each time it builds
+ an egg.
+
+‘install_requires’
+
+ A string or list of strings specifying what other distributions
+ need to be installed when this one is. See the section on *note
+ Declaring required dependency: 2b. for details and examples of the
+ format of this argument.
+
+‘entry_points’
+
+ A dictionary mapping entry point group names to strings or lists of
+ strings defining the entry points. Entry points are used to
+ support dynamic discovery of services or plugins provided by a
+ project. See *note Advertising Behavior: 25. for details and
+ examples of the format of this argument. In addition, this keyword
+ is used to support *note Automatic Script Creation: 21.
+
+‘extras_require’
+
+ A dictionary mapping names of “extras” (optional features of your
+ project) to strings or lists of strings specifying what other
+ distributions must be installed to support those features. See the
+ section on *note Declaring required dependency: 2b. for details and
+ examples of the format of this argument.
+
+‘python_requires’
+
+ A string corresponding to a version specifier (as defined in PEP
+ 440) for the Python version, used to specify the Requires-Python
+ defined in PEP 345.
+
+‘setup_requires’
+
+ A string or list of strings specifying what other distributions
+ need to be present in order for the `setup script' to run.
+ ‘setuptools’ will attempt to obtain these (using pip if available)
+ before processing the rest of the setup script or commands. This
+ argument is needed if you are using distutils extensions as part of
+ your build process; for example, extensions that process setup()
+ arguments and turn them into EGG-INFO metadata files.
+
+ (Note: projects listed in ‘setup_requires’ will NOT be
+ automatically installed on the system where the setup script is
+ being run. They are simply downloaded to the ./.eggs directory if
+ they’re not locally available already. If you want them to be
+ installed, as well as being available when the setup script is run,
+ you should add them to ‘install_requires’ `and' ‘setup_requires’.)
+
+‘dependency_links’
+
+ A list of strings naming URLs to be searched when satisfying
+ dependencies. These links will be used if needed to install
+ packages specified by ‘setup_requires’ or ‘tests_require’. They
+ will also be written into the egg’s metadata for use during install
+ by tools that support them.
+
+‘namespace_packages’
+
+ A list of strings naming the project’s “namespace packages”. A
+ namespace package is a package that may be split across multiple
+ project distributions. For example, Zope 3’s ‘zope’ package is a
+ namespace package, because subpackages like ‘zope.interface’ and
+ ‘zope.publisher’ may be distributed separately. The egg runtime
+ system can automatically merge such subpackages into a single
+ parent package at runtime, as long as you declare them in each
+ project that contains any subpackages of the namespace package, and
+ as long as the namespace package’s ‘__init__.py’ does not contain
+ any code other than a namespace declaration. See the section below
+ on *note Using find_namespace; or find_namespace_packages: 1c. for
+ more information.
+
+‘test_suite’
+
+ A string naming a ‘unittest.TestCase’ subclass (or a package or
+ module containing one or more of them, or a method of such a
+ subclass), or naming a function that can be called with no
+ arguments and returns a ‘unittest.TestSuite’. If the named suite
+ is a module, and the module has an ‘additional_tests()’ function,
+ it is called and the results are added to the tests to be run. If
+ the named suite is a package, any submodules and subpackages are
+ recursively added to the overall test suite.
+
+ Specifying this argument enables use of the *note test: 56. command
+ to run the specified test suite, e.g. via ‘setup.py test’. See
+ the section on the *note test: 56. command below for more details.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘tests_require’
+
+ If your project’s tests need one or more additional packages
+ besides those needed to install it, you can use this option to
+ specify them. It should be a string or list of strings specifying
+ what other distributions need to be present for the package’s tests
+ to run. When you run the ‘test’ command, ‘setuptools’ will attempt
+ to obtain these (using pip if available). Note that these required
+ projects will `not' be installed on the system where the tests are
+ run, but only downloaded to the project’s setup directory if
+ they’re not already installed locally.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘test_loader’
+
+ If you would like to use a different way of finding tests to run
+ than what setuptools normally uses, you can specify a module name
+ and class name in this argument. The named class must be
+ instantiable with no arguments, and its instances must support the
+ ‘loadTestsFromNames()’ method as defined in the Python ‘unittest’
+ module’s ‘TestLoader’ class. Setuptools will pass only one test
+ “name” in the ‘names’ argument: the value supplied for the
+ ‘test_suite’ argument. The loader you specify may interpret this
+ string in any way it likes, as there are no restrictions on what
+ may be contained in a ‘test_suite’ string.
+
+ The module name and class name must be separated by a ‘:’. The
+ default value of this argument is
+ ‘"setuptools.command.test:ScanningLoader"’. If you want to use the
+ default ‘unittest’ behavior, you can specify
+ ‘"unittest:TestLoader"’ as your ‘test_loader’ argument instead.
+ This will prevent automatic scanning of submodules and subpackages.
+
+ The module and class you specify here may be contained in another
+ package, as long as you use the ‘tests_require’ option to ensure
+ that the package containing the loader class is available when the
+ ‘test’ command is run.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘eager_resources’
+
+ A list of strings naming resources that should be extracted
+ together, if any of them is needed, or if any C extensions included
+ in the project are imported. This argument is only useful if the
+ project will be installed as a zipfile, and there is a need to have
+ all of the listed resources be extracted to the filesystem `as a
+ unit'. Resources listed here should be “/”-separated paths,
+ relative to the source root, so to list a resource ‘foo.png’ in
+ package ‘bar.baz’, you would include the string ‘bar/baz/foo.png’
+ in this argument.
+
+ If you only need to obtain resources one at a time, or you don’t
+ have any C extensions that access other files in the project (such
+ as data files or shared libraries), you probably do NOT need this
+ argument and shouldn’t mess with it. For more details on how this
+ argument works, see the section below on *note Automatic Resource
+ Extraction: 58.
+
+‘use_2to3’
+
+ Convert the source code from Python 2 to Python 3 with 2to3 during
+ the build process. See *note Supporting both Python 2 and Python 3
+ with Setuptools: 59. for more details.
+
+‘convert_2to3_doctests’
+
+ List of doctest source files that need to be converted with 2to3.
+ See *note Supporting both Python 2 and Python 3 with Setuptools:
+ 59. for more details.
+
+‘use_2to3_fixers’
+
+ A list of modules to search for additional fixers to be used during
+ the 2to3 conversion. See *note Supporting both Python 2 and Python
+ 3 with Setuptools: 59. for more details.
+
+‘project_urls’
+
+ An arbitrary map of URL names to hyperlinks, allowing more
+ extensible documentation of where various resources can be found
+ than the simple ‘url’ and ‘download_url’ options provide.
+
+
+File: setuptools.info, Node: Command Reference, Next: Using setuptools to package and distribute your project, Prev: New and Changed setup Keywords, Up: Transition to PEP517
+
+1.1.14 Command Reference
+------------------------
+
+* Menu:
+
+* alias - Define shortcuts for commonly used commands::
+* bdist_egg - Create a Python Egg for the project::
+* develop - Deploy the project source in “Development Mode”::
+* egg_info - Create egg metadata and set build tags::
+* rotate - Delete outdated distribution files::
+* saveopts - Save used options to a configuration file::
+* setopt - Set a distutils or setuptools option in a config file::
+* test - Build package and run a unittest suite::
+* upload - Upload source and/or egg distributions to PyPI::
+
+
+File: setuptools.info, Node: alias - Define shortcuts for commonly used commands, Next: bdist_egg - Create a Python Egg for the project, Up: Command Reference
+
+1.1.14.1 ‘alias’ - Define shortcuts for commonly used commands
+..............................................................
+
+Sometimes, you need to use the same commands over and over, but you
+can’t necessarily set them as defaults. For example, if you produce
+both development snapshot releases and “stable” releases of a project,
+you may want to put the distributions in different places, or use
+different ‘egg_info’ tagging options, etc. In these cases, it doesn’t
+make sense to set the options in a distutils configuration file, because
+the values of the options changed based on what you’re trying to do.
+
+Setuptools therefore allows you to define “aliases” - shortcut names for
+an arbitrary string of commands and options, using ‘setup.py alias
+aliasname expansion’, where aliasname is the name of the new alias, and
+the remainder of the command line supplies its expansion. For example,
+this command defines a sitewide alias called “daily”, that sets various
+‘egg_info’ tagging options:
+
+ setup.py alias --global-config daily egg_info --tag-build=development
+
+Once the alias is defined, it can then be used with other setup
+commands, e.g.:
+
+ setup.py daily bdist_egg # generate a daily-build .egg file
+ setup.py daily sdist # generate a daily-build source distro
+ setup.py daily sdist bdist_egg # generate both
+
+The above commands are interpreted as if the word ‘daily’ were replaced
+with ‘egg_info --tag-build=development’.
+
+Note that setuptools will expand each alias `at most once' in a given
+command line. This serves two purposes. First, if you accidentally
+create an alias loop, it will have no effect; you’ll instead get an
+error message about an unknown command. Second, it allows you to define
+an alias for a command, that uses that command. For example, this
+(project-local) alias:
+
+ setup.py alias bdist_egg bdist_egg rotate -k1 -m.egg
+
+redefines the ‘bdist_egg’ command so that it always runs the ‘rotate’
+command afterwards to delete all but the newest egg file. It doesn’t
+loop indefinitely on ‘bdist_egg’ because the alias is only expanded once
+when used.
+
+You can remove a defined alias with the ‘--remove’ (or ‘-r’) option,
+e.g.:
+
+ setup.py alias --global-config --remove daily
+
+would delete the “daily” alias we defined above.
+
+Aliases can be defined on a project-specific, per-user, or sitewide
+basis. The default is to define or remove a project-specific alias, but
+you can use any of the *note configuration file options: 5d. (listed
+under the *note saveopts: 5e. command, below) to determine which
+distutils configuration file an aliases will be added to (or removed
+from).
+
+Note that if you omit the “expansion” argument to the ‘alias’ command,
+you’ll get output showing that alias’ current definition (and what
+configuration file it’s defined in). If you omit the alias name as
+well, you’ll get a listing of all current aliases along with their
+configuration file locations.
+
+
+File: setuptools.info, Node: bdist_egg - Create a Python Egg for the project, Next: develop - Deploy the project source in “Development Mode”, Prev: alias - Define shortcuts for commonly used commands, Up: Command Reference
+
+1.1.14.2 ‘bdist_egg’ - Create a Python Egg for the project
+..........................................................
+
+ Warning: `eggs' are deprecated in favor of wheels, and not
+ supported by pip.
+
+This command generates a Python Egg (‘.egg’ file) for the project.
+Python Eggs are the preferred binary distribution format for
+EasyInstall, because they are cross-platform (for “pure” packages),
+directly importable, and contain project metadata including scripts and
+information about the project’s dependencies. They can be simply
+downloaded and added to ‘sys.path’ directly, or they can be placed in a
+directory on ‘sys.path’ and then automatically discovered by the egg
+runtime system.
+
+This command runs the *note egg_info: 3d. command (if it hasn’t already
+run) to update the project’s metadata (‘.egg-info’) directory. If you
+have added any extra metadata files to the ‘.egg-info’ directory, those
+files will be included in the new egg file’s metadata directory, for use
+by the egg runtime system or by any applications or frameworks that use
+that metadata.
+
+You won’t usually need to specify any special options for this command;
+just use ‘bdist_egg’ and you’re done. But there are a few options that
+may be occasionally useful:
+
+‘--dist-dir=DIR, -d DIR’
+
+ Set the directory where the ‘.egg’ file will be placed. If you
+ don’t supply this, then the ‘--dist-dir’ setting of the ‘bdist’
+ command will be used, which is usually a directory named ‘dist’ in
+ the project directory.
+
+‘--plat-name=PLATFORM, -p PLATFORM’
+
+ Set the platform name string that will be embedded in the egg’s
+ filename (assuming the egg contains C extensions). This can be
+ used to override the distutils default platform name with something
+ more meaningful. Keep in mind, however, that the egg runtime
+ system expects to see eggs with distutils platform names, so it may
+ ignore or reject eggs with non-standard platform names. Similarly,
+ the EasyInstall program may ignore them when searching web pages
+ for download links. However, if you are cross-compiling or doing
+ some other unusual things, you might find a use for this option.
+
+‘--exclude-source-files’
+
+ Don’t include any modules’ ‘.py’ files in the egg, just compiled
+ Python, C, and data files. (Note that this doesn’t affect any
+ ‘.py’ files in the EGG-INFO directory or its subdirectories, since
+ for example there may be scripts with a ‘.py’ extension which must
+ still be retained.) We don’t recommend that you use this option
+ except for packages that are being bundled for proprietary end-user
+ applications, or for “embedded” scenarios where space is at an
+ absolute premium. On the other hand, if your package is going to
+ be installed and used in compressed form, you might as well exclude
+ the source because Python’s ‘traceback’ module doesn’t currently
+ understand how to display zipped source code anyway, or how to deal
+ with files that are in a different place from where their code was
+ compiled.
+
+There are also some options you will probably never need, but which are
+there because they were copied from similar ‘bdist’ commands used as an
+example for creating this one. They may be useful for testing and
+debugging, however, which is why we kept them:
+
+‘--keep-temp, -k’
+
+ Keep the contents of the ‘--bdist-dir’ tree around after creating
+ the ‘.egg’ file.
+
+‘--bdist-dir=DIR, -b DIR’
+
+ Set the temporary directory for creating the distribution. The
+ entire contents of this directory are zipped to create the ‘.egg’
+ file, after running various installation commands to copy the
+ package’s modules, data, and extensions here.
+
+‘--skip-build’
+
+ Skip doing any “build” commands; just go straight to the
+ install-and-compress phases.
+
+
+File: setuptools.info, Node: develop - Deploy the project source in “Development Mode”, Next: egg_info - Create egg metadata and set build tags, Prev: bdist_egg - Create a Python Egg for the project, Up: Command Reference
+
+1.1.14.3 ‘develop’ - Deploy the project source in “Development Mode”
+....................................................................
+
+This command allows you to deploy your project’s source for use in one
+or more “staging areas” where it will be available for importing. This
+deployment is done in such a way that changes to the project source are
+immediately available in the staging area(s), without needing to run a
+build or install step after each change.
+
+The ‘develop’ command works by creating an ‘.egg-link’ file (named for
+the project) in the given staging area. If the staging area is Python’s
+‘site-packages’ directory, it also updates an ‘easy-install.pth’ file so
+that the project is on ‘sys.path’ by default for all programs run using
+that Python installation.
+
+The ‘develop’ command also installs wrapper scripts in the staging area
+(or a separate directory, as specified) that will ensure the project’s
+dependencies are available on ‘sys.path’ before running the project’s
+source scripts. And, it ensures that any missing project dependencies
+are available in the staging area, by downloading and installing them if
+necessary.
+
+Last, but not least, the ‘develop’ command invokes the ‘build_ext -i’
+command to ensure any C extensions in the project have been built and
+are up-to-date, and the ‘egg_info’ command to ensure the project’s
+metadata is updated (so that the runtime and wrappers know what the
+project’s dependencies are). If you make any changes to the project’s
+setup script or C extensions, you should rerun the ‘develop’ command
+against all relevant staging areas to keep the project’s scripts,
+metadata and extensions up-to-date. Most other kinds of changes to your
+project should not require any build operations or rerunning ‘develop’,
+but keep in mind that even minor changes to the setup script (e.g.
+changing an entry point definition) require you to re-run the ‘develop’
+or ‘test’ commands to keep the distribution updated.
+
+Here are some of the options that the ‘develop’ command accepts. Note
+that they affect the project’s dependencies as well as the project
+itself, so if you have dependencies that need to be installed and you
+use ‘--exclude-scripts’ (for example), the dependencies’ scripts will
+not be installed either! For this reason, you may want to use pip to
+install the project’s dependencies before using the ‘develop’ command,
+if you need finer control over the installation options for
+dependencies.
+
+‘--uninstall, -u’
+
+ Un-deploy the current project. You may use the ‘--install-dir’ or
+ ‘-d’ option to designate the staging area. The created ‘.egg-link’
+ file will be removed, if present and it is still pointing to the
+ project directory. The project directory will be removed from
+ ‘easy-install.pth’ if the staging area is Python’s ‘site-packages’
+ directory.
+
+ Note that this option currently does `not' uninstall script
+ wrappers! You must uninstall them yourself, or overwrite them by
+ using pip to install a different version of the package. You can
+ also avoid installing script wrappers in the first place, if you
+ use the ‘--exclude-scripts’ (aka ‘-x’) option when you run
+ ‘develop’ to deploy the project.
+
+‘--multi-version, -m’
+
+ “Multi-version” mode. Specifying this option prevents ‘develop’
+ from adding an ‘easy-install.pth’ entry for the project(s) being
+ deployed, and if an entry for any version of a project already
+ exists, the entry will be removed upon successful deployment. In
+ multi-version mode, no specific version of the package is available
+ for importing, unless you use ‘pkg_resources.require()’ to put it
+ on ‘sys.path’, or you are running a wrapper script generated by
+ ‘setuptools’. (In which case the wrapper script calls ‘require()’
+ for you.)
+
+ Note that if you install to a directory other than ‘site-packages’,
+ this option is automatically in effect, because ‘.pth’ files can
+ only be used in ‘site-packages’ (at least in Python 2.3 and 2.4).
+ So, if you use the ‘--install-dir’ or ‘-d’ option (or they are set
+ via configuration file(s)) your project and its dependencies will
+ be deployed in multi- version mode.
+
+‘--install-dir=DIR, -d DIR’
+
+ Set the installation directory (staging area). If this option is
+ not directly specified on the command line or in a distutils
+ configuration file, the distutils default installation location is
+ used. Normally, this will be the ‘site-packages’ directory, but if
+ you are using distutils configuration files, setting things like
+ ‘prefix’ or ‘install_lib’, then those settings are taken into
+ account when computing the default staging area.
+
+‘--script-dir=DIR, -s DIR’
+
+ Set the script installation directory. If you don’t supply this
+ option (via the command line or a configuration file), but you
+ `have' supplied an ‘--install-dir’ (via command line or config
+ file), then this option defaults to the same directory, so that the
+ scripts will be able to find their associated package installation.
+ Otherwise, this setting defaults to the location where the
+ distutils would normally install scripts, taking any distutils
+ configuration file settings into account.
+
+‘--exclude-scripts, -x’
+
+ Don’t deploy script wrappers. This is useful if you don’t want to
+ disturb existing versions of the scripts in the staging area.
+
+‘--always-copy, -a’
+
+ Copy all needed distributions to the staging area, even if they are
+ already present in another directory on ‘sys.path’. By default, if
+ a requirement can be met using a distribution that is already
+ available in a directory on ‘sys.path’, it will not be copied to
+ the staging area.
+
+‘--egg-path=DIR’
+
+ Force the generated ‘.egg-link’ file to use a specified relative
+ path to the source directory. This can be useful in circumstances
+ where your installation directory is being shared by code running
+ under multiple platforms (e.g. Mac and Windows) which have
+ different absolute locations for the code under development, but
+ the same `relative' locations with respect to the installation
+ directory. If you use this option when installing, you must supply
+ the same relative path when uninstalling.
+
+In addition to the above options, the ‘develop’ command also accepts all
+of the same options accepted by ‘easy_install’. If you’ve configured
+any ‘easy_install’ settings in your ‘setup.cfg’ (or other distutils
+config files), the ‘develop’ command will use them as defaults, unless
+you override them in a ‘[develop]’ section or on the command line.
+
+
+File: setuptools.info, Node: egg_info - Create egg metadata and set build tags, Next: rotate - Delete outdated distribution files, Prev: develop - Deploy the project source in “Development Mode”, Up: Command Reference
+
+1.1.14.4 ‘egg_info’ - Create egg metadata and set build tags
+............................................................
+
+This command performs two operations: it updates a project’s ‘.egg-info’
+metadata directory (used by the ‘bdist_egg’, ‘develop’, and ‘test’
+commands), and it allows you to temporarily change a project’s version
+string, to support “daily builds” or “snapshot” releases. It is run
+automatically by the ‘sdist’, ‘bdist_egg’, ‘develop’, and ‘test’
+commands in order to update the project’s metadata, but you can also
+specify it explicitly in order to temporarily change the project’s
+version string while executing other commands. (It also generates the
+‘.egg-info/SOURCES.txt’ manifest file, which is used when you are
+building source distributions.)
+
+In addition to writing the core egg metadata defined by ‘setuptools’ and
+required by ‘pkg_resources’, this command can be extended to write other
+metadata files as well, by defining entry points in the
+‘egg_info.writers’ group. See the section on *note Adding new EGG-INFO
+Files: 4b. below for more details. Note that using additional metadata
+writers may require you to include a ‘setup_requires’ argument to
+‘setup()’ in order to ensure that the desired writers are available on
+‘sys.path’.
+
+* Menu:
+
+* Release Tagging Options::
+* Other egg_info Options::
+* egg_info Examples::
+
+
+File: setuptools.info, Node: Release Tagging Options, Next: Other egg_info Options, Up: egg_info - Create egg metadata and set build tags
+
+1.1.14.5 Release Tagging Options
+................................
+
+The following options can be used to modify the project’s version string
+for all remaining commands on the setup command line. The options are
+processed in the order shown, so if you use more than one, the requested
+tags will be added in the following order:
+
+‘--tag-build=NAME, -b NAME’
+
+ Append NAME to the project’s version string. Due to the way
+ setuptools processes “pre-release” version suffixes beginning with
+ the letters “a” through “e” (like “alpha”, “beta”, and
+ “candidate”), you will usually want to use a tag like “.build” or
+ “.dev”, as this will cause the version number to be considered
+ `lower' than the project’s default version. (If you want to make
+ the version number `higher' than the default version, you can
+ always leave off –tag-build and then use one or both of the
+ following options.)
+
+ If you have a default build tag set in your ‘setup.cfg’, you can
+ suppress it on the command line using ‘-b ""’ or ‘--tag-build=""’
+ as an argument to the ‘egg_info’ command.
+
+‘--tag-date, -d’
+
+ Add a date stamp of the form “-YYYYMMDD” (e.g. “-20050528”) to the
+ project’s version number.
+
+‘--no-date, -D’
+
+ Don’t include a date stamp in the version number. This option is
+ included so you can override a default setting in ‘setup.cfg’.
+
+(Note: Because these options modify the version number used for source
+and binary distributions of your project, you should first make sure
+that you know how the resulting version numbers will be interpreted by
+automated tools like pip. See the section above on *note Specifying
+Your Project’s Version: 3e. for an explanation of pre- and post-release
+tags, as well as tips on how to choose and verify a versioning scheme
+for your project.)
+
+For advanced uses, there is one other option that can be set, to change
+the location of the project’s ‘.egg-info’ directory. Commands that need
+to find the project’s source directory or metadata should get it from
+this setting:
+
+
+File: setuptools.info, Node: Other egg_info Options, Next: egg_info Examples, Prev: Release Tagging Options, Up: egg_info - Create egg metadata and set build tags
+
+1.1.14.6 Other ‘egg_info’ Options
+.................................
+
+‘--egg-base=SOURCEDIR, -e SOURCEDIR’
+
+ Specify the directory that should contain the .egg-info directory.
+ This should normally be the root of your project’s source tree
+ (which is not necessarily the same as your project directory; some
+ projects use a ‘src’ or ‘lib’ subdirectory as the source root).
+ You should not normally need to specify this directory, as it is
+ normally determined from the ‘package_dir’ argument to the
+ ‘setup()’ function, if any. If there is no ‘package_dir’ set, this
+ option defaults to the current directory.
+
+
+File: setuptools.info, Node: egg_info Examples, Prev: Other egg_info Options, Up: egg_info - Create egg metadata and set build tags
+
+1.1.14.7 ‘egg_info’ Examples
+............................
+
+Creating a dated “nightly build” snapshot egg:
+
+ setup.py egg_info --tag-date --tag-build=DEV bdist_egg
+
+Creating a release with no version tags, even if some default tags are
+specified in ‘setup.cfg’:
+
+ setup.py egg_info -RDb "" sdist bdist_egg
+
+(Notice that ‘egg_info’ must always appear on the command line `before'
+any commands that you want the version changes to apply to.)
+
+
+File: setuptools.info, Node: rotate - Delete outdated distribution files, Next: saveopts - Save used options to a configuration file, Prev: egg_info - Create egg metadata and set build tags, Up: Command Reference
+
+1.1.14.8 ‘rotate’ - Delete outdated distribution files
+......................................................
+
+As you develop new versions of your project, your distribution (‘dist’)
+directory will gradually fill up with older source and/or binary
+distribution files. The ‘rotate’ command lets you automatically clean
+these up, keeping only the N most-recently modified files matching a
+given pattern.
+
+‘--match=PATTERNLIST, -m PATTERNLIST’
+
+ Comma-separated list of glob patterns to match. This option is
+ `required'. The project name and ‘-*’ is prepended to the supplied
+ patterns, in order to match only distributions belonging to the
+ current project (in case you have a shared distribution directory
+ for multiple projects). Typically, you will use a glob pattern
+ like ‘.zip’ or ‘.egg’ to match files of the specified type. Note
+ that each supplied pattern is treated as a distinct group of files
+ for purposes of selecting files to delete.
+
+‘--keep=COUNT, -k COUNT’
+
+ Number of matching distributions to keep. For each group of files
+ identified by a pattern specified with the ‘--match’ option, delete
+ all but the COUNT most-recently-modified files in that group. This
+ option is `required'.
+
+‘--dist-dir=DIR, -d DIR’
+
+ Directory where the distributions are. This defaults to the value
+ of the ‘bdist’ command’s ‘--dist-dir’ option, which will usually be
+ the project’s ‘dist’ subdirectory.
+
+`Example 1': Delete all .tar.gz files from the distribution directory,
+except for the 3 most recently modified ones:
+
+ setup.py rotate --match=.tar.gz --keep=3
+
+`Example 2': Delete all Python 2.3 or Python 2.4 eggs from the
+distribution directory, except the most recently modified one for each
+Python version:
+
+ setup.py rotate --match=-py2.3*.egg,-py2.4*.egg --keep=1
+
+
+File: setuptools.info, Node: saveopts - Save used options to a configuration file, Next: setopt - Set a distutils or setuptools option in a config file, Prev: rotate - Delete outdated distribution files, Up: Command Reference
+
+1.1.14.9 ‘saveopts’ - Save used options to a configuration file
+...............................................................
+
+Finding and editing ‘distutils’ configuration files can be a pain,
+especially since you also have to translate the configuration options
+from command-line form to the proper configuration file format. You can
+avoid these hassles by using the ‘saveopts’ command. Just add it to the
+command line to save the options you used. For example, this command
+builds the project using the ‘mingw32’ C compiler, then saves the
+–compiler setting as the default for future builds (even those run
+implicitly by the ‘install’ command):
+
+ setup.py build --compiler=mingw32 saveopts
+
+The ‘saveopts’ command saves all options for every command specified on
+the command line to the project’s local ‘setup.cfg’ file, unless you use
+one of the *note configuration file options: 5d. to change where the
+options are saved. For example, this command does the same as above,
+but saves the compiler setting to the site-wide (global) distutils
+configuration:
+
+ setup.py build --compiler=mingw32 saveopts -g
+
+Note that it doesn’t matter where you place the ‘saveopts’ command on
+the command line; it will still save all the options specified for all
+commands. For example, this is another valid way to spell the last
+example:
+
+ setup.py saveopts -g build --compiler=mingw32
+
+Note, however, that all of the commands specified are always run,
+regardless of where ‘saveopts’ is placed on the command line.
+
+* Menu:
+
+* Configuration File Options::
+
+
+File: setuptools.info, Node: Configuration File Options, Up: saveopts - Save used options to a configuration file
+
+1.1.14.10 Configuration File Options
+....................................
+
+Normally, settings such as options and aliases are saved to the
+project’s local ‘setup.cfg’ file. But you can override this and save
+them to the global or per-user configuration files, or to a
+manually-specified filename.
+
+‘--global-config, -g’
+
+ Save settings to the global ‘distutils.cfg’ file inside the
+ ‘distutils’ package directory. You must have write access to that
+ directory to use this option. You also can’t combine this option
+ with ‘-u’ or ‘-f’.
+
+‘--user-config, -u’
+
+ Save settings to the current user’s ‘~/.pydistutils.cfg’ (POSIX) or
+ ‘$HOME/pydistutils.cfg’ (Windows) file. You can’t combine this
+ option with ‘-g’ or ‘-f’.
+
+‘--filename=FILENAME, -f FILENAME’
+
+ Save settings to the specified configuration file to use. You
+ can’t combine this option with ‘-g’ or ‘-u’. Note that if you
+ specify a non-standard filename, the ‘distutils’ and ‘setuptools’
+ will not use the file’s contents. This option is mainly included
+ for use in testing.
+
+These options are used by other ‘setuptools’ commands that modify
+configuration files, such as the *note alias: 40. and *note setopt: 67.
+commands.
+
+
+File: setuptools.info, Node: setopt - Set a distutils or setuptools option in a config file, Next: test - Build package and run a unittest suite, Prev: saveopts - Save used options to a configuration file, Up: Command Reference
+
+1.1.14.11 ‘setopt’ - Set a distutils or setuptools option in a config file
+..........................................................................
+
+This command is mainly for use by scripts, but it can also be used as a
+quick and dirty way to change a distutils configuration option without
+having to remember what file the options are in and then open an editor.
+
+`Example 1'. Set the default C compiler to ‘mingw32’ (using long option
+names):
+
+ setup.py setopt --command=build --option=compiler --set-value=mingw32
+
+`Example 2'. Remove any setting for the distutils default package
+installation directory (short option names):
+
+ setup.py setopt -c install -o install_lib -r
+
+Options for the ‘setopt’ command:
+
+‘--command=COMMAND, -c COMMAND’
+
+ Command to set the option for. This option is required.
+
+‘--option=OPTION, -o OPTION’
+
+ The name of the option to set. This option is required.
+
+‘--set-value=VALUE, -s VALUE’
+
+ The value to set the option to. Not needed if ‘-r’ or ‘--remove’
+ is set.
+
+‘--remove, -r’
+
+ Remove (unset) the option, instead of setting it.
+
+In addition to the above options, you may use any of the *note
+configuration file options: 5d. (listed under the *note saveopts: 5e.
+command, above) to determine which distutils configuration file the
+option will be added to (or removed from).
+
+
+File: setuptools.info, Node: test - Build package and run a unittest suite, Next: upload - Upload source and/or egg distributions to PyPI, Prev: setopt - Set a distutils or setuptools option in a config file, Up: Command Reference
+
+1.1.14.12 ‘test’ - Build package and run a unittest suite
+.........................................................
+
+ Warning: ‘test’ is deprecated and will be removed in a future
+ version. Users looking for a generic test entry point independent
+ of test runner are encouraged to use tox(1).
+
+When doing test-driven development, or running automated builds that
+need testing before they are deployed for downloading or use, it’s often
+useful to be able to run a project’s unit tests without actually
+deploying the project anywhere, even using the ‘develop’ command. The
+‘test’ command runs a project’s unit tests without actually deploying
+it, by temporarily putting the project’s source on ‘sys.path’, after
+first running ‘build_ext -i’ and ‘egg_info’ to ensure that any C
+extensions and project metadata are up-to-date.
+
+To use this command, your project’s tests must be wrapped in a
+‘unittest’ test suite by either a function, a ‘TestCase’ class or
+method, or a module or package containing ‘TestCase’ classes. If the
+named suite is a module, and the module has an ‘additional_tests()’
+function, it is called and the result (which must be a
+‘unittest.TestSuite’) is added to the tests to be run. If the named
+suite is a package, any submodules and subpackages are recursively added
+to the overall test suite. (Note: if your project specifies a
+‘test_loader’, the rules for processing the chosen ‘test_suite’ may
+differ; see the *note test_loader: 57. documentation for more details.)
+
+Note that many test systems including ‘doctest’ support wrapping their
+non-‘unittest’ tests in ‘TestSuite’ objects. So, if you are using a
+test package that does not support this, we suggest you encourage its
+developers to implement test suite support, as this is a convenient and
+standard way to aggregate a collection of tests to be run under a common
+test harness.
+
+By default, tests will be run in the “verbose” mode of the ‘unittest’
+package’s text test runner, but you can get the “quiet” mode (just dots)
+if you supply the ‘-q’ or ‘--quiet’ option, either as a global option to
+the setup script (e.g. ‘setup.py -q test’) or as an option for the
+‘test’ command itself (e.g. ‘setup.py test -q’). There is one other
+option available:
+
+‘--test-suite=NAME, -s NAME’
+
+ Specify the test suite (or module, class, or method) to be run
+ (e.g. ‘some_module.test_suite’). The default for this option can
+ be set by giving a ‘test_suite’ argument to the ‘setup()’ function,
+ e.g.:
+
+ setup(
+ # ...
+ test_suite="my_package.tests.test_all"
+ )
+
+ If you did not set a ‘test_suite’ in your ‘setup()’ call, and do
+ not provide a ‘--test-suite’ option, an error will occur.
+
+New in 41.5.0: Deprecated the test command.
+
+ ---------- Footnotes ----------
+
+ (1) https://tox.readthedocs.io
+
+
+File: setuptools.info, Node: upload - Upload source and/or egg distributions to PyPI, Prev: test - Build package and run a unittest suite, Up: Command Reference
+
+1.1.14.13 ‘upload’ - Upload source and/or egg distributions to PyPI
+...................................................................
+
+The ‘upload’ command was deprecated in version 40.0 and removed in
+version 42.0. Use twine(1) instead.
+
+For more information on the current best practices in uploading your
+packages to PyPI, see the Python Packaging User Guide’s “Packaging
+Python Projects” tutorial specifically the section on uploading the
+distribution archives(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/p/twine
+
+ (2)
+https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives
+
+
+File: setuptools.info, Node: Using setuptools to package and distribute your project, Next: Automatic Resource Extraction, Prev: Command Reference, Up: Transition to PEP517
+
+1.1.15 Using setuptools to package and distribute your project
+--------------------------------------------------------------
+
+‘setuptools’ offers a variety of functionalities that make it easy to
+build and distribute your python package. Here we provide an overview
+on the commonly used ones.
+
+
+File: setuptools.info, Node: Automatic Resource Extraction, Next: Defining Additional Metadata, Prev: Using setuptools to package and distribute your project, Up: Transition to PEP517
+
+1.1.16 Automatic Resource Extraction
+------------------------------------
+
+If you are using tools that expect your resources to be “real” files, or
+your project includes non-extension native libraries or other files that
+your C extensions expect to be able to access, you may need to list
+those files in the ‘eager_resources’ argument to ‘setup()’, so that the
+files will be extracted together, whenever a C extension in the project
+is imported.
+
+This is especially important if your project includes shared libraries
+`other' than distutils-built C extensions, and those shared libraries
+use file extensions other than ‘.dll’, ‘.so’, or ‘.dylib’, which are the
+extensions that setuptools 0.6a8 and higher automatically detects as
+shared libraries and adds to the ‘native_libs.txt’ file for you. Any
+shared libraries whose names do not end with one of those extensions
+should be listed as ‘eager_resources’, because they need to be present
+in the filesystem when he C extensions that link to them are used.
+
+The ‘pkg_resources’ runtime for compressed packages will automatically
+extract `all' C extensions and ‘eager_resources’ at the same time,
+whenever `any' C extension or eager resource is requested via the
+‘resource_filename()’ API. (C extensions are imported using
+‘resource_filename()’ internally.) This ensures that C extensions will
+see all of the “real” files that they expect to see.
+
+Note also that you can list directory resource names in
+‘eager_resources’ as well, in which case the directory’s contents
+(including subdirectories) will be extracted whenever any C extension or
+eager resource is requested.
+
+Please note that if you’re not sure whether you need to use this
+argument, you don’t! It’s really intended to support projects with lots
+of non-Python dependencies and as a last resort for crufty projects that
+can’t otherwise handle being compressed. If your package is pure
+Python, Python plus data files, or Python plus C, you really don’t need
+this. You’ve got to be using either C or an external program that needs
+“real” files in your project before there’s any possibility of
+‘eager_resources’ being relevant to your project.
+
+
+File: setuptools.info, Node: Defining Additional Metadata, Next: Setting the zip_safe flag, Prev: Automatic Resource Extraction, Up: Transition to PEP517
+
+1.1.17 Defining Additional Metadata
+-----------------------------------
+
+Some extensible applications and frameworks may need to define their own
+kinds of metadata to include in eggs, which they can then access using
+the ‘pkg_resources’ metadata APIs. Ordinarily, this is done by having
+plugin developers include additional files in their
+‘ProjectName.egg-info’ directory. However, since it can be tedious to
+create such files by hand, you may want to create a distutils extension
+that will create the necessary files from arguments to ‘setup()’, in
+much the same way that ‘setuptools’ does for many of the ‘setup()’
+arguments it adds. See the section below on *note Creating distutils
+Extensions: 46. for more details, especially the subsection on *note
+Adding new EGG-INFO Files: 4b.
+
+
+File: setuptools.info, Node: Setting the zip_safe flag, Prev: Defining Additional Metadata, Up: Transition to PEP517
+
+1.1.18 Setting the ‘zip_safe’ flag
+----------------------------------
+
+For some use cases (such as bundling as part of a larger application),
+Python packages may be run directly from a zip file. Not all packages,
+however, are capable of running in compressed form, because they may
+expect to be able to access either source code or data files as normal
+operating system files. So, ‘setuptools’ can install your project as a
+zipfile or a directory, and its default choice is determined by the
+project’s ‘zip_safe’ flag.
+
+You can pass a True or False value for the ‘zip_safe’ argument to the
+‘setup()’ function, or you can omit it. If you omit it, the ‘bdist_egg’
+command will analyze your project’s contents to see if it can detect any
+conditions that would prevent it from working in a zipfile. It will
+output notices to the console about any such conditions that it finds.
+
+Currently, this analysis is extremely conservative: it will consider the
+project unsafe if it contains any C extensions or datafiles whatsoever.
+This does `not' mean that the project can’t or won’t work as a zipfile!
+It just means that the ‘bdist_egg’ authors aren’t yet comfortable
+asserting that the project `will' work. If the project contains no C or
+data files, and does no ‘__file__’ or ‘__path__’ introspection or source
+code manipulation, then there is an extremely solid chance the project
+will work when installed as a zipfile. (And if the project uses
+‘pkg_resources’ for all its data file access, then C extensions and
+other data files shouldn’t be a problem at all. See the *note Accessing
+Data Files at Runtime: 33. section above for more information.)
+
+However, if ‘bdist_egg’ can’t be `sure' that your package will work, but
+you’ve checked over all the warnings it issued, and you are either
+satisfied it `will' work (or if you want to try it for yourself), then
+you should set ‘zip_safe’ to ‘True’ in your ‘setup()’ call. If it turns
+out that it doesn’t work, you can always change it to ‘False’, which
+will force ‘setuptools’ to install your project as a directory rather
+than as a zipfile.
+
+In the future, as we gain more experience with different packages and
+become more satisfied with the robustness of the ‘pkg_resources’
+runtime, the “zip safety” analysis may become less conservative.
+However, we strongly recommend that you determine for yourself whether
+your project functions correctly when installed as a zipfile, correct
+any problems if you can, and then make an explicit declaration of ‘True’
+or ‘False’ for the ‘zip_safe’ flag, so that it will not be necessary for
+‘bdist_egg’ to try to guess whether your project can work as a zipfile.
+
+
+File: setuptools.info, Node: Build System Support, Next: Package Discovery and Resource Access using pkg_resources, Prev: Building and Distributing Packages with Setuptools, Up: Top
+
+2 Build System Support
+**********************
+
+* Menu:
+
+* What is it?::
+* How to use it?::
+
+
+File: setuptools.info, Node: What is it?, Next: How to use it?, Up: Build System Support
+
+2.1 What is it?
+===============
+
+Python packaging has come a long way(1).
+
+The traditional ‘setuptools’ way of packgaging Python modules uses a
+‘setup()’ function within the ‘setup.py’ script. Commands such as
+‘python setup.py bdist’ or ‘python setup.py bdist_wheel’ generate a
+distribution bundle and ‘python setup.py install’ installs the
+distribution. This interface makes it difficult to choose other
+packaging tools without an overhaul. Because ‘setup.py’ scripts allowed
+for arbitrary execution, it proved difficult to provide a reliable user
+experience across environments and history.
+
+PEP 517(2) therefore came to rescue and specified a new standard to
+package and distribute Python modules. Under PEP 517:
+
+ a ‘pyproject.toml’ file is used to specify what program to use for
+ generating distribution.
+
+ Then, two functions provided by the program,
+ ‘build_wheel(directory: str)’ and ‘build_sdist(directory: str)’
+ create the distribution bundle at the specified ‘directory’. The
+ program is free to use its own configuration script or extend the
+ ‘.toml’ file.
+
+ Lastly, ‘pip install *.whl’ or ‘pip install *.tar.gz’ does the
+ actual installation. If ‘*.whl’ is available, ‘pip’ will go ahead
+ and copy the files into ‘site-packages’ directory. If not, ‘pip’
+ will look at ‘pyproject.toml’ and decide what program to use to
+ ‘build from source’ (the default is ‘setuptools’)
+
+With this standard, switching between packaging tools becomes a lot
+easier. ‘build_meta’ implements ‘setuptools’’ build system support.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.bernat.tech/pep-517-518/
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: How to use it?, Prev: What is it?, Up: Build System Support
+
+2.2 How to use it?
+==================
+
+Starting with a package that you want to distribute. You will need your
+source scripts, a ‘pyproject.toml’ file and a ‘setup.cfg’ file:
+
+ ~/meowpkg/
+ pyproject.toml
+ setup.cfg
+ meowpkg/__init__.py
+
+The pyproject.toml file is required to specify the build system (i.e.
+what is being used to package your scripts and install from source). To
+use it with setuptools, the content would be:
+
+ [build-system]
+ requires = ["setuptools", "wheel"]
+ build-backend = "setuptools.build_meta"
+
+Use ‘setuptools’’ *note declarative config: 50. to specify the package
+information:
+
+ [metadata]
+ name = meowpkg
+ version = 0.0.1
+ description = a package that meows
+
+ [options]
+ packages = find:
+
+Now generate the distribution. Although the PyPA is still working to
+provide a recommended tool(1) to build packages, the pep517 package(2)
+provides this functionality. To build the package:
+
+ $ pip install -q pep517
+ $ mkdir dist
+ $ python -m pep517.build .
+
+And now it’s done! The ‘.whl’ file and ‘.tar.gz’ can then be
+distributed and installed:
+
+ dist/
+ meowpkg-0.0.1.whl
+ meowpkg-0.0.1.tar.gz
+
+ $ pip install dist/meowpkg-0.0.1.whl
+
+or:
+
+ $ pip install dist/meowpkg-0.0.1.tar.gz
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/packaging-problems/issues/219
+
+ (2) https://pypi.org/project/pep517
+
+
+File: setuptools.info, Node: Package Discovery and Resource Access using pkg_resources, Next: Keywords, Prev: Build System Support, Up: Top
+
+3 Package Discovery and Resource Access using ‘pkg_resources’
+*************************************************************
+
+The ‘pkg_resources’ module distributed with ‘setuptools’ provides an API
+for Python libraries to access their resource files, and for extensible
+applications and frameworks to automatically discover plugins. It also
+provides runtime support for using C extensions that are inside
+zipfile-format eggs, support for merging packages that have
+separately-distributed modules or subpackages, and APIs for managing
+Python’s current “working set” of active packages.
+
+* Menu:
+
+* Overview::
+* API Reference::
+
+
+File: setuptools.info, Node: Overview, Next: API Reference, Up: Package Discovery and Resource Access using pkg_resources
+
+3.1 Overview
+============
+
+The ‘pkg_resources’ module provides runtime facilities for finding,
+introspecting, activating and using installed Python distributions.
+Some of the more advanced features (notably the support for parallel
+installation of multiple versions) rely specifically on the “egg” format
+(either as a zip archive or subdirectory), while others (such as plugin
+discovery) will work correctly so long as “egg-info” metadata
+directories are available for relevant distributions.
+
+Eggs are a distribution format for Python modules, similar in concept to
+Java’s “jars” or Ruby’s “gems”, or the “wheel” format defined in PEP
+427. However, unlike a pure distribution format, eggs can also be
+installed and added directly to ‘sys.path’ as an import location. When
+installed in this way, eggs are `discoverable', meaning that they carry
+metadata that unambiguously identifies their contents and dependencies.
+This means that an installed egg can be `automatically' found and added
+to ‘sys.path’ in response to simple requests of the form, “get me
+everything I need to use docutils’ PDF support”. This feature allows
+mutually conflicting versions of a distribution to co-exist in the same
+Python installation, with individual applications activating the desired
+version at runtime by manipulating the contents of ‘sys.path’ (this
+differs from the virtual environment approach, which involves creating
+isolated environments for each application).
+
+The following terms are needed in order to explain the capabilities
+offered by this module:
+
+project
+
+ A library, framework, script, plugin, application, or collection of
+ data or other resources, or some combination thereof. Projects are
+ assumed to have “relatively unique” names, e.g. names registered
+ with PyPI.
+
+release
+
+ A snapshot of a project at a particular point in time, denoted by a
+ version identifier.
+
+distribution
+
+ A file or files that represent a particular release.
+
+importable distribution
+
+ A file or directory that, if placed on ‘sys.path’, allows Python to
+ import any modules contained within it.
+
+pluggable distribution
+
+ An importable distribution whose filename unambiguously identifies
+ its release (i.e. project and version), and whose contents
+ unambiguously specify what releases of other projects will satisfy
+ its runtime requirements.
+
+extra
+
+ An “extra” is an optional feature of a release, that may impose
+ additional runtime requirements. For example, if docutils PDF
+ support required a PDF support library to be present, docutils
+ could define its PDF support as an “extra”, and list what other
+ project releases need to be available in order to provide it.
+
+environment
+
+ A collection of distributions potentially available for importing,
+ but not necessarily active. More than one distribution (i.e.
+ release version) for a given project may be present in an
+ environment.
+
+working set
+
+ A collection of distributions actually available for importing, as
+ on ‘sys.path’. At most one distribution (release version) of a
+ given project may be present in a working set, as otherwise there
+ would be ambiguity as to what to import.
+
+eggs
+
+ Eggs are pluggable distributions in one of the three formats
+ currently supported by ‘pkg_resources’. There are built eggs,
+ development eggs, and egg links. Built eggs are directories or
+ zipfiles whose name ends with ‘.egg’ and follows the egg naming
+ conventions, and contain an ‘EGG-INFO’ subdirectory (zipped or
+ otherwise). Development eggs are normal directories of Python code
+ with one or more ‘ProjectName.egg-info’ subdirectories. The
+ development egg format is also used to provide a default version of
+ a distribution that is available to software that doesn’t use
+ ‘pkg_resources’ to request specific versions. Egg links are
+ ‘*.egg-link’ files that contain the name of a built or development
+ egg, to support symbolic linking on platforms that do not have
+ native symbolic links (or where the symbolic link support is
+ limited).
+
+(For more information about these terms and concepts, see also this
+architectural overview(1) of ‘pkg_resources’ and Python Eggs in
+general.)
+
+ ---------- Footnotes ----------
+
+ (1)
+http://mail.python.org/pipermail/distutils-sig/2005-June/004652.html
+
+
+File: setuptools.info, Node: API Reference, Prev: Overview, Up: Package Discovery and Resource Access using pkg_resources
+
+3.2 API Reference
+=================
+
+* Menu:
+
+* Namespace Package Support::
+* WorkingSet Objects::
+* Environment Objects::
+* Requirement Objects::
+* Entry Points: Entry Points<2>.
+* Distribution Objects::
+* ResourceManager API::
+* Metadata API::
+* Exceptions::
+* Supporting Custom Importers::
+* Utility Functions::
+
+
+File: setuptools.info, Node: Namespace Package Support, Next: WorkingSet Objects, Up: API Reference
+
+3.2.1 Namespace Package Support
+-------------------------------
+
+A namespace package is a package that only contains other packages and
+modules, with no direct contents of its own. Such packages can be split
+across multiple, separately-packaged distributions. They are normally
+used to split up large packages produced by a single organization, such
+as in the ‘zope’ namespace package for Zope Corporation packages, and
+the ‘peak’ namespace package for the Python Enterprise Application Kit.
+
+To create a namespace package, you list it in the ‘namespace_packages’
+argument to ‘setup()’, in your project’s ‘setup.py’. (See the *note
+setuptools documentation on namespace packages: 1c. for more information
+on this.) Also, you must add a ‘declare_namespace()’ call in the
+package’s ‘__init__.py’ file(s):
+
+‘declare_namespace(name)’
+
+ Declare that the dotted package name ‘name’ is a “namespace
+ package” whose contained packages and modules may be spread across
+ multiple distributions. The named package’s ‘__path__’ will be
+ extended to include the corresponding package in all distributions
+ on ‘sys.path’ that contain a package of that name. (More
+ precisely, if an importer’s ‘find_module(name)’ returns a loader,
+ then it will also be searched for the package’s contents.)
+ Whenever a Distribution’s ‘activate()’ method is invoked, it checks
+ for the presence of namespace packages and updates their ‘__path__’
+ contents accordingly.
+
+Applications that manipulate namespace packages or directly alter
+‘sys.path’ at runtime may also need to use this API function:
+
+‘fixup_namespace_packages(path_item)’
+
+ Declare that ‘path_item’ is a newly added item on ‘sys.path’ that
+ may need to be used to update existing namespace packages.
+ Ordinarily, this is called for you when an egg is automatically
+ added to ‘sys.path’, but if your application modifies ‘sys.path’ to
+ include locations that may contain portions of a namespace package,
+ you will need to call this function to ensure they are added to the
+ existing namespace packages.
+
+Although by default ‘pkg_resources’ only supports namespace packages for
+filesystem and zip importers, you can extend its support to other
+“importers” compatible with PEP 302 using the
+‘register_namespace_handler()’ function. See the section below on *note
+Supporting Custom Importers: 7a. for details.
+
+
+File: setuptools.info, Node: WorkingSet Objects, Next: Environment Objects, Prev: Namespace Package Support, Up: API Reference
+
+3.2.2 ‘WorkingSet’ Objects
+--------------------------
+
+The ‘WorkingSet’ class provides access to a collection of “active”
+distributions. In general, there is only one meaningful ‘WorkingSet’
+instance: the one that represents the distributions that are currently
+active on ‘sys.path’. This global instance is available under the name
+‘working_set’ in the ‘pkg_resources’ module. However, specialized tools
+may wish to manipulate working sets that don’t correspond to ‘sys.path’,
+and therefore may wish to create other ‘WorkingSet’ instances.
+
+It’s important to note that the global ‘working_set’ object is
+initialized from ‘sys.path’ when ‘pkg_resources’ is first imported, but
+is only updated if you do all future ‘sys.path’ manipulation via
+‘pkg_resources’ APIs. If you manually modify ‘sys.path’, you must
+invoke the appropriate methods on the ‘working_set’ instance to keep it
+in sync. Unfortunately, Python does not provide any way to detect
+arbitrary changes to a list object like ‘sys.path’, so ‘pkg_resources’
+cannot automatically update the ‘working_set’ based on changes to
+‘sys.path’.
+
+‘WorkingSet(entries=None)’
+
+ Create a ‘WorkingSet’ from an iterable of path entries. If
+ ‘entries’ is not supplied, it defaults to the value of ‘sys.path’
+ at the time the constructor is called.
+
+ Note that you will not normally construct ‘WorkingSet’ instances
+ yourself, but instead you will implicitly or explicitly use the
+ global ‘working_set’ instance. For the most part, the
+ ‘pkg_resources’ API is designed so that the ‘working_set’ is used
+ by default, such that you don’t have to explicitly refer to it most
+ of the time.
+
+All distributions available directly on ‘sys.path’ will be activated
+automatically when ‘pkg_resources’ is imported. This behaviour can
+cause version conflicts for applications which require non-default
+versions of those distributions. To handle this situation,
+‘pkg_resources’ checks for a ‘__requires__’ attribute in the ‘__main__’
+module when initializing the default working set, and uses this to
+ensure a suitable version of each affected distribution is activated.
+For example:
+
+ __requires__ = ["CherryPy < 3"] # Must be set before pkg_resources import
+ import pkg_resources
+
+* Menu:
+
+* Basic WorkingSet Methods::
+* WorkingSet Methods and Attributes::
+* Receiving Change Notifications::
+* Locating Plugins::
+
+
+File: setuptools.info, Node: Basic WorkingSet Methods, Next: WorkingSet Methods and Attributes, Up: WorkingSet Objects
+
+3.2.2.1 Basic ‘WorkingSet’ Methods
+..................................
+
+The following methods of ‘WorkingSet’ objects are also available as
+module- level functions in ‘pkg_resources’ that apply to the default
+‘working_set’ instance. Thus, you can use e.g.
+‘pkg_resources.require()’ as an abbreviation for
+‘pkg_resources.working_set.require()’:
+
+‘require(*requirements)’
+
+ Ensure that distributions matching ‘requirements’ are activated
+
+ ‘requirements’ must be a string or a (possibly-nested) sequence
+ thereof, specifying the distributions and versions required. The
+ return value is a sequence of the distributions that needed to be
+ activated to fulfill the requirements; all relevant distributions
+ are included, even if they were already activated in this working
+ set.
+
+ For the syntax of requirement specifiers, see the section below on
+ *note Requirements Parsing: 7d.
+
+ In general, it should not be necessary for you to call this method
+ directly. It’s intended more for use in quick-and-dirty scripting
+ and interactive interpreter hacking than for production use. If
+ you’re creating an actual library or application, it’s strongly
+ recommended that you create a “setup.py” script using ‘setuptools’,
+ and declare all your requirements there. That way, tools like pip
+ can automatically detect what requirements your package has, and
+ deal with them accordingly.
+
+ Note that calling ‘require('SomePackage')’ will not install
+ ‘SomePackage’ if it isn’t already present. If you need to do this,
+ you should use the ‘resolve()’ method instead, which allows you to
+ pass an ‘installer’ callback that will be invoked when a needed
+ distribution can’t be found on the local machine. You can then
+ have this callback display a dialog, automatically download the
+ needed distribution, or whatever else is appropriate for your
+ application. See the documentation below on the ‘resolve()’ method
+ for more information, and also on the ‘obtain()’ method of
+ ‘Environment’ objects.
+
+‘run_script(requires, script_name)’
+
+ Locate distribution specified by ‘requires’ and run its
+ ‘script_name’ script. ‘requires’ must be a string containing a
+ requirement specifier. (See *note Requirements Parsing: 7d. below
+ for the syntax.)
+
+ The script, if found, will be executed in `the caller’s globals'.
+ That’s because this method is intended to be called from wrapper
+ scripts that act as a proxy for the “real” scripts in a
+ distribution. A wrapper script usually doesn’t need to do anything
+ but invoke this function with the correct arguments.
+
+ If you need more control over the script execution environment, you
+ probably want to use the ‘run_script()’ method of a ‘Distribution’
+ object’s *note Metadata API: 7e. instead.
+
+‘iter_entry_points(group, name=None)’
+
+ Yield entry point objects from ‘group’ matching ‘name’
+
+ If ‘name’ is None, yields all entry points in ‘group’ from all
+ distributions in the working set, otherwise only ones matching both
+ ‘group’ and ‘name’ are yielded. Entry points are yielded from the
+ active distributions in the order that the distributions appear in
+ the working set. (For the global ‘working_set’, this should be the
+ same as the order that they are listed in ‘sys.path’.) Note that
+ within the entry points advertised by an individual distribution,
+ there is no particular ordering.
+
+ Please see the section below on *note Entry Points: 7f. for more
+ information.
+
+
+File: setuptools.info, Node: WorkingSet Methods and Attributes, Next: Receiving Change Notifications, Prev: Basic WorkingSet Methods, Up: WorkingSet Objects
+
+3.2.2.2 ‘WorkingSet’ Methods and Attributes
+...........................................
+
+These methods are used to query or manipulate the contents of a specific
+working set, so they must be explicitly invoked on a particular
+‘WorkingSet’ instance:
+
+‘add_entry(entry)’
+
+ Add a path item to the ‘entries’, finding any distributions on it.
+ You should use this when you add additional items to ‘sys.path’ and
+ you want the global ‘working_set’ to reflect the change. This
+ method is also called by the ‘WorkingSet()’ constructor during
+ initialization.
+
+ This method uses ‘find_distributions(entry,True)’ to find
+ distributions corresponding to the path entry, and then ‘add()’
+ them. ‘entry’ is always appended to the ‘entries’ attribute, even
+ if it is already present, however. (This is because ‘sys.path’ can
+ contain the same value more than once, and the ‘entries’ attribute
+ should be able to reflect this.)
+
+‘__contains__(dist)’
+
+ True if ‘dist’ is active in this ‘WorkingSet’. Note that only one
+ distribution for a given project can be active in a given
+ ‘WorkingSet’.
+
+‘__iter__()’
+
+ Yield distributions for non-duplicate projects in the working set.
+ The yield order is the order in which the items’ path entries were
+ added to the working set.
+
+‘find(req)’
+
+ Find a distribution matching ‘req’ (a ‘Requirement’ instance). If
+ there is an active distribution for the requested project, this
+ returns it, as long as it meets the version requirement specified
+ by ‘req’. But, if there is an active distribution for the project
+ and it does `not' meet the ‘req’ requirement, ‘VersionConflict’ is
+ raised. If there is no active distribution for the requested
+ project, ‘None’ is returned.
+
+‘resolve(requirements, env=None, installer=None)’
+
+ List all distributions needed to (recursively) meet ‘requirements’
+
+ ‘requirements’ must be a sequence of ‘Requirement’ objects. ‘env’,
+ if supplied, should be an ‘Environment’ instance. If not supplied,
+ an ‘Environment’ is created from the working set’s ‘entries’.
+ ‘installer’, if supplied, will be invoked with each requirement
+ that cannot be met by an already-installed distribution; it should
+ return a ‘Distribution’ or ‘None’. (See the ‘obtain()’ method of
+ *note Environment Objects: 81, below, for more information on the
+ ‘installer’ argument.)
+
+‘add(dist, entry=None)’
+
+ Add ‘dist’ to working set, associated with ‘entry’
+
+ If ‘entry’ is unspecified, it defaults to ‘dist.location’. On exit
+ from this routine, ‘entry’ is added to the end of the working set’s
+ ‘.entries’ (if it wasn’t already present).
+
+ ‘dist’ is only added to the working set if it’s for a project that
+ doesn’t already have a distribution active in the set. If it’s
+ successfully added, any callbacks registered with the ‘subscribe()’
+ method will be called. (See *note Receiving Change Notifications:
+ 82, below.)
+
+ Note: ‘add()’ is automatically called for you by the ‘require()’
+ method, so you don’t normally need to use this method directly.
+
+‘entries’
+
+ This attribute represents a “shadow” ‘sys.path’, primarily useful
+ for debugging. If you are experiencing import problems, you should
+ check the global ‘working_set’ object’s ‘entries’ against
+ ‘sys.path’, to ensure that they match. If they do not, then some
+ part of your program is manipulating ‘sys.path’ without updating
+ the ‘working_set’ accordingly. IMPORTANT NOTE: do not directly
+ manipulate this attribute! Setting it equal to ‘sys.path’ will not
+ fix your problem, any more than putting black tape over an “engine
+ warning” light will fix your car! If this attribute is out of sync
+ with ‘sys.path’, it’s merely an `indicator' of the problem, not the
+ cause of it.
+
+
+File: setuptools.info, Node: Receiving Change Notifications, Next: Locating Plugins, Prev: WorkingSet Methods and Attributes, Up: WorkingSet Objects
+
+3.2.2.3 Receiving Change Notifications
+......................................
+
+Extensible applications and frameworks may need to receive notification
+when a new distribution (such as a plug-in component) has been added to
+a working set. This is what the ‘subscribe()’ method and
+‘add_activation_listener()’ function are for.
+
+‘subscribe(callback)’
+
+ Invoke ‘callback(distribution)’ once for each active distribution
+ that is in the set now, or gets added later. Because the callback
+ is invoked for already-active distributions, you do not need to
+ loop over the working set yourself to deal with the existing items;
+ just register the callback and be prepared for the fact that it
+ will be called immediately by this method.
+
+ Note that callbacks `must not' allow exceptions to propagate, or
+ they will interfere with the operation of other callbacks and
+ possibly result in an inconsistent working set state. Callbacks
+ should use a try/except block to ignore, log, or otherwise process
+ any errors, especially since the code that caused the callback to
+ be invoked is unlikely to be able to handle the errors any better
+ than the callback itself.
+
+‘pkg_resources.add_activation_listener()’ is an alternate spelling of
+‘pkg_resources.working_set.subscribe()’.
+
+
+File: setuptools.info, Node: Locating Plugins, Prev: Receiving Change Notifications, Up: WorkingSet Objects
+
+3.2.2.4 Locating Plugins
+........................
+
+Extensible applications will sometimes have a “plugin directory” or a
+set of plugin directories, from which they want to load entry points or
+other metadata. The ‘find_plugins()’ method allows you to do this, by
+scanning an environment for the newest version of each project that can
+be safely loaded without conflicts or missing requirements.
+
+‘find_plugins(plugin_env, full_env=None, fallback=True)’
+
+ Scan ‘plugin_env’ and identify which distributions could be added
+ to this working set without version conflicts or missing
+ requirements.
+
+ Example usage:
+
+ distributions, errors = working_set.find_plugins(
+ Environment(plugin_dirlist)
+ )
+ map(working_set.add, distributions) # add plugins+libs to sys.path
+ print "Couldn't load", errors # display errors
+
+ The ‘plugin_env’ should be an ‘Environment’ instance that contains
+ only distributions that are in the project’s “plugin directory” or
+ directories. The ‘full_env’, if supplied, should be an
+ ‘Environment’ instance that contains all currently-available
+ distributions.
+
+ If ‘full_env’ is not supplied, one is created automatically from
+ the ‘WorkingSet’ this method is called on, which will typically
+ mean that every directory on ‘sys.path’ will be scanned for
+ distributions.
+
+ This method returns a 2-tuple: (‘distributions’, ‘error_info’),
+ where ‘distributions’ is a list of the distributions found in
+ ‘plugin_env’ that were loadable, along with any other distributions
+ that are needed to resolve their dependencies. ‘error_info’ is a
+ dictionary mapping unloadable plugin distributions to an exception
+ instance describing the error that occurred. Usually this will be
+ a ‘DistributionNotFound’ or ‘VersionConflict’ instance.
+
+ Most applications will use this method mainly on the master
+ ‘working_set’ instance in ‘pkg_resources’, and then immediately add
+ the returned distributions to the working set so that they are
+ available on sys.path. This will make it possible to find any
+ entry points, and allow any other metadata tracking and hooks to be
+ activated.
+
+ The resolution algorithm used by ‘find_plugins()’ is as follows.
+ First, the project names of the distributions present in
+ ‘plugin_env’ are sorted. Then, each project’s eggs are tried in
+ descending version order (i.e., newest version first).
+
+ An attempt is made to resolve each egg’s dependencies. If the
+ attempt is successful, the egg and its dependencies are added to
+ the output list and to a temporary copy of the working set. The
+ resolution process continues with the next project name, and no
+ older eggs for that project are tried.
+
+ If the resolution attempt fails, however, the error is added to the
+ error dictionary. If the ‘fallback’ flag is true, the next older
+ version of the plugin is tried, until a working version is found.
+ If false, the resolution process continues with the next plugin
+ project name.
+
+ Some applications may have stricter fallback requirements than
+ others. For example, an application that has a database schema or
+ persistent objects may not be able to safely downgrade a version of
+ a package. Others may want to ensure that a new plugin
+ configuration is either 100% good or else revert to a known-good
+ configuration. (That is, they may wish to revert to a known
+ configuration if the ‘error_info’ return value is non-empty.)
+
+ Note that this algorithm gives precedence to satisfying the
+ dependencies of alphabetically prior project names in case of
+ version conflicts. If two projects named “AaronsPlugin” and
+ “ZekesPlugin” both need different versions of “TomsLibrary”, then
+ “AaronsPlugin” will win and “ZekesPlugin” will be disabled due to
+ version conflict.
+
+
+File: setuptools.info, Node: Environment Objects, Next: Requirement Objects, Prev: WorkingSet Objects, Up: API Reference
+
+3.2.3 ‘Environment’ Objects
+---------------------------
+
+An “environment” is a collection of ‘Distribution’ objects, usually ones
+that are present and potentially importable on the current platform.
+‘Environment’ objects are used by ‘pkg_resources’ to index available
+distributions during dependency resolution.
+
+‘Environment(search_path=None, platform=get_supported_platform(), python=PY_MAJOR)’
+
+ Create an environment snapshot by scanning ‘search_path’ for
+ distributions compatible with ‘platform’ and ‘python’.
+ ‘search_path’ should be a sequence of strings such as might be used
+ on ‘sys.path’. If a ‘search_path’ isn’t supplied, ‘sys.path’ is
+ used.
+
+ ‘platform’ is an optional string specifying the name of the
+ platform that platform-specific distributions must be compatible
+ with. If unspecified, it defaults to the current platform.
+ ‘python’ is an optional string naming the desired version of Python
+ (e.g. ‘'2.4'’); it defaults to the currently-running version.
+
+ You may explicitly set ‘platform’ (and/or ‘python’) to ‘None’ if
+ you wish to include `all' distributions, not just those compatible
+ with the running platform or Python version.
+
+ Note that ‘search_path’ is scanned immediately for distributions,
+ and the resulting ‘Environment’ is a snapshot of the found
+ distributions. It is not automatically updated if the system’s
+ state changes due to e.g. installation or removal of
+ distributions.
+
+‘__getitem__(project_name)’
+
+ Returns a list of distributions for the given project name, ordered
+ from newest to oldest version. (And highest to lowest format
+ precedence for distributions that contain the same version of the
+ project.) If there are no distributions for the project, returns
+ an empty list.
+
+‘__iter__()’
+
+ Yield the unique project names of the distributions in this
+ environment. The yielded names are always in lower case.
+
+‘add(dist)’
+
+ Add ‘dist’ to the environment if it matches the platform and python
+ version specified at creation time, and only if the distribution
+ hasn’t already been added. (i.e., adding the same distribution
+ more than once is a no-op.)
+
+‘remove(dist)’
+
+ Remove ‘dist’ from the environment.
+
+‘can_add(dist)’
+
+ Is distribution ‘dist’ acceptable for this environment? If it’s
+ not compatible with the ‘platform’ and ‘python’ version values
+ specified when the environment was created, a false value is
+ returned.
+
+‘__add__(dist_or_env)’ (‘+’ operator)
+
+ Add a distribution or environment to an ‘Environment’ instance,
+ returning a `new' environment object that contains all the
+ distributions previously contained by both. The new environment
+ will have a ‘platform’ and ‘python’ of ‘None’, meaning that it will
+ not reject any distributions from being added to it; it will simply
+ accept whatever is added. If you want the added items to be
+ filtered for platform and Python version, or you want to add them
+ to the `same' environment instance, you should use in-place
+ addition (‘+=’) instead.
+
+‘__iadd__(dist_or_env)’ (‘+=’ operator)
+
+ Add a distribution or environment to an ‘Environment’ instance
+ `in-place', updating the existing instance and returning it. The
+ ‘platform’ and ‘python’ filter attributes take effect, so
+ distributions in the source that do not have a suitable platform
+ string or Python version are silently ignored.
+
+‘best_match(req, working_set, installer=None)’
+
+ Find distribution best matching ‘req’ and usable on ‘working_set’
+
+ This calls the ‘find(req)’ method of the ‘working_set’ to see if a
+ suitable distribution is already active. (This may raise
+ ‘VersionConflict’ if an unsuitable version of the project is
+ already active in the specified ‘working_set’.) If a suitable
+ distribution isn’t active, this method returns the newest
+ distribution in the environment that meets the ‘Requirement’ in
+ ‘req’. If no suitable distribution is found, and ‘installer’ is
+ supplied, then the result of calling the environment’s ‘obtain(req,
+ installer)’ method will be returned.
+
+‘obtain(requirement, installer=None)’
+
+ Obtain a distro that matches requirement (e.g. via download). In
+ the base ‘Environment’ class, this routine just returns
+ ‘installer(requirement)’, unless ‘installer’ is None, in which case
+ None is returned instead. This method is a hook that allows
+ subclasses to attempt other ways of obtaining a distribution before
+ falling back to the ‘installer’ argument.
+
+‘scan(search_path=None)’
+
+ Scan ‘search_path’ for distributions usable on ‘platform’
+
+ Any distributions found are added to the environment.
+ ‘search_path’ should be a sequence of strings such as might be used
+ on ‘sys.path’. If not supplied, ‘sys.path’ is used. Only
+ distributions conforming to the platform/python version defined at
+ initialization are added. This method is a shortcut for using the
+ ‘find_distributions()’ function to find the distributions from each
+ item in ‘search_path’, and then calling ‘add()’ to add each one to
+ the environment.
+
+
+File: setuptools.info, Node: Requirement Objects, Next: Entry Points<2>, Prev: Environment Objects, Up: API Reference
+
+3.2.4 ‘Requirement’ Objects
+---------------------------
+
+‘Requirement’ objects express what versions of a project are suitable
+for some purpose. These objects (or their string form) are used by
+various ‘pkg_resources’ APIs in order to find distributions that a
+script or distribution needs.
+
+* Menu:
+
+* Requirements Parsing::
+* Requirement Methods and Attributes::
+
+
+File: setuptools.info, Node: Requirements Parsing, Next: Requirement Methods and Attributes, Up: Requirement Objects
+
+3.2.4.1 Requirements Parsing
+............................
+
+‘parse_requirements(s)’
+
+ Yield ‘Requirement’ objects for a string or iterable of lines.
+ Each requirement must start on a new line. See below for syntax.
+
+‘Requirement.parse(s)’
+
+ Create a ‘Requirement’ object from a string or iterable of lines.
+ A ‘ValueError’ is raised if the string or lines do not contain a
+ valid requirement specifier, or if they contain more than one
+ specifier. (To parse multiple specifiers from a string or iterable
+ of strings, use ‘parse_requirements()’ instead.)
+
+ The syntax of a requirement specifier is defined in full in PEP
+ 508.
+
+ Some examples of valid requirement specifiers:
+
+ FooProject >= 1.2
+ Fizzy [foo, bar]
+ PickyThing>1.6,<=1.9,!=1.8.6
+ SomethingWhoseVersionIDontCareAbout
+ SomethingWithMarker[foo]>1.0;python_version<"2.7"
+
+ The project name is the only required portion of a requirement
+ string, and if it’s the only thing supplied, the requirement will
+ accept any version of that project.
+
+ The “extras” in a requirement are used to request optional features
+ of a project, that may require additional project distributions in
+ order to function. For example, if the hypothetical
+ “Report-O-Rama” project offered optional PDF support, it might
+ require an additional library in order to provide that support.
+ Thus, a project needing Report-O-Rama’s PDF features could use a
+ requirement of ‘Report-O-Rama[PDF]’ to request installation or
+ activation of both Report-O-Rama and any libraries it needs in
+ order to provide PDF support. For example, you could use:
+
+ pip install Report-O-Rama[PDF]
+
+ To install the necessary packages using pip, or call
+ ‘pkg_resources.require('Report-O-Rama[PDF]')’ to add the necessary
+ distributions to sys.path at runtime.
+
+ The “markers” in a requirement are used to specify when a
+ requirement should be installed – the requirement will be installed
+ if the marker evaluates as true in the current environment. For
+ example, specifying ‘argparse;python_version<"3.0"’ will not
+ install in an Python 3 environment, but will in a Python 2
+ environment.
+
+
+File: setuptools.info, Node: Requirement Methods and Attributes, Prev: Requirements Parsing, Up: Requirement Objects
+
+3.2.4.2 ‘Requirement’ Methods and Attributes
+............................................
+
+‘__contains__(dist_or_version)’
+
+ Return true if ‘dist_or_version’ fits the criteria for this
+ requirement. If ‘dist_or_version’ is a ‘Distribution’ object, its
+ project name must match the requirement’s project name, and its
+ version must meet the requirement’s version criteria. If
+ ‘dist_or_version’ is a string, it is parsed using the
+ ‘parse_version()’ utility function. Otherwise, it is assumed to be
+ an already-parsed version.
+
+ The ‘Requirement’ object’s version specifiers (‘.specs’) are
+ internally sorted into ascending version order, and used to
+ establish what ranges of versions are acceptable. Adjacent
+ redundant conditions are effectively consolidated (e.g. ‘">1, >2"’
+ produces the same results as ‘">2"’, and ‘"<2,<3"’ produces the
+ same results as ‘"<2"’). ‘"!="’ versions are excised from the
+ ranges they fall within. The version being tested for
+ acceptability is then checked for membership in the resulting
+ ranges.
+
+‘__eq__(other_requirement)’
+
+ A requirement compares equal to another requirement if they have
+ case-insensitively equal project names, version specifiers, and
+ “extras”. (The order that extras and version specifiers are in is
+ also ignored.) Equal requirements also have equal hashes, so that
+ requirements can be used in sets or as dictionary keys.
+
+‘__str__()’
+
+ The string form of a ‘Requirement’ is a string that, if passed to
+ ‘Requirement.parse()’, would return an equal ‘Requirement’ object.
+
+‘project_name’
+
+ The name of the required project
+
+‘key’
+
+ An all-lowercase version of the ‘project_name’, useful for
+ comparison or indexing.
+
+‘extras’
+
+ A tuple of names of “extras” that this requirement calls for.
+ (These will be all-lowercase and normalized using the
+ ‘safe_extra()’ parsing utility function, so they may not exactly
+ equal the extras the requirement was created with.)
+
+‘specs’
+
+ A list of ‘(op,version)’ tuples, sorted in ascending parsed-version
+ order. The ‘op’ in each tuple is a comparison operator,
+ represented as a string. The ‘version’ is the (unparsed) version
+ number.
+
+‘marker’
+
+ An instance of ‘packaging.markers.Marker’ that allows evaluation
+ against the current environment. May be None if no marker
+ specified.
+
+‘url’
+
+ The location to download the requirement from if specified.
+
+
+File: setuptools.info, Node: Entry Points<2>, Next: Distribution Objects, Prev: Requirement Objects, Up: API Reference
+
+3.2.5 Entry Points
+------------------
+
+Entry points are a simple way for distributions to “advertise” Python
+objects (such as functions or classes) for use by other distributions.
+Extensible applications and frameworks can search for entry points with
+a particular name or group, either from a specific distribution or from
+all active distributions on sys.path, and then inspect or load the
+advertised objects at will.
+
+Entry points belong to “groups” which are named with a dotted name
+similar to a Python package or module name. For example, the
+‘setuptools’ package uses an entry point named ‘distutils.commands’ in
+order to find commands defined by distutils extensions. ‘setuptools’
+treats the names of entry points defined in that group as the acceptable
+commands for a setup script.
+
+In a similar way, other packages can define their own entry point
+groups, either using dynamic names within the group (like
+‘distutils.commands’), or possibly using predefined names within the
+group. For example, a blogging framework that offers various pre- or
+post-publishing hooks might define an entry point group and look for
+entry points named “pre_process” and “post_process” within that group.
+
+To advertise an entry point, a project needs to use ‘setuptools’ and
+provide an ‘entry_points’ argument to ‘setup()’ in its setup script, so
+that the entry points will be included in the distribution’s metadata.
+For more details, see the [‘setuptools’
+documentation](‘https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins’).
+
+Each project distribution can advertise at most one entry point of a
+given name within the same entry point group. For example, a distutils
+extension could advertise two different ‘distutils.commands’ entry
+points, as long as they had different names. However, there is nothing
+that prevents `different' projects from advertising entry points of the
+same name in the same group. In some cases, this is a desirable thing,
+since the application or framework that uses the entry points may be
+calling them as hooks, or in some other way combining them. It is up to
+the application or framework to decide what to do if multiple
+distributions advertise an entry point; some possibilities include using
+both entry points, displaying an error message, using the first one
+found in sys.path order, etc.
+
+* Menu:
+
+* Convenience API::
+* Creating and Parsing::
+* EntryPoint Objects::
+
+
+File: setuptools.info, Node: Convenience API, Next: Creating and Parsing, Up: Entry Points<2>
+
+3.2.5.1 Convenience API
+.......................
+
+In the following functions, the ‘dist’ argument can be a ‘Distribution’
+instance, a ‘Requirement’ instance, or a string specifying a requirement
+(i.e. project name, version, etc.). If the argument is a string or
+‘Requirement’, the specified distribution is located (and added to
+sys.path if not already present). An error will be raised if a matching
+distribution is not available.
+
+The ‘group’ argument should be a string containing a dotted identifier,
+identifying an entry point group. If you are defining an entry point
+group, you should include some portion of your package’s name in the
+group name so as to avoid collision with other packages’ entry point
+groups.
+
+‘load_entry_point(dist, group, name)’
+
+ Load the named entry point from the specified distribution, or
+ raise ‘ImportError’.
+
+‘get_entry_info(dist, group, name)’
+
+ Return an ‘EntryPoint’ object for the given ‘group’ and ‘name’ from
+ the specified distribution. Returns ‘None’ if the distribution has
+ not advertised a matching entry point.
+
+‘get_entry_map(dist, group=None)’
+
+ Return the distribution’s entry point map for ‘group’, or the full
+ entry map for the distribution. This function always returns a
+ dictionary, even if the distribution advertises no entry points.
+ If ‘group’ is given, the dictionary maps entry point names to the
+ corresponding ‘EntryPoint’ object. If ‘group’ is None, the
+ dictionary maps group names to dictionaries that then map entry
+ point names to the corresponding ‘EntryPoint’ instance in that
+ group.
+
+‘iter_entry_points(group, name=None)’
+
+ Yield entry point objects from ‘group’ matching ‘name’.
+
+ If ‘name’ is None, yields all entry points in ‘group’ from all
+ distributions in the working set on sys.path, otherwise only ones
+ matching both ‘group’ and ‘name’ are yielded. Entry points are
+ yielded from the active distributions in the order that the
+ distributions appear on sys.path. (Within entry points for a
+ particular distribution, however, there is no particular ordering.)
+
+ (This API is actually a method of the global ‘working_set’ object;
+ see the section above on *note Basic WorkingSet Methods: 7c. for
+ more information.)
+
+
+File: setuptools.info, Node: Creating and Parsing, Next: EntryPoint Objects, Prev: Convenience API, Up: Entry Points<2>
+
+3.2.5.2 Creating and Parsing
+............................
+
+‘EntryPoint(name, module_name, attrs=(), extras=(), dist=None)’
+
+ Create an ‘EntryPoint’ instance. ‘name’ is the entry point name.
+ The ‘module_name’ is the (dotted) name of the module containing the
+ advertised object. ‘attrs’ is an optional tuple of names to look
+ up from the module to obtain the advertised object. For example,
+ an ‘attrs’ of ‘("foo","bar")’ and a ‘module_name’ of ‘"baz"’ would
+ mean that the advertised object could be obtained by the following
+ code:
+
+ import baz
+ advertised_object = baz.foo.bar
+
+ The ‘extras’ are an optional tuple of “extra feature” names that
+ the distribution needs in order to provide this entry point. When
+ the entry point is loaded, these extra features are looked up in
+ the ‘dist’ argument to find out what other distributions may need
+ to be activated on sys.path; see the ‘load()’ method for more
+ details. The ‘extras’ argument is only meaningful if ‘dist’ is
+ specified. ‘dist’ must be a ‘Distribution’ instance.
+
+‘EntryPoint.parse(src, dist=None)’ (classmethod)
+
+ Parse a single entry point from string ‘src’
+
+ Entry point syntax follows the form:
+
+ name = some.module:some.attr [extra1,extra2]
+
+ The entry name and module name are required, but the ‘:attrs’ and
+ ‘[extras]’ parts are optional, as is the whitespace shown between
+ some of the items. The ‘dist’ argument is passed through to the
+ ‘EntryPoint()’ constructor, along with the other values parsed from
+ ‘src’.
+
+‘EntryPoint.parse_group(group, lines, dist=None)’ (classmethod)
+
+ Parse ‘lines’ (a string or sequence of lines) to create a
+ dictionary mapping entry point names to ‘EntryPoint’ objects.
+ ‘ValueError’ is raised if entry point names are duplicated, if
+ ‘group’ is not a valid entry point group name, or if there are any
+ syntax errors. (Note: the ‘group’ parameter is used only for
+ validation and to create more informative error messages.) If
+ ‘dist’ is provided, it will be used to set the ‘dist’ attribute of
+ the created ‘EntryPoint’ objects.
+
+‘EntryPoint.parse_map(data, dist=None)’ (classmethod)
+
+ Parse ‘data’ into a dictionary mapping group names to dictionaries
+ mapping entry point names to ‘EntryPoint’ objects. If ‘data’ is a
+ dictionary, then the keys are used as group names and the values
+ are passed to ‘parse_group()’ as the ‘lines’ argument. If ‘data’
+ is a string or sequence of lines, it is first split into .ini-style
+ sections (using the ‘split_sections()’ utility function) and the
+ section names are used as group names. In either case, the ‘dist’
+ argument is passed through to ‘parse_group()’ so that the entry
+ points will be linked to the specified distribution.
+
+
+File: setuptools.info, Node: EntryPoint Objects, Prev: Creating and Parsing, Up: Entry Points<2>
+
+3.2.5.3 ‘EntryPoint’ Objects
+............................
+
+For simple introspection, ‘EntryPoint’ objects have attributes that
+correspond exactly to the constructor argument names: ‘name’,
+‘module_name’, ‘attrs’, ‘extras’, and ‘dist’ are all available. In
+addition, the following methods are provided:
+
+‘load()’
+
+ Load the entry point, returning the advertised Python object.
+ Effectively calls ‘self.require()’ then returns ‘self.resolve()’.
+
+‘require(env=None, installer=None)’
+
+ Ensure that any “extras” needed by the entry point are available on
+ sys.path. ‘UnknownExtra’ is raised if the ‘EntryPoint’ has
+ ‘extras’, but no ‘dist’, or if the named extras are not defined by
+ the distribution. If ‘env’ is supplied, it must be an
+ ‘Environment’, and it will be used to search for needed
+ distributions if they are not already present on sys.path. If
+ ‘installer’ is supplied, it must be a callable taking a
+ ‘Requirement’ instance and returning a matching importable
+ ‘Distribution’ instance or None.
+
+‘resolve()’
+
+ Resolve the entry point from its module and attrs, returning the
+ advertised Python object. Raises ‘ImportError’ if it cannot be
+ obtained.
+
+‘__str__()’
+
+ The string form of an ‘EntryPoint’ is a string that could be passed
+ to ‘EntryPoint.parse()’ to produce an equivalent ‘EntryPoint’.
+
+
+File: setuptools.info, Node: Distribution Objects, Next: ResourceManager API, Prev: Entry Points<2>, Up: API Reference
+
+3.2.6 ‘Distribution’ Objects
+----------------------------
+
+‘Distribution’ objects represent collections of Python code that may or
+may not be importable, and may or may not have metadata and resources
+associated with them. Their metadata may include information such as
+what other projects the distribution depends on, what entry points the
+distribution advertises, and so on.
+
+* Menu:
+
+* Getting or Creating Distributions::
+* Distribution Attributes::
+* Distribution Methods::
+
+
+File: setuptools.info, Node: Getting or Creating Distributions, Next: Distribution Attributes, Up: Distribution Objects
+
+3.2.6.1 Getting or Creating Distributions
+.........................................
+
+Most commonly, you’ll obtain ‘Distribution’ objects from a ‘WorkingSet’
+or an ‘Environment’. (See the sections above on *note WorkingSet
+Objects: 7b. and *note Environment Objects: 81, which are containers for
+active distributions and available distributions, respectively.) You
+can also obtain ‘Distribution’ objects from one of these high-level
+APIs:
+
+‘find_distributions(path_item, only=False)’
+
+ Yield distributions accessible via ‘path_item’. If ‘only’ is true,
+ yield only distributions whose ‘location’ is equal to ‘path_item’.
+ In other words, if ‘only’ is true, this yields any distributions
+ that would be importable if ‘path_item’ were on ‘sys.path’. If
+ ‘only’ is false, this also yields distributions that are “in” or
+ “under” ‘path_item’, but would not be importable unless their
+ locations were also added to ‘sys.path’.
+
+‘get_distribution(dist_spec)’
+
+ Return a ‘Distribution’ object for a given ‘Requirement’ or string.
+ If ‘dist_spec’ is already a ‘Distribution’ instance, it is
+ returned. If it is a ‘Requirement’ object or a string that can be
+ parsed into one, it is used to locate and activate a matching
+ distribution, which is then returned.
+
+However, if you’re creating specialized tools for working with
+distributions, or creating a new distribution format, you may also need
+to create ‘Distribution’ objects directly, using one of the three
+constructors below.
+
+These constructors all take an optional ‘metadata’ argument, which is
+used to access any resources or metadata associated with the
+distribution. ‘metadata’ must be an object that implements the
+‘IResourceProvider’ interface, or None. If it is None, an
+‘EmptyProvider’ is used instead. ‘Distribution’ objects implement both
+the *note IResourceProvider: 8b. and *note IMetadataProvider Methods:
+8c. by delegating them to the ‘metadata’ object.
+
+‘Distribution.from_location(location, basename, metadata=None, **kw)’ (classmethod)
+
+ Create a distribution for ‘location’, which must be a string such
+ as a URL, filename, or other string that might be used on
+ ‘sys.path’. ‘basename’ is a string naming the distribution, like
+ ‘Foo-1.2-py2.4.egg’. If ‘basename’ ends with ‘.egg’, then the
+ project’s name, version, python version and platform are extracted
+ from the filename and used to set those properties of the created
+ distribution. Any additional keyword arguments are forwarded to
+ the ‘Distribution()’ constructor.
+
+‘Distribution.from_filename(filename, metadata=None**kw)’ (classmethod)
+
+ Create a distribution by parsing a local filename. This is a
+ shorter way of saying
+ ‘Distribution.from_location(normalize_path(filename),
+ os.path.basename(filename), metadata)’. In other words, it creates
+ a distribution whose location is the normalize form of the
+ filename, parsing name and version information from the base
+ portion of the filename. Any additional keyword arguments are
+ forwarded to the ‘Distribution()’ constructor.
+
+‘Distribution(location,metadata,project_name,version,py_version,platform,precedence)’
+
+ Create a distribution by setting its properties. All arguments are
+ optional and default to None, except for ‘py_version’ (which
+ defaults to the current Python version) and ‘precedence’ (which
+ defaults to ‘EGG_DIST’; for more details see ‘precedence’ under
+ *note Distribution Attributes: 8d. below). Note that it’s usually
+ easier to use the ‘from_filename()’ or ‘from_location()’
+ constructors than to specify all these arguments individually.
+
+
+File: setuptools.info, Node: Distribution Attributes, Next: Distribution Methods, Prev: Getting or Creating Distributions, Up: Distribution Objects
+
+3.2.6.2 ‘Distribution’ Attributes
+.................................
+
+location
+
+ A string indicating the distribution’s location. For an importable
+ distribution, this is the string that would be added to ‘sys.path’
+ to make it actively importable. For non-importable distributions,
+ this is simply a filename, URL, or other way of locating the
+ distribution.
+
+project_name
+
+ A string, naming the project that this distribution is for.
+ Project names are defined by a project’s setup script, and they are
+ used to identify projects on PyPI. When a ‘Distribution’ is
+ constructed, the ‘project_name’ argument is passed through the
+ ‘safe_name()’ utility function to filter out any unacceptable
+ characters.
+
+key
+
+ ‘dist.key’ is short for ‘dist.project_name.lower()’. It’s used for
+ case-insensitive comparison and indexing of distributions by
+ project name.
+
+extras
+
+ A list of strings, giving the names of extra features defined by
+ the project’s dependency list (the ‘extras_require’ argument
+ specified in the project’s setup script).
+
+version
+
+ A string denoting what release of the project this distribution
+ contains. When a ‘Distribution’ is constructed, the ‘version’
+ argument is passed through the ‘safe_version()’ utility function to
+ filter out any unacceptable characters. If no ‘version’ is
+ specified at construction time, then attempting to access this
+ attribute later will cause the ‘Distribution’ to try to discover
+ its version by reading its ‘PKG-INFO’ metadata file. If ‘PKG-INFO’
+ is unavailable or can’t be parsed, ‘ValueError’ is raised.
+
+parsed_version
+
+ The ‘parsed_version’ is an object representing a “parsed” form of
+ the distribution’s ‘version’. ‘dist.parsed_version’ is a shortcut
+ for calling ‘parse_version(dist.version)’. It is used to compare
+ or sort distributions by version. (See the *note Parsing
+ Utilities: 8e. section below for more information on the
+ ‘parse_version()’ function.) Note that accessing ‘parsed_version’
+ may result in a ‘ValueError’ if the ‘Distribution’ was constructed
+ without a ‘version’ and without ‘metadata’ capable of supplying the
+ missing version info.
+
+py_version
+
+ The major/minor Python version the distribution supports, as a
+ string. For example, “2.7” or “3.4”. The default is the current
+ version of Python.
+
+platform
+
+ A string representing the platform the distribution is intended
+ for, or ‘None’ if the distribution is “pure Python” and therefore
+ cross-platform. See *note Platform Utilities: 8f. below for more
+ information on platform strings.
+
+precedence
+
+ A distribution’s ‘precedence’ is used to determine the relative
+ order of two distributions that have the same ‘project_name’ and
+ ‘parsed_version’. The default precedence is
+ ‘pkg_resources.EGG_DIST’, which is the highest (i.e. most
+ preferred) precedence. The full list of predefined precedences,
+ from most preferred to least preferred, is: ‘EGG_DIST’,
+ ‘BINARY_DIST’, ‘SOURCE_DIST’, ‘CHECKOUT_DIST’, and ‘DEVELOP_DIST’.
+ Normally, precedences other than ‘EGG_DIST’ are used only by the
+ ‘setuptools.package_index’ module, when sorting distributions found
+ in a package index to determine their suitability for installation.
+ “System” and “Development” eggs (i.e., ones that use the
+ ‘.egg-info’ format), however, are automatically given a precedence
+ of ‘DEVELOP_DIST’.
+
+
+File: setuptools.info, Node: Distribution Methods, Prev: Distribution Attributes, Up: Distribution Objects
+
+3.2.6.3 ‘Distribution’ Methods
+..............................
+
+‘activate(path=None)’
+
+ Ensure distribution is importable on ‘path’. If ‘path’ is None,
+ ‘sys.path’ is used instead. This ensures that the distribution’s
+ ‘location’ is in the ‘path’ list, and it also performs any
+ necessary namespace package fixups or declarations. (That is, if
+ the distribution contains namespace packages, this method ensures
+ that they are declared, and that the distribution’s contents for
+ those namespace packages are merged with the contents provided by
+ any other active distributions. See the section above on *note
+ Namespace Package Support: 79. for more information.)
+
+ ‘pkg_resources’ adds a notification callback to the global
+ ‘working_set’ that ensures this method is called whenever a
+ distribution is added to it. Therefore, you should not normally
+ need to explicitly call this method. (Note that this means that
+ namespace packages on ‘sys.path’ are always imported as soon as
+ ‘pkg_resources’ is, which is another reason why namespace packages
+ should not contain any code or import statements.)
+
+‘as_requirement()’
+
+ Return a ‘Requirement’ instance that matches this distribution’s
+ project name and version.
+
+‘requires(extras=())’
+
+ List the ‘Requirement’ objects that specify this distribution’s
+ dependencies. If ‘extras’ is specified, it should be a sequence of
+ names of “extras” defined by the distribution, and the list
+ returned will then include any dependencies needed to support the
+ named “extras”.
+
+‘clone(**kw)’
+
+ Create a copy of the distribution. Any supplied keyword arguments
+ override the corresponding argument to the ‘Distribution()’
+ constructor, allowing you to change some of the copied
+ distribution’s attributes.
+
+‘egg_name()’
+
+ Return what this distribution’s standard filename should be, not
+ including the “.egg” extension. For example, a distribution for
+ project “Foo” version 1.2 that runs on Python 2.3 for Windows would
+ have an ‘egg_name()’ of ‘Foo-1.2-py2.3-win32’. Any dashes in the
+ name or version are converted to underscores.
+ (‘Distribution.from_location()’ will convert them back when parsing
+ a “.egg” file name.)
+
+‘__cmp__(other)’, ‘__hash__()’
+
+ Distribution objects are hashed and compared on the basis of their
+ parsed version and precedence, followed by their key (lowercase
+ project name), location, Python version, and platform.
+
+The following methods are used to access ‘EntryPoint’ objects advertised
+by the distribution. See the section above on *note Entry Points: 7f.
+for more detailed information about these operations:
+
+‘get_entry_info(group, name)’
+
+ Return the ‘EntryPoint’ object for ‘group’ and ‘name’, or None if
+ no such point is advertised by this distribution.
+
+‘get_entry_map(group=None)’
+
+ Return the entry point map for ‘group’. If ‘group’ is None, return
+ a dictionary mapping group names to entry point maps for all
+ groups. (An entry point map is a dictionary of entry point names
+ to ‘EntryPoint’ objects.)
+
+‘load_entry_point(group, name)’
+
+ Short for ‘get_entry_info(group, name).load()’. Returns the object
+ advertised by the named entry point, or raises ‘ImportError’ if the
+ entry point isn’t advertised by this distribution, or there is some
+ other import problem.
+
+In addition to the above methods, ‘Distribution’ objects also implement
+all of the *note IResourceProvider: 8b. and *note IMetadataProvider
+Methods: 8c. (which are documented in later sections):
+
+ * ‘has_metadata(name)’
+
+ * ‘metadata_isdir(name)’
+
+ * ‘metadata_listdir(name)’
+
+ * ‘get_metadata(name)’
+
+ * ‘get_metadata_lines(name)’
+
+ * ‘run_script(script_name, namespace)’
+
+ * ‘get_resource_filename(manager, resource_name)’
+
+ * ‘get_resource_stream(manager, resource_name)’
+
+ * ‘get_resource_string(manager, resource_name)’
+
+ * ‘has_resource(resource_name)’
+
+ * ‘resource_isdir(resource_name)’
+
+ * ‘resource_listdir(resource_name)’
+
+If the distribution was created with a ‘metadata’ argument, these
+resource and metadata access methods are all delegated to that
+‘metadata’ provider. Otherwise, they are delegated to an
+‘EmptyProvider’, so that the distribution will appear to have no
+resources or metadata. This delegation approach is used so that
+supporting custom importers or new distribution formats can be done
+simply by creating an appropriate *note IResourceProvider: 8b.
+implementation; see the section below on *note Supporting Custom
+Importers: 7a. for more details.
+
+
+File: setuptools.info, Node: ResourceManager API, Next: Metadata API, Prev: Distribution Objects, Up: API Reference
+
+3.2.7 ‘ResourceManager’ API
+---------------------------
+
+The ‘ResourceManager’ class provides uniform access to package
+resources, whether those resources exist as files and directories or are
+compressed in an archive of some kind.
+
+Normally, you do not need to create or explicitly manage
+‘ResourceManager’ instances, as the ‘pkg_resources’ module creates a
+global instance for you, and makes most of its methods available as
+top-level names in the ‘pkg_resources’ module namespace. So, for
+example, this code actually calls the ‘resource_string()’ method of the
+global ‘ResourceManager’:
+
+ import pkg_resources
+ my_data = pkg_resources.resource_string(__name__, "foo.dat")
+
+Thus, you can use the APIs below without needing an explicit
+‘ResourceManager’ instance; just import and use them as needed.
+
+* Menu:
+
+* Basic Resource Access::
+* Resource Extraction::
+* “Provider” Interface::
+
+
+File: setuptools.info, Node: Basic Resource Access, Next: Resource Extraction, Up: ResourceManager API
+
+3.2.7.1 Basic Resource Access
+.............................
+
+In the following methods, the ‘package_or_requirement’ argument may be
+either a Python package/module name (e.g. ‘foo.bar’) or a ‘Requirement’
+instance. If it is a package or module name, the named module or
+package must be importable (i.e., be in a distribution or directory on
+‘sys.path’), and the ‘resource_name’ argument is interpreted relative to
+the named package. (Note that if a module name is used, then the
+resource name is relative to the package immediately containing the
+named module. Also, you should not use use a namespace package name,
+because a namespace package can be spread across multiple distributions,
+and is therefore ambiguous as to which distribution should be searched
+for the resource.)
+
+If it is a ‘Requirement’, then the requirement is automatically resolved
+(searching the current ‘Environment’ if necessary) and a matching
+distribution is added to the ‘WorkingSet’ and ‘sys.path’ if one was not
+already present. (Unless the ‘Requirement’ can’t be satisfied, in which
+case an exception is raised.) The ‘resource_name’ argument is then
+interpreted relative to the root of the identified distribution; i.e.
+its first path segment will be treated as a peer of the top-level
+modules or packages in the distribution.
+
+Note that resource names must be ‘/’-separated paths rooted at the
+package, cannot contain relative names like ‘".."’, and cannot be
+absolute. Do `not' use ‘os.path’ routines to manipulate resource paths,
+as they are `not' filesystem paths.
+
+‘resource_exists(package_or_requirement, resource_name)’
+
+ Does the named resource exist? Return ‘True’ or ‘False’
+ accordingly.
+
+‘resource_stream(package_or_requirement, resource_name)’
+
+ Return a readable file-like object for the specified resource; it
+ may be an actual file, a ‘StringIO’, or some similar object. The
+ stream is in “binary mode”, in the sense that whatever bytes are in
+ the resource will be read as-is.
+
+‘resource_string(package_or_requirement, resource_name)’
+
+ Return the specified resource as a string. The resource is read in
+ binary fashion, such that the returned string contains exactly the
+ bytes that are stored in the resource.
+
+‘resource_isdir(package_or_requirement, resource_name)’
+
+ Is the named resource a directory? Return ‘True’ or ‘False’
+ accordingly.
+
+‘resource_listdir(package_or_requirement, resource_name)’
+
+ List the contents of the named resource directory, just like
+ ‘os.listdir’ except that it works even if the resource is in a
+ zipfile.
+
+Note that only ‘resource_exists()’ and ‘resource_isdir()’ are
+insensitive as to the resource type. You cannot use
+‘resource_listdir()’ on a file resource, and you can’t use
+‘resource_string()’ or ‘resource_stream()’ on directory resources.
+Using an inappropriate method for the resource type may result in an
+exception or undefined behavior, depending on the platform and
+distribution format involved.
+
+
+File: setuptools.info, Node: Resource Extraction, Next: “Provider” Interface, Prev: Basic Resource Access, Up: ResourceManager API
+
+3.2.7.2 Resource Extraction
+...........................
+
+‘resource_filename(package_or_requirement, resource_name)’
+
+ Sometimes, it is not sufficient to access a resource in string or
+ stream form, and a true filesystem filename is needed. In such
+ cases, you can use this method (or module-level function) to obtain
+ a filename for a resource. If the resource is in an archive
+ distribution (such as a zipped egg), it will be extracted to a
+ cache directory, and the filename within the cache will be
+ returned. If the named resource is a directory, then all resources
+ within that directory (including subdirectories) are also
+ extracted. If the named resource is a C extension or “eager
+ resource” (see the ‘setuptools’ documentation for details), then
+ all C extensions and eager resources are extracted at the same
+ time.
+
+ Archived resources are extracted to a cache location that can be
+ managed by the following two methods:
+
+‘set_extraction_path(path)’
+
+ Set the base path where resources will be extracted to, if needed.
+
+ If you do not call this routine before any extractions take place,
+ the path defaults to the return value of ‘get_default_cache()’.
+ (Which is based on the ‘PYTHON_EGG_CACHE’ environment variable,
+ with various platform-specific fallbacks. See that routine’s
+ documentation for more details.)
+
+ Resources are extracted to subdirectories of this path based upon
+ information given by the resource provider. You may set this to a
+ temporary directory, but then you must call ‘cleanup_resources()’
+ to delete the extracted files when done. There is no guarantee
+ that ‘cleanup_resources()’ will be able to remove all extracted
+ files. (On Windows, for example, you can’t unlink .pyd or .dll
+ files that are still in use.)
+
+ Note that you may not change the extraction path for a given
+ resource manager once resources have been extracted, unless you
+ first call ‘cleanup_resources()’.
+
+‘cleanup_resources(force=False)’
+
+ Delete all extracted resource files and directories, returning a
+ list of the file and directory names that could not be successfully
+ removed. This function does not have any concurrency protection,
+ so it should generally only be called when the extraction path is a
+ temporary directory exclusive to a single process. This method is
+ not automatically called; you must call it explicitly or register
+ it as an ‘atexit’ function if you wish to ensure cleanup of a
+ temporary directory used for extractions.
+
+
+File: setuptools.info, Node: “Provider” Interface, Prev: Resource Extraction, Up: ResourceManager API
+
+3.2.7.3 “Provider” Interface
+............................
+
+If you are implementing an ‘IResourceProvider’ and/or
+‘IMetadataProvider’ for a new distribution archive format, you may need
+to use the following ‘IResourceManager’ methods to co-ordinate
+extraction of resources to the filesystem. If you’re not implementing
+an archive format, however, you have no need to use these methods.
+Unlike the other methods listed above, they are `not' available as
+top-level functions tied to the global ‘ResourceManager’; you must
+therefore have an explicit ‘ResourceManager’ instance to use them.
+
+‘get_cache_path(archive_name, names=())’
+
+ Return absolute location in cache for ‘archive_name’ and ‘names’
+
+ The parent directory of the resulting path will be created if it
+ does not already exist. ‘archive_name’ should be the base filename
+ of the enclosing egg (which may not be the name of the enclosing
+ zipfile!), including its “.egg” extension. ‘names’, if provided,
+ should be a sequence of path name parts “under” the egg’s
+ extraction location.
+
+ This method should only be called by resource providers that need
+ to obtain an extraction location, and only for names they intend to
+ extract, as it tracks the generated names for possible cleanup
+ later.
+
+‘extraction_error()’
+
+ Raise an ‘ExtractionError’ describing the active exception as
+ interfering with the extraction process. You should call this if
+ you encounter any OS errors extracting the file to the cache path;
+ it will format the operating system exception for you, and add
+ other information to the ‘ExtractionError’ instance that may be
+ needed by programs that want to wrap or handle extraction errors
+ themselves.
+
+‘postprocess(tempname, filename)’
+
+ Perform any platform-specific postprocessing of ‘tempname’.
+ Resource providers should call this method ONLY after successfully
+ extracting a compressed resource. They must NOT call it on
+ resources that are already in the filesystem.
+
+ ‘tempname’ is the current (temporary) name of the file, and
+ ‘filename’ is the name it will be renamed to by the caller after
+ this routine returns.
+
+
+File: setuptools.info, Node: Metadata API, Next: Exceptions, Prev: ResourceManager API, Up: API Reference
+
+3.2.8 Metadata API
+------------------
+
+The metadata API is used to access metadata resources bundled in a
+pluggable distribution. Metadata resources are virtual files or
+directories containing information about the distribution, such as might
+be used by an extensible application or framework to connect “plugins”.
+Like other kinds of resources, metadata resource names are ‘/’-separated
+and should not contain ‘..’ or begin with a ‘/’. You should not use
+‘os.path’ routines to manipulate resource paths.
+
+The metadata API is provided by objects implementing the
+‘IMetadataProvider’ or ‘IResourceProvider’ interfaces. ‘Distribution’
+objects implement this interface, as do objects returned by the
+‘get_provider()’ function:
+
+‘get_provider(package_or_requirement)’
+
+ If a package name is supplied, return an ‘IResourceProvider’ for
+ the package. If a ‘Requirement’ is supplied, resolve it by
+ returning a ‘Distribution’ from the current working set (searching
+ the current ‘Environment’ if necessary and adding the newly found
+ ‘Distribution’ to the working set). If the named package can’t be
+ imported, or the ‘Requirement’ can’t be satisfied, an exception is
+ raised.
+
+ NOTE: if you use a package name rather than a ‘Requirement’, the
+ object you get back may not be a pluggable distribution, depending
+ on the method by which the package was installed. In particular,
+ “development” packages and “single-version externally-managed”
+ packages do not have any way to map from a package name to the
+ corresponding project’s metadata. Do not write code that passes a
+ package name to ‘get_provider()’ and then tries to retrieve project
+ metadata from the returned object. It may appear to work when the
+ named package is in an ‘.egg’ file or directory, but it will fail
+ in other installation scenarios. If you want project metadata, you
+ need to ask for a `project', not a package.
+
+* Menu:
+
+* IMetadataProvider Methods::
+
+
+File: setuptools.info, Node: IMetadataProvider Methods, Up: Metadata API
+
+3.2.8.1 ‘IMetadataProvider’ Methods
+...................................
+
+The methods provided by objects (such as ‘Distribution’ instances) that
+implement the ‘IMetadataProvider’ or ‘IResourceProvider’ interfaces are:
+
+‘has_metadata(name)’
+
+ Does the named metadata resource exist?
+
+‘metadata_isdir(name)’
+
+ Is the named metadata resource a directory?
+
+‘metadata_listdir(name)’
+
+ List of metadata names in the directory (like ‘os.listdir()’)
+
+‘get_metadata(name)’
+
+ Return the named metadata resource as a string. The data is read
+ in binary mode; i.e., the exact bytes of the resource file are
+ returned.
+
+‘get_metadata_lines(name)’
+
+ Yield named metadata resource as list of non-blank non-comment
+ lines. This is short for calling
+ ‘yield_lines(provider.get_metadata(name))’. See the section on
+ *note yield_lines(): 95. below for more information on the syntax
+ it recognizes.
+
+‘run_script(script_name, namespace)’
+
+ Execute the named script in the supplied namespace dictionary.
+ Raises ‘ResolutionError’ if there is no script by that name in the
+ ‘scripts’ metadata directory. ‘namespace’ should be a Python
+ dictionary, usually a module dictionary if the script is being run
+ as a module.
+
+
+File: setuptools.info, Node: Exceptions, Next: Supporting Custom Importers, Prev: Metadata API, Up: API Reference
+
+3.2.9 Exceptions
+----------------
+
+‘pkg_resources’ provides a simple exception hierarchy for problems that
+may occur when processing requests to locate and activate packages:
+
+ ResolutionError
+ DistributionNotFound
+ VersionConflict
+ UnknownExtra
+
+ ExtractionError
+
+‘ResolutionError’
+
+ This class is used as a base class for the other three exceptions,
+ so that you can catch all of them with a single “except” clause.
+ It is also raised directly for miscellaneous requirement-resolution
+ problems like trying to run a script that doesn’t exist in the
+ distribution it was requested from.
+
+‘DistributionNotFound’
+
+ A distribution needed to fulfill a requirement could not be found.
+
+‘VersionConflict’
+
+ The requested version of a project conflicts with an
+ already-activated version of the same project.
+
+‘UnknownExtra’
+
+ One of the “extras” requested was not recognized by the
+ distribution it was requested from.
+
+‘ExtractionError’
+
+ A problem occurred extracting a resource to the Python Egg cache.
+ The following attributes are available on instances of this
+ exception:
+
+ manager
+
+ The resource manager that raised this exception
+
+ cache_path
+
+ The base directory for resource extraction
+
+ original_error
+
+ The exception instance that caused extraction to fail
+
+
+File: setuptools.info, Node: Supporting Custom Importers, Next: Utility Functions, Prev: Exceptions, Up: API Reference
+
+3.2.10 Supporting Custom Importers
+----------------------------------
+
+By default, ‘pkg_resources’ supports normal filesystem imports, and
+‘zipimport’ importers. If you wish to use the ‘pkg_resources’ features
+with other (PEP 302-compatible) importers or module loaders, you may
+need to register various handlers and support functions using these
+APIs:
+
+‘register_finder(importer_type, distribution_finder)’
+
+ Register ‘distribution_finder’ to find distributions in ‘sys.path’
+ items. ‘importer_type’ is the type or class of a PEP 302
+ “Importer” (‘sys.path’ item handler), and ‘distribution_finder’ is
+ a callable that, when passed a path item, the importer instance,
+ and an ‘only’ flag, yields ‘Distribution’ instances found under
+ that path item. (The ‘only’ flag, if true, means the finder should
+ yield only ‘Distribution’ objects whose ‘location’ is equal to the
+ path item provided.)
+
+ See the source of the ‘pkg_resources.find_on_path’ function for an
+ example finder function.
+
+‘register_loader_type(loader_type, provider_factory)’
+
+ Register ‘provider_factory’ to make ‘IResourceProvider’ objects for
+ ‘loader_type’. ‘loader_type’ is the type or class of a PEP 302
+ ‘module.__loader__’, and ‘provider_factory’ is a function that,
+ when passed a module object, returns an *note IResourceProvider:
+ 8b. for that module, allowing it to be used with the *note
+ ResourceManager API: 35.
+
+‘register_namespace_handler(importer_type, namespace_handler)’
+
+ Register ‘namespace_handler’ to declare namespace packages for the
+ given ‘importer_type’. ‘importer_type’ is the type or class of a
+ PEP 302 “importer” (sys.path item handler), and ‘namespace_handler’
+ is a callable with a signature like this:
+
+ def namespace_handler(importer, path_entry, moduleName, module):
+ # return a path_entry to use for child packages
+
+ Namespace handlers are only called if the relevant importer object
+ has already agreed that it can handle the relevant path item. The
+ handler should only return a subpath if the module ‘__path__’ does
+ not already contain an equivalent subpath. Otherwise, it should
+ return None.
+
+ For an example namespace handler, see the source of the
+ ‘pkg_resources.file_ns_handler’ function, which is used for both
+ zipfile importing and regular importing.
+
+* Menu:
+
+* IResourceProvider::
+* Built-in Resource Providers::
+
+
+File: setuptools.info, Node: IResourceProvider, Next: Built-in Resource Providers, Up: Supporting Custom Importers
+
+3.2.10.1 IResourceProvider
+..........................
+
+‘IResourceProvider’ is an abstract class that documents what methods are
+required of objects returned by a ‘provider_factory’ registered with
+‘register_loader_type()’. ‘IResourceProvider’ is a subclass of
+‘IMetadataProvider’, so objects that implement this interface must also
+implement all of the *note IMetadataProvider Methods: 8c. as well as the
+methods shown here. The ‘manager’ argument to the methods below must be
+an object that supports the full *note ResourceManager API: 35.
+documented above.
+
+‘get_resource_filename(manager, resource_name)’
+
+ Return a true filesystem path for ‘resource_name’, coordinating the
+ extraction with ‘manager’, if the resource must be unpacked to the
+ filesystem.
+
+‘get_resource_stream(manager, resource_name)’
+
+ Return a readable file-like object for ‘resource_name’.
+
+‘get_resource_string(manager, resource_name)’
+
+ Return a string containing the contents of ‘resource_name’.
+
+‘has_resource(resource_name)’
+
+ Does the package contain the named resource?
+
+‘resource_isdir(resource_name)’
+
+ Is the named resource a directory? Return a false value if the
+ resource does not exist or is not a directory.
+
+‘resource_listdir(resource_name)’
+
+ Return a list of the contents of the resource directory, ala
+ ‘os.listdir()’. Requesting the contents of a non-existent
+ directory may raise an exception.
+
+Note, by the way, that your provider classes need not (and should not)
+subclass ‘IResourceProvider’ or ‘IMetadataProvider’! These classes
+exist solely for documentation purposes and do not provide any useful
+implementation code. You may instead wish to subclass one of the *note
+built-in resource providers: 97.
+
+
+File: setuptools.info, Node: Built-in Resource Providers, Prev: IResourceProvider, Up: Supporting Custom Importers
+
+3.2.10.2 Built-in Resource Providers
+....................................
+
+‘pkg_resources’ includes several provider classes that are automatically
+used where appropriate. Their inheritance tree looks like this:
+
+ NullProvider
+ EggProvider
+ DefaultProvider
+ PathMetadata
+ ZipProvider
+ EggMetadata
+ EmptyProvider
+ FileMetadata
+
+‘NullProvider’
+
+ This provider class is just an abstract base that provides for
+ common provider behaviors (such as running scripts), given a
+ definition for just a few abstract methods.
+
+‘EggProvider’
+
+ This provider class adds in some egg-specific features that are
+ common to zipped and unzipped eggs.
+
+‘DefaultProvider’
+
+ This provider class is used for unpacked eggs and “plain old
+ Python” filesystem modules.
+
+‘ZipProvider’
+
+ This provider class is used for all zipped modules, whether they
+ are eggs or not.
+
+‘EmptyProvider’
+
+ This provider class always returns answers consistent with a
+ provider that has no metadata or resources. ‘Distribution’ objects
+ created without a ‘metadata’ argument use an instance of this
+ provider class instead. Since all ‘EmptyProvider’ instances are
+ equivalent, there is no need to have more than one instance.
+ ‘pkg_resources’ therefore creates a global instance of this class
+ under the name ‘empty_provider’, and you may use it if you have
+ need of an ‘EmptyProvider’ instance.
+
+‘PathMetadata(path, egg_info)’
+
+ Create an ‘IResourceProvider’ for a filesystem-based distribution,
+ where ‘path’ is the filesystem location of the importable modules,
+ and ‘egg_info’ is the filesystem location of the distribution’s
+ metadata directory. ‘egg_info’ should usually be the ‘EGG-INFO’
+ subdirectory of ‘path’ for an “unpacked egg”, and a
+ ‘ProjectName.egg-info’ subdirectory of ‘path’ for a “development
+ egg”. However, other uses are possible for custom purposes.
+
+‘EggMetadata(zipimporter)’
+
+ Create an ‘IResourceProvider’ for a zipfile-based distribution.
+ The ‘zipimporter’ should be a ‘zipimport.zipimporter’ instance, and
+ may represent a “basket” (a zipfile containing multiple “.egg”
+ subdirectories) a specific egg `within' a basket, or a zipfile egg
+ (where the zipfile itself is a “.egg”). It can also be a
+ combination, such as a zipfile egg that also contains other eggs.
+
+‘FileMetadata(path_to_pkg_info)’
+
+ Create an ‘IResourceProvider’ that provides exactly one metadata
+ resource: ‘PKG-INFO’. The supplied path should be a distutils
+ PKG-INFO file. This is basically the same as an ‘EmptyProvider’,
+ except that requests for ‘PKG-INFO’ will be answered using the
+ contents of the designated file. (This provider is used to wrap
+ ‘.egg-info’ files installed by vendor-supplied system packages.)
+
+
+File: setuptools.info, Node: Utility Functions, Prev: Supporting Custom Importers, Up: API Reference
+
+3.2.11 Utility Functions
+------------------------
+
+In addition to its high-level APIs, ‘pkg_resources’ also includes
+several generally-useful utility routines. These routines are used to
+implement the high-level APIs, but can also be quite useful by
+themselves.
+
+* Menu:
+
+* Parsing Utilities::
+* Platform Utilities::
+* PEP 302 Utilities::
+* File/Path Utilities::
+* History::
+
+
+File: setuptools.info, Node: Parsing Utilities, Next: Platform Utilities, Up: Utility Functions
+
+3.2.11.1 Parsing Utilities
+..........................
+
+‘parse_version(version)’
+
+ Parsed a project’s version string as defined by PEP 440. The
+ returned value will be an object that represents the version.
+ These objects may be compared to each other and sorted. The
+ sorting algorithm is as defined by PEP 440 with the addition that
+ any version which is not a valid PEP 440 version will be considered
+ less than any valid PEP 440 version and the invalid versions will
+ continue sorting using the original algorithm.
+
+‘yield_lines(strs)’
+
+ Yield non-empty/non-comment lines from a string/unicode or a
+ possibly- nested sequence thereof. If ‘strs’ is an instance of
+ ‘basestring’, it is split into lines, and each non-blank,
+ non-comment line is yielded after stripping leading and trailing
+ whitespace. (Lines whose first non-blank character is ‘#’ are
+ considered comment lines.)
+
+ If ‘strs’ is not an instance of ‘basestring’, it is iterated over,
+ and each item is passed recursively to ‘yield_lines()’, so that an
+ arbitrarily nested sequence of strings, or sequences of sequences
+ of strings can be flattened out to the lines contained therein. So
+ for example, passing a file object or a list of strings to
+ ‘yield_lines’ will both work. (Note that between each string in a
+ sequence of strings there is assumed to be an implicit line break,
+ so lines cannot bridge two strings in a sequence.)
+
+ This routine is used extensively by ‘pkg_resources’ to parse
+ metadata and file formats of various kinds, and most other
+ ‘pkg_resources’ parsing functions that yield multiple values will
+ use it to break up their input. However, this routine is
+ idempotent, so calling ‘yield_lines()’ on the output of another
+ call to ‘yield_lines()’ is completely harmless.
+
+‘split_sections(strs)’
+
+ Split a string (or possibly-nested iterable thereof), yielding
+ ‘(section, content)’ pairs found using an ‘.ini’-like syntax. Each
+ ‘section’ is a whitespace-stripped version of the section name
+ (“‘[section]’”) and each ‘content’ is a list of stripped lines
+ excluding blank lines and comment-only lines. If there are any
+ non-blank, non-comment lines before the first section header,
+ they’re yielded in a first ‘section’ of ‘None’.
+
+ This routine uses ‘yield_lines()’ as its front end, so you can pass
+ in anything that ‘yield_lines()’ accepts, such as an open text
+ file, string, or sequence of strings. ‘ValueError’ is raised if a
+ malformed section header is found (i.e. a line starting with ‘[’
+ but not ending with ‘]’).
+
+ Note that this simplistic parser assumes that any line whose first
+ nonblank character is ‘[’ is a section heading, so it can’t support
+ .ini format variations that allow ‘[’ as the first nonblank
+ character on other lines.
+
+‘safe_name(name)’
+
+ Return a “safe” form of a project’s name, suitable for use in a
+ ‘Requirement’ string, as a distribution name, or a PyPI project
+ name. All non-alphanumeric runs are condensed to single “-”
+ characters, such that a name like “The $$$ Tree” becomes
+ “The-Tree”. Note that if you are generating a filename from this
+ value you should combine it with a call to ‘to_filename()’ so all
+ dashes (“-“) are replaced by underscores (“_”). See
+ ‘to_filename()’.
+
+‘safe_version(version)’
+
+ This will return the normalized form of any PEP 440 version. If
+ the version string is not PEP 440 compatible, this function behaves
+ similar to ‘safe_name()’ except that spaces in the input become
+ dots, and dots are allowed to exist in the output. As with
+ ‘safe_name()’, if you are generating a filename from this you
+ should replace any “-” characters in the output with underscores.
+
+‘safe_extra(extra)’
+
+ Return a “safe” form of an extra’s name, suitable for use in a
+ requirement string or a setup script’s ‘extras_require’ keyword.
+ This routine is similar to ‘safe_name()’ except that
+ non-alphanumeric runs are replaced by a single underbar (‘_’), and
+ the result is lowercased.
+
+‘to_filename(name_or_version)’
+
+ Escape a name or version string so it can be used in a
+ dash-separated filename (or ‘#egg=name-version’ tag) without
+ ambiguity. You should only pass in values that were returned by
+ ‘safe_name()’ or ‘safe_version()’.
+
+
+File: setuptools.info, Node: Platform Utilities, Next: PEP 302 Utilities, Prev: Parsing Utilities, Up: Utility Functions
+
+3.2.11.2 Platform Utilities
+...........................
+
+‘get_build_platform()’
+
+ Return this platform’s identifier string. For Windows, the return
+ value is ‘"win32"’, and for macOS it is a string of the form
+ ‘"macosx-10.4-ppc"’. All other platforms return the same
+ uname-based string that the ‘distutils.util.get_platform()’
+ function returns. This string is the minimum platform version
+ required by distributions built on the local machine. (Backward
+ compatibility note: setuptools versions prior to 0.6b1 called this
+ function ‘get_platform()’, and the function is still available
+ under that name for backward compatibility reasons.)
+
+‘get_supported_platform()’ (New in 0.6b1)
+
+ This is the similar to ‘get_build_platform()’, but is the maximum
+ platform version that the local machine supports. You will usually
+ want to use this value as the ‘provided’ argument to the
+ ‘compatible_platforms()’ function.
+
+‘compatible_platforms(provided, required)’
+
+ Return true if a distribution built on the ‘provided’ platform may
+ be used on the ‘required’ platform. If either platform value is
+ ‘None’, it is considered a wildcard, and the platforms are
+ therefore compatible. Likewise, if the platform strings are equal,
+ they’re also considered compatible, and ‘True’ is returned.
+ Currently, the only non-equal platform strings that are considered
+ compatible are macOS platform strings with the same hardware type
+ (e.g. ‘ppc’) and major version (e.g. ‘10’) with the ‘provided’
+ platform’s minor version being less than or equal to the ‘required’
+ platform’s minor version.
+
+‘get_default_cache()’
+
+ Determine the default cache location for extracting resources from
+ zipped eggs. This routine returns the ‘PYTHON_EGG_CACHE’
+ environment variable, if set. Otherwise, on Windows, it returns a
+ “Python-Eggs” subdirectory of the user’s “Application Data”
+ directory. On all other systems, it returns
+ ‘os.path.expanduser("~/.python-eggs")’ if ‘PYTHON_EGG_CACHE’ is not
+ set.
+
+
+File: setuptools.info, Node: PEP 302 Utilities, Next: File/Path Utilities, Prev: Platform Utilities, Up: Utility Functions
+
+3.2.11.3 PEP 302 Utilities
+..........................
+
+‘get_importer(path_item)’
+
+ A deprecated alias for ‘pkgutil.get_importer()’
+
+
+File: setuptools.info, Node: File/Path Utilities, Next: History, Prev: PEP 302 Utilities, Up: Utility Functions
+
+3.2.11.4 File/Path Utilities
+............................
+
+‘ensure_directory(path)’
+
+ Ensure that the parent directory (‘os.path.dirname’) of ‘path’
+ actually exists, using ‘os.makedirs()’ if necessary.
+
+‘normalize_path(path)’
+
+ Return a “normalized” version of ‘path’, such that two paths
+ represent the same filesystem location if they have equal
+ ‘normalized_path()’ values. Specifically, this is a shortcut for
+ calling ‘os.path.realpath’ and ‘os.path.normcase’ on ‘path’.
+ Unfortunately, on certain platforms (notably Cygwin and macOS) the
+ ‘normcase’ function does not accurately reflect the platform’s
+ case-sensitivity, so there is always the possibility of two
+ apparently-different paths being equal on such platforms.
+
+
+File: setuptools.info, Node: History, Prev: File/Path Utilities, Up: Utility Functions
+
+3.2.11.5 History
+................
+
+0.6c9
+
+ * Fix ‘resource_listdir('')’ always returning an empty list for
+ zipped eggs.
+
+0.6c7
+
+ * Fix package precedence problem where single-version eggs
+ installed in ‘site-packages’ would take precedence over ‘.egg’
+ files (or directories) installed in ‘site-packages’.
+
+0.6c6
+
+ * Fix extracted C extensions not having executable permissions
+ under Cygwin.
+
+ * Allow ‘.egg-link’ files to contain relative paths.
+
+ * Fix cache dir defaults on Windows when multiple environment
+ vars are needed to construct a path.
+
+0.6c4
+
+ * Fix “dev” versions being considered newer than release
+ candidates.
+
+0.6c3
+
+ * Python 2.5 compatibility fixes.
+
+0.6c2
+
+ * Fix a problem with eggs specified directly on ‘PYTHONPATH’ on
+ case-insensitive filesystems possibly not showing up in the
+ default working set, due to differing normalizations of
+ ‘sys.path’ entries.
+
+0.6b3
+
+ * Fixed a duplicate path insertion problem on case-insensitive
+ filesystems.
+
+0.6b1
+
+ * Split ‘get_platform()’ into ‘get_supported_platform()’ and
+ ‘get_build_platform()’ to work around a Mac versioning problem
+ that caused the behavior of ‘compatible_platforms()’ to be
+ platform specific.
+
+ * Fix entry point parsing when a standalone module name has
+ whitespace between it and the extras.
+
+0.6a11
+
+ * Added ‘ExtractionError’ and
+ ‘ResourceManager.extraction_error()’ so that cache permission
+ problems get a more user-friendly explanation of the problem,
+ and so that programs can catch and handle extraction errors if
+ they need to.
+
+0.6a10
+
+ * Added the ‘extras’ attribute to ‘Distribution’, the
+ ‘find_plugins()’ method to ‘WorkingSet’, and the ‘__add__()’
+ and ‘__iadd__()’ methods to ‘Environment’.
+
+ * ‘safe_name()’ now allows dots in project names.
+
+ * There is a new ‘to_filename()’ function that escapes project
+ names and versions for safe use in constructing egg filenames
+ from a Distribution object’s metadata.
+
+ * Added ‘Distribution.clone()’ method, and keyword argument
+ support to other ‘Distribution’ constructors.
+
+ * Added the ‘DEVELOP_DIST’ precedence, and automatically assign
+ it to eggs using ‘.egg-info’ format.
+
+0.6a9
+
+ * Don’t raise an error when an invalid (unfinished) distribution
+ is found unless absolutely necessary. Warn about skipping
+ invalid/unfinished eggs when building an Environment.
+
+ * Added support for ‘.egg-info’ files or directories with
+ version/platform information embedded in the filename, so that
+ system packagers have the option of including ‘PKG-INFO’ files
+ to indicate the presence of a system-installed egg, without
+ needing to use ‘.egg’ directories, zipfiles, or ‘.pth’
+ manipulation.
+
+ * Changed ‘parse_version()’ to remove dashes before pre-release
+ tags, so that ‘0.2-rc1’ is considered an `older' version than
+ ‘0.2’, and is equal to ‘0.2rc1’. The idea that a dash
+ `always' meant a post-release version was highly non-intuitive
+ to setuptools users and Python developers, who seem to want to
+ use ‘-rc’ version numbers a lot.
+
+0.6a8
+
+ * Fixed a problem with ‘WorkingSet.resolve()’ that prevented
+ version conflicts from being detected at runtime.
+
+ * Improved runtime conflict warning message to identify a line
+ in the user’s program, rather than flagging the ‘warn()’ call
+ in ‘pkg_resources’.
+
+ * Avoid giving runtime conflict warnings for namespace packages,
+ even if they were declared by a different package than the one
+ currently being activated.
+
+ * Fix path insertion algorithm for case-insensitive filesystems.
+
+ * Fixed a problem with nested namespace packages (e.g.
+ ‘peak.util’) not being set as an attribute of their parent
+ package.
+
+0.6a6
+
+ * Activated distributions are now inserted in ‘sys.path’ (and
+ the working set) just before the directory that contains them,
+ instead of at the end. This allows e.g. eggs in
+ ‘site-packages’ to override unmanaged modules in the same
+ location, and allows eggs found earlier on ‘sys.path’ to
+ override ones found later.
+
+ * When a distribution is activated, it now checks whether any
+ contained non-namespace modules have already been imported and
+ issues a warning if a conflicting module has already been
+ imported.
+
+ * Changed dependency processing so that it’s breadth-first,
+ allowing a depender’s preferences to override those of a
+ dependee, to prevent conflicts when a lower version is
+ acceptable to the dependee, but not the depender.
+
+ * Fixed a problem extracting zipped files on Windows, when the
+ egg in question has had changed contents but still has the
+ same version number.
+
+0.6a4
+
+ * Fix a bug in ‘WorkingSet.resolve()’ that was introduced in
+ 0.6a3.
+
+0.6a3
+
+ * Added ‘safe_extra()’ parsing utility routine, and use it for
+ Requirement, EntryPoint, and Distribution objects’ extras
+ handling.
+
+0.6a1
+
+ * Enhanced performance of ‘require()’ and related operations
+ when all requirements are already in the working set, and
+ enhanced performance of directory scanning for distributions.
+
+ * Fixed some problems using ‘pkg_resources’ w/PEP 302 loaders
+ other than ‘zipimport’, and the previously-broken “eager
+ resource” support.
+
+ * Fixed ‘pkg_resources.resource_exists()’ not working correctly,
+ along with some other resource API bugs.
+
+ * Many API changes and enhancements:
+
+ * Added ‘EntryPoint’, ‘get_entry_map’, ‘load_entry_point’,
+ and ‘get_entry_info’ APIs for dynamic plugin discovery.
+
+ * ‘list_resources’ is now ‘resource_listdir’ (and it
+ actually works)
+
+ * Resource API functions like ‘resource_string()’ that
+ accepted a package name and resource name, will now also
+ accept a ‘Requirement’ object in place of the package
+ name (to allow access to non-package data files in an
+ egg).
+
+ * ‘get_provider()’ will now accept a ‘Requirement’ instance
+ or a module name. If it is given a ‘Requirement’, it
+ will return a corresponding ‘Distribution’ (by calling
+ ‘require()’ if a suitable distribution isn’t already in
+ the working set), rather than returning a metadata and
+ resource provider for a specific module. (The difference
+ is in how resource paths are interpreted; supplying a
+ module name means resources path will be module-relative,
+ rather than relative to the distribution’s root.)
+
+ * ‘Distribution’ objects now implement the
+ ‘IResourceProvider’ and ‘IMetadataProvider’ interfaces,
+ so you don’t need to reference the (no longer available)
+ ‘metadata’ attribute to get at these interfaces.
+
+ * ‘Distribution’ and ‘Requirement’ both have a
+ ‘project_name’ attribute for the project name they refer
+ to. (Previously these were ‘name’ and ‘distname’
+ attributes.)
+
+ * The ‘path’ attribute of ‘Distribution’ objects is now
+ ‘location’, because it isn’t necessarily a filesystem
+ path (and hasn’t been for some time now). The ‘location’
+ of ‘Distribution’ objects in the filesystem should always
+ be normalized using ‘pkg_resources.normalize_path()’; all
+ of the setuptools’ code that generates distributions from
+ the filesystem (including ‘Distribution.from_filename()’)
+ ensure this invariant, but if you use a more generic API
+ like ‘Distribution()’ or ‘Distribution.from_location()’
+ you should take care that you don’t create a distribution
+ with an un-normalized filesystem path.
+
+ * ‘Distribution’ objects now have an ‘as_requirement()’
+ method that returns a ‘Requirement’ for the
+ distribution’s project name and version.
+
+ * Distribution objects no longer have an ‘installed_on()’
+ method, and the ‘install_on()’ method is now ‘activate()’
+ (but may go away altogether soon). The ‘depends()’
+ method has also been renamed to ‘requires()’, and
+ ‘InvalidOption’ is now ‘UnknownExtra’.
+
+ * ‘find_distributions()’ now takes an additional argument
+ called ‘only’, that tells it to only yield distributions
+ whose location is the passed-in path. (It defaults to
+ False, so that the default behavior is unchanged.)
+
+ * ‘AvailableDistributions’ is now called ‘Environment’, and
+ the ‘get()’, ‘__len__()’, and ‘__contains__()’ methods
+ were removed, because they weren’t particularly useful.
+ ‘__getitem__()’ no longer raises ‘KeyError’; it just
+ returns an empty list if there are no distributions for
+ the named project.
+
+ * The ‘resolve()’ method of ‘Environment’ is now a method
+ of ‘WorkingSet’ instead, and the ‘best_match()’ method
+ now uses a working set instead of a path list as its
+ second argument.
+
+ * There is a new ‘pkg_resources.add_activation_listener()’
+ API that lets you register a callback for notifications
+ about distributions added to ‘sys.path’ (including the
+ distributions already on it). This is basically a hook
+ for extensible applications and frameworks to be able to
+ search for plugin metadata in distributions added at
+ runtime.
+
+0.5a13
+
+ * Fixed a bug in resource extraction from nested packages in a
+ zipped egg.
+
+0.5a12
+
+ * Updated extraction/cache mechanism for zipped resources to
+ avoid inter- process and inter-thread races during extraction.
+ The default cache location can now be set via the
+ ‘PYTHON_EGGS_CACHE’ environment variable, and the default
+ Windows cache is now a ‘Python-Eggs’ subdirectory of the
+ current user’s “Application Data” directory, if the
+ ‘PYTHON_EGGS_CACHE’ variable isn’t set.
+
+0.5a10
+
+ * Fix a problem with ‘pkg_resources’ being confused by
+ non-existent eggs on ‘sys.path’ (e.g. if a user deletes an
+ egg without removing it from the ‘easy-install.pth’ file).
+
+ * Fix a problem with “basket” support in ‘pkg_resources’, where
+ egg-finding never actually went inside ‘.egg’ files.
+
+ * Made ‘pkg_resources’ import the module you request resources
+ from, if it’s not already imported.
+
+0.5a4
+
+ * ‘pkg_resources.AvailableDistributions.resolve()’ and related
+ methods now accept an ‘installer’ argument: a callable taking
+ one argument, a ‘Requirement’ instance. The callable must
+ return a ‘Distribution’ object, or ‘None’ if no distribution
+ is found. This feature is used by EasyInstall to resolve
+ dependencies by recursively invoking itself.
+
+0.4a4
+
+ * Fix problems with ‘resource_listdir()’, ‘resource_isdir()’ and
+ resource directory extraction for zipped eggs.
+
+0.4a3
+
+ * Fixed scripts not being able to see a ‘__file__’ variable in
+ ‘__main__’
+
+ * Fixed a problem with ‘resource_isdir()’ implementation that
+ was introduced in 0.4a2.
+
+0.4a1
+
+ * Fixed a bug in requirements processing for exact versions
+ (i.e. ‘==’ and ‘!=’) when only one condition was included.
+
+ * Added ‘safe_name()’ and ‘safe_version()’ APIs to clean up
+ handling of arbitrary distribution names and versions found on
+ PyPI.
+
+0.3a4
+
+ * ‘pkg_resources’ now supports resource directories, not just
+ the resources in them. In particular, there are
+ ‘resource_listdir()’ and ‘resource_isdir()’ APIs.
+
+ * ‘pkg_resources’ now supports “egg baskets” – .egg zipfiles
+ which contain multiple distributions in subdirectories whose
+ names end with ‘.egg’. Having such a “basket” in a directory
+ on ‘sys.path’ is equivalent to having the individual eggs in
+ that directory, but the contained eggs can be individually
+ added (or not) to ‘sys.path’. Currently, however, there is no
+ automated way to create baskets.
+
+ * Namespace package manipulation is now protected by the Python
+ import lock.
+
+0.3a1
+
+ * Initial release.
+
+
+File: setuptools.info, Node: Keywords, Next: Roadmap, Prev: Package Discovery and Resource Access using pkg_resources, Up: Top
+
+4 Keywords
+**********
+
+‘name’
+
+ A string specifying the name of the package.
+
+‘version’
+
+ A string specifying the version number of the package.
+
+‘description’
+
+ A string describing the package in a single line.
+
+‘long_description’
+
+ A string providing a longer description of the package.
+
+‘long_description_content_type’
+
+ A string specifying the content type is used for the
+ ‘long_description’ (e.g. ‘text/markdown’)
+
+‘author’
+
+ A string specifying the author of the package.
+
+‘author_email’
+
+ A string specifying the email address of the package author.
+
+‘maintainer’
+
+ A string specifying the name of the current maintainer, if
+ different from the author. Note that if the maintainer is
+ provided, setuptools will use it as the author in ‘PKG-INFO’.
+
+‘maintainer_email’
+
+ A string specifying the email address of the current maintainer, if
+ different from the author.
+
+‘url’
+
+ A string specifying the URL for the package homepage.
+
+‘download_url’
+
+ A string specifying the URL to download the package.
+
+‘packages’
+
+ A list of strings specifying the packages that setuptools will
+ manipulate.
+
+‘py_modules’
+
+ A list of strings specifying the modules that setuptools will
+ manipulate.
+
+‘scripts’
+
+ A list of strings specifying the standalone script files to be
+ built and installed.
+
+‘ext_package’
+
+ A string specifying the base package name for the extensions
+ provided by this package.
+
+‘ext_modules’
+
+ A list of instances of ‘setuptools.Extension’ providing the list of
+ Python extensions to be built.
+
+‘classifiers’
+
+ A list of strings describing the categories for the package.
+
+‘distclass’
+
+ A subclass of ‘Distribution’ to use.
+
+‘script_name’
+
+ A string specifying the name of the setup.py script – defaults to
+ ‘sys.argv[0]’
+
+‘script_args’
+
+ A list of strings defining the arguments to supply to the setup
+ script.
+
+‘options’
+
+ A dictionary providing the default options for the setup script.
+
+‘license’
+
+ A string specifying the license of the package.
+
+‘keywords’
+
+ A list of strings or a comma-separated string providing descriptive
+ meta-data. See: PEP 0314(1).
+
+‘platforms’
+
+ A list of strings or comma-separated string.
+
+‘cmdclass’
+
+ A dictionary providing a mapping of command names to ‘Command’
+ subclasses.
+
+‘data_files’
+
+ Warning: ‘data_files’ is deprecated. It does not work with
+ wheels, so it should be avoided.
+
+ A list of strings specifying the data files to install.
+
+‘package_dir’
+
+ A dictionary providing a mapping of package to directory names.
+
+‘requires’
+
+ Warning: ‘requires’ is superseded by ‘install_requires’ and
+ should not be used anymore.
+
+‘obsoletes’
+
+ Warning: ‘obsoletes’ is currently ignored by ‘pip’.
+
+ List of strings describing packages which this package renders
+ obsolete, meaning that the two projects should not be installed at
+ the same time.
+
+ Version declarations can be supplied. Version numbers must be in
+ the format specified in Version specifiers (e.g. ‘foo (<3.0)’).
+
+ This field may be followed by an environment marker after a
+ semicolon (e.g. ‘foo; os_name == "posix"’)
+
+ The most common use of this field will be in case a project name
+ changes, e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0.
+ When you install Torqued Python, the Gorgon distribution should be
+ removed.
+
+‘provides’
+
+ Warning: ‘provides’ is currently ignored by ‘pip’.
+
+ List of strings describing package- and virtual package names
+ contained within this package.
+
+ A package may provide additional names, e.g. to indicate that
+ multiple projects have been bundled together. For instance, source
+ distributions of the ZODB project have historically included the
+ transaction project, which is now available as a separate
+ distribution. Installing such a source distribution satisfies
+ requirements for both ZODB and transaction.
+
+ A package may also provide a “virtual” project name, which does not
+ correspond to any separately-distributed project: such a name might
+ be used to indicate an abstract capability which could be supplied
+ by one of multiple projects. E.g., multiple projects might supply
+ RDBMS bindings for use by a given ORM: each project might declare
+ that it provides ORM-bindings, allowing other projects to depend
+ only on having at most one of them installed.
+
+ A version declaration may be supplied and must follow the rules
+ described in Version specifiers. The distribution’s version number
+ will be implied if none is specified (e.g. ‘foo (<3.0)’).
+
+ Each package may be followed by an environment marker after a
+ semicolon (e.g. ‘foo; os_name == "posix"’).
+
+‘include_package_data’
+
+ If set to ‘True’, this tells ‘setuptools’ to automatically include
+ any data files it finds inside your package directories that are
+ specified by your ‘MANIFEST.in’ file. For more information, see
+ the section on *note Including Data Files: 12.
+
+‘exclude_package_data’
+
+ A dictionary mapping package names to lists of glob patterns that
+ should be `excluded' from your package directories. You can use
+ this to trim back any excess files included by
+ ‘include_package_data’. For a complete description and examples,
+ see the section on *note Including Data Files: 12.
+
+‘package_data’
+
+ A dictionary mapping package names to lists of glob patterns. For
+ a complete description and examples, see the section on *note
+ Including Data Files: 12. You do not need to use this option if
+ you are using ‘include_package_data’, unless you need to add e.g.
+ files that are generated by your setup script and build process.
+ (And are therefore not in source control or are files that you
+ don’t want to include in your source distribution.)
+
+‘zip_safe’
+
+ A boolean (True or False) flag specifying whether the project can
+ be safely installed and run from a zip file. If this argument is
+ not supplied, the ‘bdist_egg’ command will have to analyze all of
+ your project’s contents for possible problems each time it builds
+ an egg.
+
+‘install_requires’
+
+ A string or list of strings specifying what other distributions
+ need to be installed when this one is. See the section on *note
+ Declaring required dependency: 2b. for details and examples of the
+ format of this argument.
+
+‘entry_points’
+
+ A dictionary mapping entry point group names to strings or lists of
+ strings defining the entry points. Entry points are used to
+ support dynamic discovery of services or plugins provided by a
+ project. See *note Advertising Behavior: 25. for details and
+ examples of the format of this argument. In addition, this keyword
+ is used to support *note Automatic Script Creation: 21.
+
+‘extras_require’
+
+ A dictionary mapping names of “extras” (optional features of your
+ project) to strings or lists of strings specifying what other
+ distributions must be installed to support those features. See the
+ section on *note Declaring required dependency: 2b. for details and
+ examples of the format of this argument.
+
+‘python_requires’
+
+ A string corresponding to a version specifier (as defined in PEP
+ 440) for the Python version, used to specify the Requires-Python
+ defined in PEP 345.
+
+‘setup_requires’
+
+ Warning: Using ‘setup_requires’ is discouraged in favor of
+ PEP-518(2)
+
+ A string or list of strings specifying what other distributions
+ need to be present in order for the `setup script' to run.
+ ‘setuptools’ will attempt to obtain these (even going so far as to
+ download them using ‘EasyInstall’) before processing the rest of
+ the setup script or commands. This argument is needed if you are
+ using distutils extensions as part of your build process; for
+ example, extensions that process setup() arguments and turn them
+ into EGG-INFO metadata files.
+
+ (Note: projects listed in ‘setup_requires’ will NOT be
+ automatically installed on the system where the setup script is
+ being run. They are simply downloaded to the ./.eggs directory if
+ they’re not locally available already. If you want them to be
+ installed, as well as being available when the setup script is run,
+ you should add them to ‘install_requires’ `and' ‘setup_requires’.)
+
+‘dependency_links’
+
+ Warning: ‘dependency_links’ is deprecated. It is not
+ supported anymore by pip.
+
+ A list of strings naming URLs to be searched when satisfying
+ dependencies. These links will be used if needed to install
+ packages specified by ‘setup_requires’ or ‘tests_require’. They
+ will also be written into the egg’s metadata for use by tools like
+ EasyInstall to use when installing an ‘.egg’ file.
+
+‘namespace_packages’
+
+ A list of strings naming the project’s “namespace packages”. A
+ namespace package is a package that may be split across multiple
+ project distributions. For example, Zope 3’s ‘zope’ package is a
+ namespace package, because subpackages like ‘zope.interface’ and
+ ‘zope.publisher’ may be distributed separately. The egg runtime
+ system can automatically merge such subpackages into a single
+ parent package at runtime, as long as you declare them in each
+ project that contains any subpackages of the namespace package, and
+ as long as the namespace package’s ‘__init__.py’ does not contain
+ any code other than a namespace declaration. See the section on
+ *note Using find_namespace; or find_namespace_packages: 1c. for
+ more information.
+
+‘test_suite’
+
+ A string naming a ‘unittest.TestCase’ subclass (or a package or
+ module containing one or more of them, or a method of such a
+ subclass), or naming a function that can be called with no
+ arguments and returns a ‘unittest.TestSuite’. If the named suite
+ is a module, and the module has an ‘additional_tests()’ function,
+ it is called and the results are added to the tests to be run. If
+ the named suite is a package, any submodules and subpackages are
+ recursively added to the overall test suite.
+
+ Specifying this argument enables use of the *note test - Build
+ package and run a unittest suite: 56. command to run the specified
+ test suite, e.g. via ‘setup.py test’. See the section on the
+ *note test - Build package and run a unittest suite: 56. command
+ below for more details.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘tests_require’
+
+ If your project’s tests need one or more additional packages
+ besides those needed to install it, you can use this option to
+ specify them. It should be a string or list of strings specifying
+ what other distributions need to be present for the package’s tests
+ to run. When you run the ‘test’ command, ‘setuptools’ will attempt
+ to obtain these (even going so far as to download them using
+ ‘EasyInstall’). Note that these required projects will `not' be
+ installed on the system where the tests are run, but only
+ downloaded to the project’s setup directory if they’re not already
+ installed locally.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘test_loader’
+
+ If you would like to use a different way of finding tests to run
+ than what setuptools normally uses, you can specify a module name
+ and class name in this argument. The named class must be
+ instantiable with no arguments, and its instances must support the
+ ‘loadTestsFromNames()’ method as defined in the Python ‘unittest’
+ module’s ‘TestLoader’ class. Setuptools will pass only one test
+ “name” in the ‘names’ argument: the value supplied for the
+ ‘test_suite’ argument. The loader you specify may interpret this
+ string in any way it likes, as there are no restrictions on what
+ may be contained in a ‘test_suite’ string.
+
+ The module name and class name must be separated by a ‘:’. The
+ default value of this argument is
+ ‘"setuptools.command.test:ScanningLoader"’. If you want to use the
+ default ‘unittest’ behavior, you can specify
+ ‘"unittest:TestLoader"’ as your ‘test_loader’ argument instead.
+ This will prevent automatic scanning of submodules and subpackages.
+
+ The module and class you specify here may be contained in another
+ package, as long as you use the ‘tests_require’ option to ensure
+ that the package containing the loader class is available when the
+ ‘test’ command is run.
+
+ New in 41.5.0: Deprecated the test command.
+
+‘eager_resources’
+
+ A list of strings naming resources that should be extracted
+ together, if any of them is needed, or if any C extensions included
+ in the project are imported. This argument is only useful if the
+ project will be installed as a zipfile, and there is a need to have
+ all of the listed resources be extracted to the filesystem `as a
+ unit'. Resources listed here should be ‘/’-separated paths,
+ relative to the source root, so to list a resource ‘foo.png’ in
+ package ‘bar.baz’, you would include the string ‘bar/baz/foo.png’
+ in this argument.
+
+ If you only need to obtain resources one at a time, or you don’t
+ have any C extensions that access other files in the project (such
+ as data files or shared libraries), you probably do NOT need this
+ argument and shouldn’t mess with it. For more details on how this
+ argument works, see the section below on *note Automatic Resource
+ Extraction: 58.
+
+‘use_2to3’
+
+ Convert the source code from Python 2 to Python 3 with 2to3 during
+ the build process. See *note Supporting both Python 2 and Python 3
+ with Setuptools: 59. for more details.
+
+‘convert_2to3_doctests’
+
+ List of doctest source files that need to be converted with 2to3.
+ See *note Supporting both Python 2 and Python 3 with Setuptools:
+ 59. for more details.
+
+‘use_2to3_fixers’
+
+ A list of modules to search for additional fixers to be used during
+ the 2to3 conversion. See *note Supporting both Python 2 and Python
+ 3 with Setuptools: 59. for more details.
+
+‘use_2to3_exclude_fixers’
+
+ List of fixer names to be skipped.
+
+‘project_urls’
+
+ An arbitrary map of URL names to hyperlinks, allowing more
+ extensible documentation of where various resources can be found
+ than the simple ‘url’ and ‘download_url’ options provide.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0314/
+
+ (2) http://www.python.org/dev/peps/pep-0518/
+
+
+File: setuptools.info, Node: Roadmap, Next: Building and Distributing Packages with Setuptools<2>, Prev: Keywords, Up: Top
+
+5 Roadmap
+*********
+
+Setuptools maintains a series of milestones(1) to track a roadmap of
+large-scale goals.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/milestones
+
+
+File: setuptools.info, Node: Building and Distributing Packages with Setuptools<2>, Next: Development on Setuptools, Prev: Roadmap, Up: Top
+
+6 Building and Distributing Packages with Setuptools
+****************************************************
+
+‘Setuptools’ is a collection of enhancements to the Python ‘distutils’
+that allow developers to more easily build and distribute Python
+packages, especially ones that have dependencies on other packages.
+
+Packages built and distributed using ‘setuptools’ look to the user like
+ordinary Python packages based on the ‘distutils’.
+
+Feature Highlights:
+
+ * Create Python Eggs(1) - a single-file importable distribution
+ format
+
+ * Enhanced support for accessing data files hosted in zipped
+ packages.
+
+ * Automatically include all packages in your source tree, without
+ listing them individually in setup.py
+
+ * Automatically include all relevant files in your source
+ distributions, without needing to create a ‘MANIFEST.in’ file, and
+ without having to force regeneration of the ‘MANIFEST’ file when
+ your source tree changes.
+
+ * Automatically generate wrapper scripts or Windows (console and GUI)
+ .exe files for any number of “main” functions in your project.
+ (Note: this is not a py2exe replacement; the .exe files rely on the
+ local Python installation.)
+
+ * Transparent Cython support, so that your setup.py can list ‘.pyx’
+ files and still work even when the end-user doesn’t have Cython
+ installed (as long as you include the Cython-generated C in your
+ source distribution)
+
+ * Command aliases - create project-specific, per-user, or site-wide
+ shortcut names for commonly used commands and options
+
+ * Deploy your project in “development mode”, such that it’s available
+ on ‘sys.path’, yet can still be edited directly from its source
+ checkout.
+
+ * Easily extend the distutils with new commands or ‘setup()’
+ arguments, and distribute/reuse your extensions for multiple
+ projects, without copying code.
+
+ * Create extensible applications and frameworks that automatically
+ discover extensions, using simple “entry points” declared in a
+ project’s setup script.
+
+ * Full support for PEP 420 via ‘find_namespace_packages()’, which is
+ also backwards compatible to the existing ‘find_packages()’ for
+ Python >= 3.3.
+
+* Menu:
+
+* Developer’s Guide::
+
+ ---------- Footnotes ----------
+
+ (1) http://peak.telecommunity.com/DevCenter/PythonEggs
+
+
+File: setuptools.info, Node: Developer’s Guide, Up: Building and Distributing Packages with Setuptools<2>
+
+6.1 Developer’s Guide
+=====================
+
+* Menu:
+
+* TRANSITIONAL NOTE::
+
+
+File: setuptools.info, Node: TRANSITIONAL NOTE, Up: Developer’s Guide
+
+6.1.1 TRANSITIONAL NOTE
+-----------------------
+
+Setuptools automatically calls ‘declare_namespace()’ for you at runtime,
+but future versions may `not'. This is because the automatic
+declaration feature has some negative side effects, such as needing to
+import all namespace packages during the initialization of the
+‘pkg_resources’ runtime, and also the need for ‘pkg_resources’ to be
+explicitly imported before any namespace packages work at all. In some
+future releases, you’ll be responsible for including your own
+declaration lines, and the automatic declaration feature will be dropped
+to get rid of the negative side effects.
+
+During the remainder of the current development cycle, therefore,
+setuptools will warn you about missing ‘declare_namespace()’ calls in
+your ‘__init__.py’ files, and you should correct these as soon as
+possible before the compatibility support is removed. Namespace
+packages without declaration lines will not work correctly once a user
+has upgraded to a later version, so it’s important that you make this
+change now in order to avoid having your code break in the field. Our
+apologies for the inconvenience, and thank you for your patience.
+
+* Menu:
+
+* setup.cfg-only projects: setup cfg-only projects.
+* Configuration API::
+* Mailing List and Bug Tracker::
+
+
+File: setuptools.info, Node: setup cfg-only projects, Next: Configuration API, Up: TRANSITIONAL NOTE
+
+6.1.1.1 setup.cfg-only projects
+...............................
+
+New in version 40.9.0.
+
+If ‘setup.py’ is missing from the project directory when a PEP 517(1)
+build is invoked, ‘setuptools’ emulates a dummy ‘setup.py’ file
+containing only a ‘setuptools.setup()’ call.
+
+ Note: PEP 517(2) doesn’t support editable installs so this is
+ currently incompatible with ‘pip install -e .’, as PEP 517(3) does
+ not support editable installs.
+
+This means that you can have a Python project with all build
+configuration specified in ‘setup.cfg’, without a ‘setup.py’ file, if
+you `can rely on' your project always being built by a PEP 517(4)/ PEP
+518(5) compatible frontend.
+
+To use this feature:
+
+ * Specify build requirements and PEP 517(6) build backend in
+ ‘pyproject.toml’. For example:
+
+ [build-system]
+ requires = [
+ "setuptools >= 40.9.0",
+ "wheel",
+ ]
+ build-backend = "setuptools.build_meta"
+
+ * Use a PEP 517(7) compatible build frontend, such as ‘pip >= 19’ or
+ ‘pep517’.
+
+ Warning: As PEP 517(8) is new, support is not universal, and
+ frontends that do support it may still have bugs. For
+ compatibility, you may want to put a ‘setup.py’ file
+ containing only a ‘setuptools.setup()’ invocation.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0517
+
+ (2) https://www.python.org/dev/peps/pep-0517
+
+ (3) https://www.python.org/dev/peps/pep-0517
+
+ (4) https://www.python.org/dev/peps/pep-0517
+
+ (5) https://www.python.org/dev/peps/pep-0518
+
+ (6) https://www.python.org/dev/peps/pep-0517
+
+ (7) https://www.python.org/dev/peps/pep-0517
+
+ (8) https://www.python.org/dev/peps/pep-0517
+
+
+File: setuptools.info, Node: Configuration API, Next: Mailing List and Bug Tracker, Prev: setup cfg-only projects, Up: TRANSITIONAL NOTE
+
+6.1.1.2 Configuration API
+.........................
+
+Some automation tools may wish to access data from a configuration file.
+
+‘Setuptools’ exposes a ‘read_configuration()’ function for parsing
+‘metadata’ and ‘options’ sections into a dictionary.
+
+ from setuptools.config import read_configuration
+
+ conf_dict = read_configuration("/home/user/dev/package/setup.cfg")
+
+By default, ‘read_configuration()’ will read only the file provided in
+the first argument. To include values from other configuration files
+which could be in various places, set the ‘find_others’ keyword argument
+to ‘True’.
+
+If you have only a configuration file but not the whole package, you can
+still try to get data out of it with the help of the
+‘ignore_option_errors’ keyword argument. When it is set to ‘True’, all
+options with errors possibly produced by directives, such as ‘attr:’ and
+others, will be silently ignored. As a consequence, the resulting
+dictionary will include no such options.
+
+
+File: setuptools.info, Node: Mailing List and Bug Tracker, Prev: Configuration API, Up: TRANSITIONAL NOTE
+
+6.1.1.3 Mailing List and Bug Tracker
+....................................
+
+Please use the distutils-sig mailing list(1) for questions and
+discussion about setuptools, and the setuptools bug tracker(2) ONLY for
+issues you have confirmed via the list are actual bugs, and which you
+have reduced to a minimal set of steps to reproduce.
+
+ ---------- Footnotes ----------
+
+ (1) http://mail.python.org/pipermail/distutils-sig/
+
+ (2) https://github.com/pypa/setuptools/
+
+
+File: setuptools.info, Node: Development on Setuptools, Next: Guides on backward compatibility & deprecated practice, Prev: Building and Distributing Packages with Setuptools<2>, Up: Top
+
+7 Development on Setuptools
+***************************
+
+Setuptools is maintained by the Python community under the Python
+Packaging Authority (PyPA) and led by Jason R. Coombs.
+
+This document describes the process by which Setuptools is developed.
+This document assumes the reader has some passing familiarity with
+`using' setuptools, the ‘pkg_resources’ module, and pip. It does not
+attempt to explain basic concepts like inter-project dependencies, nor
+does it contain detailed lexical syntax for most file formats. Neither
+does it explain concepts like “namespace packages” or “resources” in any
+detail, as all of these subjects are covered at length in the setuptools
+developer’s guide and the ‘pkg_resources’ reference manual.
+
+Instead, this is `internal' documentation for how those concepts and
+features are `implemented' in concrete terms. It is intended for people
+who are working on the setuptools code base, who want to be able to
+troubleshoot setuptools problems, want to write code that reads the file
+formats involved, or want to otherwise tinker with setuptools-generated
+files and directories.
+
+Note, however, that these are all internal implementation details and
+are therefore subject to change; stick to the published API if you don’t
+want to be responsible for keeping your code from breaking when
+setuptools changes. You have been warned.
+
+* Menu:
+
+* Developer’s Guide for Setuptools::
+* Release Process::
+
+
+File: setuptools.info, Node: Developer’s Guide for Setuptools, Next: Release Process, Up: Development on Setuptools
+
+7.1 Developer’s Guide for Setuptools
+====================================
+
+If you want to know more about contributing on Setuptools, this is the
+place.
+
+* Menu:
+
+* Recommended Reading::
+* Project Management::
+* Authoring Tickets::
+* Making a pull request::
+* Auto-Merge Requests::
+* Testing::
+* Semantic Versioning::
+* Building Documentation::
+* Vendored Dependencies::
+
+
+File: setuptools.info, Node: Recommended Reading, Next: Project Management, Up: Developer’s Guide for Setuptools
+
+7.1.1 Recommended Reading
+-------------------------
+
+Please read How to write the perfect pull request(1) for some tips on
+contributing to open source projects. Although the article is not
+authoritative, it was authored by the maintainer of Setuptools, so
+reflects his opinions and will improve the likelihood of acceptance and
+quality of contribution.
+
+ ---------- Footnotes ----------
+
+ (1) https://blog.jaraco.com/how-to-write-perfect-pull-request/
+
+
+File: setuptools.info, Node: Project Management, Next: Authoring Tickets, Prev: Recommended Reading, Up: Developer’s Guide for Setuptools
+
+7.1.2 Project Management
+------------------------
+
+Setuptools is maintained primarily in GitHub at this home(1).
+Setuptools is maintained under the Python Packaging Authority (PyPA)
+with several core contributors. All bugs for Setuptools are filed and
+the canonical source is maintained in GitHub.
+
+User support and discussions are done through the issue tracker (for
+specific) issues, through the distutils-sig mailing list(2), or on IRC
+(Freenode) at #pypa.
+
+Discussions about development happen on the distutils-sig mailing list
+or on Gitter(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools
+
+ (2) https://mail.python.org/mailman3/lists/distutils-sig.python.org/
+
+ (3) https://gitter.im/pypa/setuptools
+
+
+File: setuptools.info, Node: Authoring Tickets, Next: Making a pull request, Prev: Project Management, Up: Developer’s Guide for Setuptools
+
+7.1.3 Authoring Tickets
+-----------------------
+
+Before authoring any source code, it’s often prudent to file a ticket
+describing the motivation behind making changes. First search to see if
+a ticket already exists for your issue. If not, create one. Try to
+think from the perspective of the reader. Explain what behavior you
+expected, what you got instead, and what factors might have contributed
+to the unexpected behavior. In GitHub, surround a block of code or
+traceback with the triple backtick “‘‘‘” so that it is formatted nicely.
+
+Filing a ticket provides a forum for justification, discussion, and
+clarification. The ticket provides a record of the purpose for the
+change and any hard decisions that were made. It provides a single
+place for others to reference when trying to understand why the software
+operates the way it does or why certain changes were made.
+
+Setuptools makes extensive use of hyperlinks to tickets in the changelog
+so that system integrators and other users can get a quick summary, but
+then jump to the in-depth discussion about any subject referenced.
+
+
+File: setuptools.info, Node: Making a pull request, Next: Auto-Merge Requests, Prev: Authoring Tickets, Up: Developer’s Guide for Setuptools
+
+7.1.4 Making a pull request
+---------------------------
+
+When making a pull request, please *note include a short summary of the
+changes: b1. and a reference to any issue tickets that the PR is
+intended to solve. All PRs with code changes should include tests. All
+changes should include a changelog entry.
+
+* Menu:
+
+* Adding change notes with your PRs::
+* Alright! So how to add a news fragment?::
+* Examples for adding changelog entries to your Pull Requests::
+
+
+File: setuptools.info, Node: Adding change notes with your PRs, Next: Alright! So how to add a news fragment?, Up: Making a pull request
+
+7.1.4.1 Adding change notes with your PRs
+.........................................
+
+It is very important to maintain a log for news of how updating to the
+new version of the software will affect end-users. This is why we
+enforce collection of the change fragment files in pull requests as per
+Towncrier philosophy(1).
+
+The idea is that when somebody makes a change, they must record the bits
+that would affect end-users only including information that would be
+useful to them. Then, when the maintainers publish a new release,
+they’ll automatically use these records to compose a change log for the
+respective version. It is important to understand that including
+unnecessary low-level implementation related details generates noise
+that is not particularly useful to the end-users most of the time. And
+so such details should be recorded in the Git history rather than a
+changelog.
+
+ ---------- Footnotes ----------
+
+ (1)
+https://towncrier.readthedocs.io/en/actual-freaking-docs/#philosophy
+
+
+File: setuptools.info, Node: Alright! So how to add a news fragment?, Next: Examples for adding changelog entries to your Pull Requests, Prev: Adding change notes with your PRs, Up: Making a pull request
+
+7.1.4.2 Alright! So how to add a news fragment?
+...............................................
+
+‘setuptools’ uses towncrier(1) for changelog management. To submit a
+change note about your PR, add a text file into the ‘changelog.d/’
+folder. It should contain an explanation of what applying this PR will
+change in the way end-users interact with the project. One sentence is
+usually enough but feel free to add as many details as you feel
+necessary for the users to understand what it means.
+
+`Use the past tense' for the text in your fragment because, combined
+with others, it will be a part of the “news digest” telling the readers
+`what changed' in a specific version of the library `since the previous
+version'. You should also use reStructuredText syntax for highlighting
+code (inline or block), linking parts of the docs or external sites. If
+you wish to sign your change, feel free to add ‘-- by
+:user:`github-username`’ at the end (replace ‘github-username’ with your
+own!).
+
+Finally, name your file following the convention that Towncrier
+understands: it should start with the number of an issue or a PR
+followed by a dot, then add a patch type, like ‘change’, ‘doc’, ‘misc’
+etc., and add ‘.rst’ as a suffix. If you need to add more than one
+fragment, you may add an optional sequence number (delimited with
+another period) between the type and the suffix.
+
+In general the name will follow ‘<pr_number>.<category>.rst’ pattern,
+where the categories are:
+
+ - ‘change’: Any backwards compatible code change
+
+ - ‘breaking’: Any backwards-compatibility breaking change
+
+ - ‘doc’: A change to the documentation
+
+ - ‘misc’: Changes internal to the repo like CI, test and build
+ changes
+
+ - ‘deprecation’: For deprecations of an existing feature or behavior
+
+A pull request may have more than one of these components, for example a
+code change may introduce a new feature that deprecates an old feature,
+in which case two fragments should be added. It is not necessary to
+make a separate documentation fragment for documentation changes
+accompanying the relevant code changes.
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/towncrier/
+
+
+File: setuptools.info, Node: Examples for adding changelog entries to your Pull Requests, Prev: Alright! So how to add a news fragment?, Up: Making a pull request
+
+7.1.4.3 Examples for adding changelog entries to your Pull Requests
+...................................................................
+
+File ‘changelog.d/2395.doc.1.rst’:
+
+ Added a ``:user:`` role to Sphinx config -- by :user:`webknjaz`
+
+File ‘changelog.d/1354.misc.rst’:
+
+ Added ``towncrier`` for changelog managment -- by :user:`pganssle`
+
+File ‘changelog.d/2355.change.rst’:
+
+ When pip is imported as part of a build, leave :py:mod:`distutils`
+ patched -- by :user:`jaraco`
+
+ Tip: See ‘pyproject.toml’ for all available categories
+ (‘tool.towncrier.type’).
+
+
+File: setuptools.info, Node: Auto-Merge Requests, Next: Testing, Prev: Making a pull request, Up: Developer’s Guide for Setuptools
+
+7.1.5 Auto-Merge Requests
+-------------------------
+
+To support running all code through CI, even lightweight contributions,
+the project employs Mergify to auto-merge pull requests tagged as
+auto-merge.
+
+Use ‘hub pull-request -l auto-merge’ to create such a pull request from
+the command line after pushing a new branch.
+
+
+File: setuptools.info, Node: Testing, Next: Semantic Versioning, Prev: Auto-Merge Requests, Up: Developer’s Guide for Setuptools
+
+7.1.6 Testing
+-------------
+
+The primary tests are run using tox. Make sure you have tox installed,
+and invoke it:
+
+ $ tox
+
+Under continuous integration, additional tests may be run. See the
+‘.travis.yml’ file for full details on the tests run under Travis-CI.
+
+
+File: setuptools.info, Node: Semantic Versioning, Next: Building Documentation, Prev: Testing, Up: Developer’s Guide for Setuptools
+
+7.1.7 Semantic Versioning
+-------------------------
+
+Setuptools follows ‘semver’.
+
+
+File: setuptools.info, Node: Building Documentation, Next: Vendored Dependencies, Prev: Semantic Versioning, Up: Developer’s Guide for Setuptools
+
+7.1.8 Building Documentation
+----------------------------
+
+Setuptools relies on the Sphinx(1) system for building documentation.
+The published documentation(2) is hosted on Read the Docs.
+
+To build the docs locally, use tox:
+
+ $ tox -e docs
+
+ ---------- Footnotes ----------
+
+ (1) http://www.sphinx-doc.org/en/master/
+
+ (2) https://setuptools.readthedocs.io/en/latest/
+
+
+File: setuptools.info, Node: Vendored Dependencies, Prev: Building Documentation, Up: Developer’s Guide for Setuptools
+
+7.1.9 Vendored Dependencies
+---------------------------
+
+Setuptools has some dependencies, but due to bootstrapping issues(1),
+those dependencies cannot be declared as they won’t be resolved soon
+enough to build setuptools from source. Eventually, this limitation may
+be lifted as PEP 517/518 reach ubiquitous adoption, but for now,
+Setuptools cannot declare dependencies other than through
+‘setuptools/_vendor/vendored.txt’ and
+‘pkg_resources/_vendor/vendored.txt’ and refreshed by way of ‘paver
+update_vendored’ (pavement.py).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/980
+
+
+File: setuptools.info, Node: Release Process, Prev: Developer’s Guide for Setuptools, Up: Development on Setuptools
+
+7.2 Release Process
+===================
+
+In order to allow for rapid, predictable releases, Setuptools uses a
+mechanical technique for releases, enacted on tagged commits by
+continuous integration.
+
+To finalize a release, run ‘tox -e finalize’, review, then push the
+changes.
+
+If tests pass, the release will be uploaded to PyPI.
+
+* Menu:
+
+* Release Frequency::
+* Release Managers::
+
+
+File: setuptools.info, Node: Release Frequency, Next: Release Managers, Up: Release Process
+
+7.2.1 Release Frequency
+-----------------------
+
+Some have asked why Setuptools is released so frequently. Because
+Setuptools uses a mechanical release process, it’s very easy to make
+releases whenever the code is stable (tests are passing). As a result,
+the philosophy is to release early and often.
+
+While some find the frequent releases somewhat surprising, they only
+empower the user. Although releases are made frequently, users can
+choose the frequency at which they use those releases. If instead
+Setuptools contributions were only released in batches, the user would
+be constrained to only use Setuptools when those official releases were
+made. With frequent releases, the user can govern exactly how often he
+wishes to update.
+
+Frequent releases also then obviate the need for dev or beta releases in
+most cases. Because releases are made early and often, bugs are
+discovered and corrected quickly, in many cases before other users have
+yet to encounter them.
+
+
+File: setuptools.info, Node: Release Managers, Prev: Release Frequency, Up: Release Process
+
+7.2.2 Release Managers
+----------------------
+
+Additionally, anyone with push access to the master branch has access to
+cut releases.
+
+
+File: setuptools.info, Node: Guides on backward compatibility & deprecated practice, Next: History<2>, Prev: Development on Setuptools, Up: Top
+
+8 Guides on backward compatibility & deprecated practice
+********************************************************
+
+‘Setuptools’ has undergone tremendous changes since its first debut. As
+its development continues to roll forward, many of the practice and
+mechanisms it had established are now considered deprecated. But they
+still remain relevant as a plethora of libraries continue to depend on
+them. Many people also find it necessary to equip themselves with the
+knowledge to better support backward compatibility. This guide aims to
+provide the essential information for such objectives.
+
+* Menu:
+
+* Supporting both Python 2 and Python 3 with Setuptools::
+* The Internal Structure of Python Eggs::
+* Easy Install::
+* Porting from Distutils::
+* “Eggsecutable” Scripts::
+
+
+File: setuptools.info, Node: Supporting both Python 2 and Python 3 with Setuptools, Next: The Internal Structure of Python Eggs, Up: Guides on backward compatibility & deprecated practice
+
+8.1 Supporting both Python 2 and Python 3 with Setuptools
+=========================================================
+
+Starting with Distribute version 0.6.2 and Setuptools 0.7, the
+Setuptools project supported Python 3. Installing and using setuptools
+for Python 3 code works exactly the same as for Python 2 code.
+
+Setuptools provides a facility to invoke 2to3 on the code as a part of
+the build process, by setting the keyword parameter ‘use_2to3’ to True,
+but the Setuptools project strongly recommends instead developing a
+unified codebase using six(1), future(2), or another compatibility
+library.
+
+* Menu:
+
+* Using 2to3::
+* Distributing Python 3 modules::
+* Advanced features::
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/six/
+
+ (2) https://pypi.org/project/future/
+
+
+File: setuptools.info, Node: Using 2to3, Next: Distributing Python 3 modules, Up: Supporting both Python 2 and Python 3 with Setuptools
+
+8.1.1 Using 2to3
+----------------
+
+Setuptools attempts to make the porting process easier by automatically
+running 2to3 as a part of running tests. To do so, you need to
+configure the setup.py so that you can run the unit tests with ‘python
+setup.py test’.
+
+See *note test - Build package and run a unittest suite: 56. for more
+information on this.
+
+Once you have the tests running under Python 2, you can add the use_2to3
+keyword parameters to setup(), and start running the tests under Python
+3. The test command will now first run the build command during which
+the code will be converted with 2to3, and the tests will then be run
+from the build directory, as opposed from the source directory as is
+normally done.
+
+Setuptools will convert all Python files, and also all doctests in
+Python files. However, if you have doctests located in separate text
+files, these will not automatically be converted. By adding them to the
+‘convert_2to3_doctests’ keyword parameter Setuptools will convert them
+as well.
+
+By default, the conversion uses all fixers in the ‘lib2to3.fixers’
+package. To use additional fixers, the parameter ‘use_2to3_fixers’ can
+be set to a list of names of packages containing fixers. To exclude
+fixers, the parameter ‘use_2to3_exclude_fixers’ can be set to fixer
+names to be skipped.
+
+An example setup.py might look something like this:
+
+ from setuptools import setup
+
+ setup(
+ name='your.module',
+ version='1.0',
+ description='This is your awesome module',
+ author='You',
+ author_email='your@email',
+ package_dir={'': 'src'},
+ packages=['your', 'you.module'],
+ test_suite='your.module.tests',
+ use_2to3=True,
+ convert_2to3_doctests=['src/your/module/README.txt'],
+ use_2to3_fixers=['your.fixers'],
+ use_2to3_exclude_fixers=['lib2to3.fixes.fix_import'],
+ )
+
+* Menu:
+
+* Differential conversion::
+
+
+File: setuptools.info, Node: Differential conversion, Up: Using 2to3
+
+8.1.1.1 Differential conversion
+...............................
+
+Note that a file will only be copied and converted during the build
+process if the source file has been changed. If you add a file to the
+doctests that should be converted, it will not be converted the next
+time you run the tests, since it hasn’t been modified. You need to
+remove it from the build directory. Also if you run the build, install
+or test commands before adding the use_2to3 parameter, you will have to
+remove the build directory before you run the test command, as the files
+otherwise will seem updated, and no conversion will happen.
+
+In general, if code doesn’t seem to be converted, deleting the build
+directory and trying again is a good safeguard against the build
+directory getting “out of sync” with the source directory.
+
+
+File: setuptools.info, Node: Distributing Python 3 modules, Next: Advanced features, Prev: Using 2to3, Up: Supporting both Python 2 and Python 3 with Setuptools
+
+8.1.2 Distributing Python 3 modules
+-----------------------------------
+
+You can distribute your modules with Python 3 support in different ways.
+A normal source distribution will work, but can be slow in installing,
+as the 2to3 process will be run during the install. But you can also
+distribute the module in binary format, such as a binary egg. That egg
+will contain the already converted code, and hence no 2to3 conversion is
+needed during install.
+
+
+File: setuptools.info, Node: Advanced features, Prev: Distributing Python 3 modules, Up: Supporting both Python 2 and Python 3 with Setuptools
+
+8.1.3 Advanced features
+-----------------------
+
+If you don’t want to run the 2to3 conversion on the doctests in Python
+files, you can turn that off by setting ‘setuptools.use_2to3_on_doctests
+= False’.
+
+
+File: setuptools.info, Node: The Internal Structure of Python Eggs, Next: Easy Install, Prev: Supporting both Python 2 and Python 3 with Setuptools, Up: Guides on backward compatibility & deprecated practice
+
+8.2 The Internal Structure of Python Eggs
+=========================================
+
+STOP! This is not the first document you should read!
+
+* Menu:
+
+* Eggs and their Formats::
+* Standard Metadata::
+* Other Technical Considerations::
+
+
+File: setuptools.info, Node: Eggs and their Formats, Next: Standard Metadata, Up: The Internal Structure of Python Eggs
+
+8.2.1 Eggs and their Formats
+----------------------------
+
+A “Python egg” is a logical structure embodying the release of a
+specific version of a Python project, comprising its code, resources,
+and metadata. There are multiple formats that can be used to physically
+encode a Python egg, and others can be developed. However, a key
+principle of Python eggs is that they should be discoverable and
+importable. That is, it should be possible for a Python application to
+easily and efficiently find out what eggs are present on a system, and
+to ensure that the desired eggs’ contents are importable.
+
+There are two basic formats currently implemented for Python eggs:
+
+ 1. ‘.egg’ format: a directory or zipfile `containing' the project’s
+ code and resources, along with an ‘EGG-INFO’ subdirectory that
+ contains the project’s metadata
+
+ 2. ‘.egg-info’ format: a file or directory placed `adjacent' to the
+ project’s code and resources, that directly contains the project’s
+ metadata.
+
+Both formats can include arbitrary Python code and resources, including
+static data files, package and non-package directories, Python modules,
+C extension modules, and so on. But each format is optimized for
+different purposes.
+
+The ‘.egg’ format is well-suited to distribution and the easy
+uninstallation or upgrades of code, since the project is essentially
+self-contained within a single directory or file, unmingled with any
+other projects’ code or resources. It also makes it possible to have
+multiple versions of a project simultaneously installed, such that
+individual programs can select the versions they wish to use.
+
+The ‘.egg-info’ format, on the other hand, was created to support
+backward-compatibility, performance, and ease of installation for system
+packaging tools that expect to install all projects’ code and resources
+to a single directory (e.g. ‘site-packages’). Placing the metadata in
+that same directory simplifies the installation process, since it isn’t
+necessary to create ‘.pth’ files or otherwise modify ‘sys.path’ to
+include each installed egg.
+
+Its disadvantage, however, is that it provides no support for clean
+uninstallation or upgrades, and of course only a single version of a
+project can be installed to a given directory. Thus, support from a
+package management tool is required. (This is why setuptools’ “install”
+command refers to this type of egg installation as “single-version,
+externally managed”.) Also, they lack sufficient data to allow them to
+be copied from their installation source. easy_install can “ship” an
+application by copying ‘.egg’ files or directories to a target location,
+but it cannot do this for ‘.egg-info’ installs, because there is no way
+to tell what code and resources belong to a particular egg – there may
+be several eggs “scrambled” together in a single installation location,
+and the ‘.egg-info’ format does not currently include a way to list the
+files that were installed. (This may change in a future version.)
+
+* Menu:
+
+* Code and Resources::
+* Project Metadata::
+* Filename-Embedded Metadata::
+* Egg Links::
+
+
+File: setuptools.info, Node: Code and Resources, Next: Project Metadata, Up: Eggs and their Formats
+
+8.2.1.1 Code and Resources
+..........................
+
+The layout of the code and resources is dictated by Python’s normal
+import layout, relative to the egg’s “base location”.
+
+For the ‘.egg’ format, the base location is the ‘.egg’ itself. That is,
+adding the ‘.egg’ filename or directory name to ‘sys.path’ makes its
+contents importable.
+
+For the ‘.egg-info’ format, however, the base location is the directory
+that `contains' the ‘.egg-info’, and thus it is the directory that must
+be added to ‘sys.path’ to make the egg importable. (Note that this
+means that the “normal” installation of a package to a ‘sys.path’
+directory is sufficient to make it an “egg” if it has an ‘.egg-info’
+file or directory installed alongside of it.)
+
+
+File: setuptools.info, Node: Project Metadata, Next: Filename-Embedded Metadata, Prev: Code and Resources, Up: Eggs and their Formats
+
+8.2.1.2 Project Metadata
+........................
+
+If eggs contained only code and resources, there would of course be no
+difference between them and any other directory or zip file on
+‘sys.path’. Thus, metadata must also be included, using a metadata file
+or directory.
+
+For the ‘.egg’ format, the metadata is placed in an ‘EGG-INFO’
+subdirectory, directly within the ‘.egg’ file or directory. For the
+‘.egg-info’ format, metadata is stored directly within the ‘.egg-info’
+directory itself.
+
+The minimum project metadata that all eggs must have is a standard
+Python ‘PKG-INFO’ file, named ‘PKG-INFO’ and placed within the metadata
+directory appropriate to the format. Because it’s possible for this to
+be the only metadata file included, ‘.egg-info’ format eggs are not
+required to be a directory; they can just be a ‘.egg-info’ file that
+directly contains the ‘PKG-INFO’ metadata. This eliminates the need to
+create a directory just to store one file. This option is `not'
+available for ‘.egg’ formats, since setuptools always includes other
+metadata. (In fact, setuptools itself never generates ‘.egg-info’
+files, either; the support for using files was added so that the
+requirement could easily be satisfied by other tools, such as
+distutils).
+
+In addition to the ‘PKG-INFO’ file, an egg’s metadata directory may also
+include files and directories representing various forms of optional
+standard metadata (see the section on *note Standard Metadata: cb,
+below) or user-defined metadata required by the project. For example,
+some projects may define a metadata format to describe their application
+plugins, and metadata in this format would then be included by plugin
+creators in their projects’ metadata directories.
+
+
+File: setuptools.info, Node: Filename-Embedded Metadata, Next: Egg Links, Prev: Project Metadata, Up: Eggs and their Formats
+
+8.2.1.3 Filename-Embedded Metadata
+..................................
+
+To allow introspection of installed projects and runtime resolution of
+inter-project dependencies, a certain amount of information is embedded
+in egg filenames. At a minimum, this includes the project name, and
+ideally will also include the project version number. Optionally, it
+can also include the target Python version and required runtime platform
+if platform-specific C code is included. The syntax of an egg filename
+is as follows:
+
+ name ["-" version ["-py" pyver ["-" required_platform]]] "." ext
+
+The “name” and “version” should be escaped using the ‘to_filename()’
+function provided by ‘pkg_resources’, after first processing them with
+‘safe_name()’ and ‘safe_version()’ respectively. These latter two
+functions can also be used to later “unescape” these parts of the
+filename. (For a detailed description of these transformations, please
+see the “Parsing Utilities” section of the ‘pkg_resources’ manual.)
+
+The “pyver” string is the Python major version, as found in the first 3
+characters of ‘sys.version’. “required_platform” is essentially a
+distutils ‘get_platform()’ string, but with enhancements to properly
+distinguish Mac OS versions. (See the ‘get_build_platform()’
+documentation in the “Platform Utilities” section of the ‘pkg_resources’
+manual for more details.)
+
+Finally, the “ext” is either ‘.egg’ or ‘.egg-info’, as appropriate for
+the egg’s format.
+
+Normally, an egg’s filename should include at least the project name and
+version, as this allows the runtime system to find desired project
+versions without having to read the egg’s PKG-INFO to determine its
+version number.
+
+Setuptools, however, only includes the version number in the filename
+when an ‘.egg’ file is built using the ‘bdist_egg’ command, or when an
+‘.egg-info’ directory is being installed by the ‘install_egg_info’
+command. When generating metadata for use with the original source
+tree, it only includes the project name, so that the directory will not
+have to be renamed each time the project’s version changes.
+
+This is especially important when version numbers change frequently, and
+the source metadata directory is kept under version control with the
+rest of the project. (As would be the case when the project’s source
+includes project-defined metadata that is not generated from by
+setuptools from data in the setup script.)
+
+
+File: setuptools.info, Node: Egg Links, Prev: Filename-Embedded Metadata, Up: Eggs and their Formats
+
+8.2.1.4 Egg Links
+.................
+
+In addition to the ‘.egg’ and ‘.egg-info’ formats, there is a third
+egg-related extension that you may encounter on occasion: ‘.egg-link’
+files.
+
+These files are not eggs, strictly speaking. They simply provide a way
+to reference an egg that is not physically installed in the desired
+location. They exist primarily as a cross-platform alternative to
+symbolic links, to support “installing” code that is being developed in
+a different location than the desired installation location. For
+example, if a user is developing an application plugin in their home
+directory, but the plugin needs to be “installed” in an application
+plugin directory, running “setup.py develop -md /path/to/app/plugins”
+will install an ‘.egg-link’ file in ‘/path/to/app/plugins’, that tells
+the egg runtime system where to find the actual egg (the user’s project
+source directory and its ‘.egg-info’ subdirectory).
+
+‘.egg-link’ files are named following the format for ‘.egg’ and
+‘.egg-info’ names, but only the project name is included; no version,
+Python version, or platform information is included. When the runtime
+searches for available eggs, ‘.egg-link’ files are opened and the actual
+egg file/directory name is read from them.
+
+Each ‘.egg-link’ file should contain a single file or directory name,
+with no newlines. This filename should be the base location of one or
+more eggs. That is, the name must either end in ‘.egg’, or else it
+should be the parent directory of one or more ‘.egg-info’ format eggs.
+
+As of setuptools 0.6c6, the path may be specified as a
+platform-independent (i.e. ‘/’-separated) relative path from the
+directory containing the ‘.egg-link’ file, and a second line may appear
+in the file, specifying a platform-independent relative path from the
+egg’s base directory to its setup script directory. This allows
+installation tools such as EasyInstall to find the project’s setup
+directory and build eggs or perform other setup commands on it.
+
+
+File: setuptools.info, Node: Standard Metadata, Next: Other Technical Considerations, Prev: Eggs and their Formats, Up: The Internal Structure of Python Eggs
+
+8.2.2 Standard Metadata
+-----------------------
+
+In addition to the minimum required ‘PKG-INFO’ metadata, projects can
+include a variety of standard metadata files or directories, as
+described below. Except as otherwise noted, these files and directories
+are automatically generated by setuptools, based on information supplied
+in the setup script or through analysis of the project’s code and
+resources.
+
+Most of these files and directories are generated via “egg-info writers”
+during execution of the setuptools ‘egg_info’ command, and are listed in
+the ‘egg_info.writers’ entry point group defined by setuptools’ own
+‘setup.py’ file.
+
+Project authors can register their own metadata writers as entry points
+in this group (as described in the setuptools manual under “Adding new
+EGG-INFO Files”) to cause setuptools to generate project-specific
+metadata files or directories during execution of the ‘egg_info’
+command. It is up to project authors to document these new metadata
+formats, if they create any.
+
+* Menu:
+
+* .txt File Formats: txt File Formats.
+* Dependency Metadata::
+* namespace_packages.txt – Namespace Package Metadata: namespace_packages txt – Namespace Package Metadata.
+* entry_points.txt – “Entry Point”/Plugin Metadata: entry_points txt – “Entry Point”/Plugin Metadata.
+* The scripts Subdirectory::
+* Zip Support Metadata::
+* top_level.txt – Conflict Management Metadata: top_level txt – Conflict Management Metadata.
+* SOURCES.txt – Source Files Manifest: SOURCES txt – Source Files Manifest.
+
+
+File: setuptools.info, Node: txt File Formats, Next: Dependency Metadata, Up: Standard Metadata
+
+8.2.2.1 ‘.txt’ File Formats
+...........................
+
+Files described in this section that have ‘.txt’ extensions have a
+simple lexical format consisting of a sequence of text lines, each line
+terminated by a linefeed character (regardless of platform). Leading
+and trailing whitespace on each line is ignored, as are blank lines and
+lines whose first nonblank character is a ‘#’ (comment symbol). (This
+is the parsing format defined by the ‘yield_lines()’ function of the
+‘pkg_resources’ module.)
+
+All ‘.txt’ files defined by this section follow this format, but some
+are also “sectioned” files, meaning that their contents are divided into
+sections, using square-bracketed section headers akin to Windows ‘.ini’
+format. Note that this does `not' imply that the lines within the
+sections follow an ‘.ini’ format, however. Please see an individual
+metadata file’s documentation for a description of what the lines and
+section names mean in that particular file.
+
+Sectioned files can be parsed using the ‘split_sections()’ function; see
+the “Parsing Utilities” section of the ‘pkg_resources’ manual for for
+details.
+
+
+File: setuptools.info, Node: Dependency Metadata, Next: namespace_packages txt – Namespace Package Metadata, Prev: txt File Formats, Up: Standard Metadata
+
+8.2.2.2 Dependency Metadata
+...........................
+
+* Menu:
+
+* requires.txt: requires txt.
+* setup_requires.txt: setup_requires txt.
+* dependency_links.txt: dependency_links txt.
+* depends.txt – Obsolete, do not create!: depends txt – Obsolete do not create!.
+
+
+File: setuptools.info, Node: requires txt, Next: setup_requires txt, Up: Dependency Metadata
+
+8.2.2.3 ‘requires.txt’
+......................
+
+This is a “sectioned” text file. Each section is a sequence of
+“requirements”, as parsed by the ‘parse_requirements()’ function; please
+see the ‘pkg_resources’ manual for the complete requirement parsing
+syntax.
+
+The first, unnamed section (i.e., before the first section header) in
+this file is the project’s core requirements, which must be installed
+for the project to function. (Specified using the ‘install_requires’
+keyword to ‘setup()’).
+
+The remaining (named) sections describe the project’s “extra”
+requirements, as specified using the ‘extras_require’ keyword to
+‘setup()’. The section name is the name of the optional feature, and
+the section body lists that feature’s dependencies.
+
+Note that it is not normally necessary to inspect this file directly;
+‘pkg_resources.Distribution’ objects have a ‘requires()’ method that can
+be used to obtain ‘Requirement’ objects describing the project’s core
+and optional dependencies.
+
+
+File: setuptools.info, Node: setup_requires txt, Next: dependency_links txt, Prev: requires txt, Up: Dependency Metadata
+
+8.2.2.4 ‘setup_requires.txt’
+............................
+
+Much like ‘requires.txt’ except represents the requirements specified by
+the ‘setup_requires’ parameter to the Distribution.
+
+
+File: setuptools.info, Node: dependency_links txt, Next: depends txt – Obsolete do not create!, Prev: setup_requires txt, Up: Dependency Metadata
+
+8.2.2.5 ‘dependency_links.txt’
+..............................
+
+A list of dependency URLs, one per line, as specified using the
+‘dependency_links’ keyword to ‘setup()’. These may be direct download
+URLs, or the URLs of web pages containing direct download links. Please
+see the setuptools manual for more information on specifying this
+option.
+
+
+File: setuptools.info, Node: depends txt – Obsolete do not create!, Prev: dependency_links txt, Up: Dependency Metadata
+
+8.2.2.6 ‘depends.txt’ – Obsolete, do not create!
+................................................
+
+This file follows an identical format to ‘requires.txt’, but is obsolete
+and should not be used. The earliest versions of setuptools required
+users to manually create and maintain this file, so the runtime still
+supports reading it, if it exists. The new filename was created so that
+it could be automatically generated from ‘setup()’ information without
+overwriting an existing hand-created ‘depends.txt’, if one was already
+present in the project’s source ‘.egg-info’ directory.
+
+
+File: setuptools.info, Node: namespace_packages txt – Namespace Package Metadata, Next: entry_points txt – “Entry Point”/Plugin Metadata, Prev: Dependency Metadata, Up: Standard Metadata
+
+8.2.2.7 ‘namespace_packages.txt’ – Namespace Package Metadata
+.............................................................
+
+A list of namespace package names, one per line, as supplied to the
+‘namespace_packages’ keyword to ‘setup()’. Please see the manuals for
+setuptools and ‘pkg_resources’ for more information about namespace
+packages.
+
+
+File: setuptools.info, Node: entry_points txt – “Entry Point”/Plugin Metadata, Next: The scripts Subdirectory, Prev: namespace_packages txt – Namespace Package Metadata, Up: Standard Metadata
+
+8.2.2.8 ‘entry_points.txt’ – “Entry Point”/Plugin Metadata
+..........................................................
+
+This is a “sectioned” text file, whose contents encode the
+‘entry_points’ keyword supplied to ‘setup()’. All sections are named,
+as the section names specify the entry point groups in which the
+corresponding section’s entry points are registered.
+
+Each section is a sequence of “entry point” lines, each parseable using
+the ‘EntryPoint.parse’ classmethod; please see the ‘pkg_resources’
+manual for the complete entry point parsing syntax.
+
+Note that it is not necessary to parse this file directly; the
+‘pkg_resources’ module provides a variety of APIs to locate and load
+entry points automatically. Please see the setuptools and
+‘pkg_resources’ manuals for details on the nature and uses of entry
+points.
+
+
+File: setuptools.info, Node: The scripts Subdirectory, Next: Zip Support Metadata, Prev: entry_points txt – “Entry Point”/Plugin Metadata, Up: Standard Metadata
+
+8.2.2.9 The ‘scripts’ Subdirectory
+..................................
+
+This directory is currently only created for ‘.egg’ files built by the
+setuptools ‘bdist_egg’ command. It will contain copies of all of the
+project’s “traditional” scripts (i.e., those specified using the
+‘scripts’ keyword to ‘setup()’). This is so that they can be
+reconstituted when an ‘.egg’ file is installed.
+
+The scripts are placed here using the distutils’ standard
+‘install_scripts’ command, so any ‘#!’ lines reflect the Python
+installation where the egg was built. But instead of copying the
+scripts to the local script installation directory, EasyInstall writes
+short wrapper scripts that invoke the original scripts from inside the
+egg, after ensuring that sys.path includes the egg and any eggs it
+depends on. For more about *note script wrappers: d7, see the section
+below on *note Installation and Path Management Issues: d8.
+
+
+File: setuptools.info, Node: Zip Support Metadata, Next: top_level txt – Conflict Management Metadata, Prev: The scripts Subdirectory, Up: Standard Metadata
+
+8.2.2.10 Zip Support Metadata
+.............................
+
+* Menu:
+
+* native_libs.txt: native_libs txt.
+* eager_resources.txt: eager_resources txt.
+* zip-safe and not-zip-safe::
+
+
+File: setuptools.info, Node: native_libs txt, Next: eager_resources txt, Up: Zip Support Metadata
+
+8.2.2.11 ‘native_libs.txt’
+..........................
+
+A list of C extensions and other dynamic link libraries contained in the
+egg, one per line. Paths are ‘/’-separated and relative to the egg’s
+base location.
+
+This file is generated as part of ‘bdist_egg’ processing, and as such
+only appears in ‘.egg’ files (and ‘.egg’ directories created by
+unpacking them). It is used to ensure that all libraries are extracted
+from a zipped egg at the same time, in case there is any direct linkage
+between them. Please see the *note Zip File Issues: db. section below
+for more information on library and resource extraction from ‘.egg’
+files.
+
+
+File: setuptools.info, Node: eager_resources txt, Next: zip-safe and not-zip-safe, Prev: native_libs txt, Up: Zip Support Metadata
+
+8.2.2.12 ‘eager_resources.txt’
+..............................
+
+A list of resource files and/or directories, one per line, as specified
+via the ‘eager_resources’ keyword to ‘setup()’. Paths are ‘/’-separated
+and relative to the egg’s base location.
+
+Resource files or directories listed here will be extracted
+simultaneously, if any of the named resources are extracted, or if any
+native libraries listed in ‘native_libs.txt’ are extracted. Please see
+the setuptools manual for details on what this feature is used for and
+how it works, as well as the *note Zip File Issues: db. section below.
+
+
+File: setuptools.info, Node: zip-safe and not-zip-safe, Prev: eager_resources txt, Up: Zip Support Metadata
+
+8.2.2.13 ‘zip-safe’ and ‘not-zip-safe’
+......................................
+
+These are zero-length files, and either one or the other should exist.
+If ‘zip-safe’ exists, it means that the project will work properly when
+installed as an ‘.egg’ zipfile, and conversely the existence of
+‘not-zip-safe’ means the project should not be installed as an ‘.egg’
+file. The ‘zip_safe’ option to setuptools’ ‘setup()’ determines which
+file will be written. If the option isn’t provided, setuptools attempts
+to make its own assessment of whether the package can work, based on
+code and content analysis.
+
+If neither file is present at installation time, EasyInstall defaults to
+assuming that the project should be unzipped. (Command-line options to
+EasyInstall, however, take precedence even over an existing ‘zip-safe’
+or ‘not-zip-safe’ file.)
+
+Note that these flag files appear only in ‘.egg’ files generated by
+‘bdist_egg’, and in ‘.egg’ directories created by unpacking such an
+‘.egg’ file.
+
+
+File: setuptools.info, Node: top_level txt – Conflict Management Metadata, Next: SOURCES txt – Source Files Manifest, Prev: Zip Support Metadata, Up: Standard Metadata
+
+8.2.2.14 ‘top_level.txt’ – Conflict Management Metadata
+.......................................................
+
+This file is a list of the top-level module or package names provided by
+the project, one Python identifier per line.
+
+Subpackages are not included; a project containing both a ‘foo.bar’ and
+a ‘foo.baz’ would include only one line, ‘foo’, in its ‘top_level.txt’.
+
+This data is used by ‘pkg_resources’ at runtime to issue a warning if an
+egg is added to ‘sys.path’ when its contained packages may have already
+been imported.
+
+(It was also once used to detect conflicts with non-egg packages at
+installation time, but in more recent versions, setuptools installs eggs
+in such a way that they always override non-egg packages, thus
+preventing a problem from arising.)
+
+
+File: setuptools.info, Node: SOURCES txt – Source Files Manifest, Prev: top_level txt – Conflict Management Metadata, Up: Standard Metadata
+
+8.2.2.15 ‘SOURCES.txt’ – Source Files Manifest
+..............................................
+
+This file is roughly equivalent to the distutils’ ‘MANIFEST’ file. The
+differences are as follows:
+
+ * The filenames always use ‘/’ as a path separator, which must be
+ converted back to a platform-specific path whenever they are read.
+
+ * The file is automatically generated by setuptools whenever the
+ ‘egg_info’ or ‘sdist’ commands are run, and it is `not'
+ user-editable.
+
+Although this metadata is included with distributed eggs, it is not
+actually used at runtime for any purpose. Its function is to ensure
+that setuptools-built `source' distributions can correctly discover what
+files are part of the project’s source, even if the list had been
+generated using revision control metadata on the original author’s
+system.
+
+In other words, ‘SOURCES.txt’ has little or no runtime value for being
+included in distributed eggs, and it is possible that future versions of
+the ‘bdist_egg’ and ‘install_egg_info’ commands will strip it before
+installation or distribution. Therefore, do not rely on its being
+available outside of an original source directory or source
+distribution.
+
+
+File: setuptools.info, Node: Other Technical Considerations, Prev: Standard Metadata, Up: The Internal Structure of Python Eggs
+
+8.2.3 Other Technical Considerations
+------------------------------------
+
+* Menu:
+
+* Zip File Issues::
+* Installation and Path Management Issues::
+
+
+File: setuptools.info, Node: Zip File Issues, Next: Installation and Path Management Issues, Up: Other Technical Considerations
+
+8.2.3.1 Zip File Issues
+.......................
+
+Although zip files resemble directories, they are not fully
+substitutable for them. Most platforms do not support loading dynamic
+link libraries contained in zipfiles, so it is not possible to directly
+import C extensions from ‘.egg’ zipfiles. Similarly, there are many
+existing libraries – whether in Python or C – that require actual
+operating system filenames, and do not work with arbitrary “file-like”
+objects or in-memory strings, and thus cannot operate directly on the
+contents of zip files.
+
+To address these issues, the ‘pkg_resources’ module provides a “resource
+API” to support obtaining either the contents of a resource, or a true
+operating system filename for the resource. If the egg containing the
+resource is a directory, the resource’s real filename is simply
+returned. However, if the egg is a zipfile, then the resource is first
+extracted to a cache directory, and the filename within the cache is
+returned.
+
+The cache directory is determined by the ‘pkg_resources’ API; please see
+the ‘set_cache_path()’ and ‘get_default_cache()’ documentation for
+details.
+
+* Menu:
+
+* The Extraction Process::
+* Extension Import Wrappers::
+
+
+File: setuptools.info, Node: The Extraction Process, Next: Extension Import Wrappers, Up: Zip File Issues
+
+8.2.3.2 The Extraction Process
+..............................
+
+Resources are extracted to a cache subdirectory whose name is based on
+the enclosing ‘.egg’ filename and the path to the resource. If there is
+already a file of the correct name, size, and timestamp, its filename is
+returned to the requester. Otherwise, the desired file is extracted
+first to a temporary name generated using
+‘mkstemp(".$extract",target_dir)’, and then its timestamp is set to
+match the one in the zip file, before renaming it to its final name.
+(Some collision detection and resolution code is used to handle the fact
+that Windows doesn’t overwrite files when renaming.)
+
+If a resource directory is requested, all of its contents are
+recursively extracted in this fashion, to ensure that the directory name
+can be used as if it were valid all along.
+
+If the resource requested for extraction is listed in the
+‘native_libs.txt’ or ‘eager_resources.txt’ metadata files, then `all'
+resources listed in `either' file will be extracted before the requested
+resource’s filename is returned, thus ensuring that all C extensions and
+data used by them will be simultaneously available.
+
+
+File: setuptools.info, Node: Extension Import Wrappers, Prev: The Extraction Process, Up: Zip File Issues
+
+8.2.3.3 Extension Import Wrappers
+.................................
+
+Since Python’s built-in zip import feature does not support loading C
+extension modules from zipfiles, the setuptools ‘bdist_egg’ command
+generates special import wrappers to make it work.
+
+The wrappers are ‘.py’ files (along with corresponding ‘.pyc’ and/or
+‘.pyo’ files) that have the same module name as the corresponding C
+extension. These wrappers are located in the same package directory (or
+top-level directory) within the zipfile, so that say, ‘foomodule.so’
+will get a corresponding ‘foo.py’, while ‘bar/baz.pyd’ will get a
+corresponding ‘bar/baz.py’.
+
+These wrapper files contain a short stanza of Python code that asks
+‘pkg_resources’ for the filename of the corresponding C extension, then
+reloads the module using the obtained filename. This will cause
+‘pkg_resources’ to first ensure that all of the egg’s C extensions (and
+any accompanying “eager resources”) are extracted to the cache before
+attempting to link to the C library.
+
+Note, by the way, that ‘.egg’ directories will also contain these
+wrapper files. However, Python’s default import priority is such that C
+extensions take precedence over same-named Python modules, so the import
+wrappers are ignored unless the egg is a zipfile.
+
+
+File: setuptools.info, Node: Installation and Path Management Issues, Prev: Zip File Issues, Up: Other Technical Considerations
+
+8.2.3.4 Installation and Path Management Issues
+...............................................
+
+Python’s initial setup of ‘sys.path’ is very dependent on the Python
+version and installation platform, as well as how Python was started
+(i.e., script vs. ‘-c’ vs. ‘-m’ vs. interactive interpreter). In
+fact, Python also provides only two relatively robust ways to affect
+‘sys.path’ outside of direct manipulation in code: the ‘PYTHONPATH’
+environment variable, and ‘.pth’ files.
+
+However, with no cross-platform way to safely and persistently change
+environment variables, this leaves ‘.pth’ files as EasyInstall’s only
+real option for persistent configuration of ‘sys.path’.
+
+But ‘.pth’ files are rather strictly limited in what they are allowed to
+do normally. They add directories only to the `end' of ‘sys.path’,
+after any locally-installed ‘site-packages’ directory, and they are only
+processed `in' the ‘site-packages’ directory to start with.
+
+This is a double whammy for users who lack write access to that
+directory, because they can’t create a ‘.pth’ file that Python will
+read, and even if a sympathetic system administrator adds one for them
+that calls ‘site.addsitedir()’ to allow some other directory to contain
+‘.pth’ files, they won’t be able to install newer versions of anything
+that’s installed in the systemwide ‘site-packages’, because their paths
+will still be added `after' ‘site-packages’.
+
+So EasyInstall applies two workarounds to solve these problems.
+
+The first is that EasyInstall leverages ‘.pth’ files’ “import” feature
+to manipulate ‘sys.path’ and ensure that anything EasyInstall adds to a
+‘.pth’ file will always appear before both the standard library and the
+local ‘site-packages’ directories. Thus, it is always possible for a
+user who can write a Python-read ‘.pth’ file to ensure that their
+packages come first in their own environment.
+
+Second, when installing to a ‘PYTHONPATH’ directory (as opposed to a
+“site” directory like ‘site-packages’) EasyInstall will also install a
+special version of the ‘site’ module. Because it’s in a ‘PYTHONPATH’
+directory, this module will get control before the standard library
+version of ‘site’ does. It will record the state of ‘sys.path’ before
+invoking the “real” ‘site’ module, and then afterwards it processes any
+‘.pth’ files found in ‘PYTHONPATH’ directories, including all the fixups
+needed to ensure that eggs always appear before the standard library in
+sys.path, but are in a relative order to one another that is defined by
+their ‘PYTHONPATH’ and ‘.pth’-prescribed sequence.
+
+The net result of these changes is that ‘sys.path’ order will be as
+follows at runtime:
+
+ 1. The ‘sys.argv[0]’ directory, or an empty string if no script is
+ being executed.
+
+ 2. All eggs installed by EasyInstall in any ‘.pth’ file in each
+ ‘PYTHONPATH’ directory, in order first by ‘PYTHONPATH’ order, then
+ normal ‘.pth’ processing order (which is to say alphabetical by
+ ‘.pth’ filename, then by the order of listing within each ‘.pth’
+ file).
+
+ 3. All eggs installed by EasyInstall in any ‘.pth’ file in each “site”
+ directory (such as ‘site-packages’), following the same ordering
+ rules as for the ones on ‘PYTHONPATH’.
+
+ 4. The ‘PYTHONPATH’ directories themselves, in their original order
+
+ 5. Any paths from ‘.pth’ files found on ‘PYTHONPATH’ that were `not'
+ eggs installed by EasyInstall, again following the same relative
+ ordering rules.
+
+ 6. The standard library and “site” directories, along with the
+ contents of any ‘.pth’ files found in the “site” directories.
+
+Notice that sections 1, 4, and 6 comprise the “normal” Python setup for
+‘sys.path’. Sections 2 and 3 are inserted to support eggs, and section
+5 emulates what the “normal” semantics of ‘.pth’ files on ‘PYTHONPATH’
+would be if Python natively supported them.
+
+For further discussion of the tradeoffs that went into this design, as
+well as notes on the actual magic inserted into ‘.pth’ files to make
+them do these things, please see also the following messages to the
+distutils-SIG mailing list:
+
+ *
+ ‘http://mail.python.org/pipermail/distutils-sig/2006-February/006026.html’
+
+ *
+ ‘http://mail.python.org/pipermail/distutils-sig/2006-March/006123.html’
+
+* Menu:
+
+* Script Wrappers::
+
+
+File: setuptools.info, Node: Script Wrappers, Up: Installation and Path Management Issues
+
+8.2.3.5 Script Wrappers
+.......................
+
+EasyInstall never directly installs a project’s original scripts to a
+script installation directory. Instead, it writes short wrapper scripts
+that first ensure that the project’s dependencies are active on
+sys.path, before invoking the original script. These wrappers have a #!
+line that points to the version of Python that was used to install them,
+and their second line is always a comment that indicates the type of
+script wrapper, the project version required for the script to run, and
+information identifying the script to be invoked.
+
+The format of this marker line is:
+
+ "# EASY-INSTALL-" script_type ": " tuple_of_strings "\n"
+
+The ‘script_type’ is one of ‘SCRIPT’, ‘DEV-SCRIPT’, or ‘ENTRY-SCRIPT’.
+The ‘tuple_of_strings’ is a comma-separated sequence of Python string
+constants. For ‘SCRIPT’ and ‘DEV-SCRIPT’ wrappers, there are two
+strings: the project version requirement, and the script name (as a
+filename within the ‘scripts’ metadata directory). For ‘ENTRY-SCRIPT’
+wrappers, there are three: the project version requirement, the entry
+point group name, and the entry point name. (See the “Automatic Script
+Creation” section in the setuptools manual for more information about
+entry point scripts.)
+
+In each case, the project version requirement string will be a string
+parseable with the ‘pkg_resources’ modules’ ‘Requirement.parse()’
+classmethod. The only difference between a ‘SCRIPT’ wrapper and a
+‘DEV-SCRIPT’ is that a ‘DEV-SCRIPT’ actually executes the original
+source script in the project’s source tree, and is created when the
+“setup.py develop” command is run. A ‘SCRIPT’ wrapper, on the other
+hand, uses the “installed” script written to the ‘EGG-INFO/scripts’
+subdirectory of the corresponding ‘.egg’ zipfile or directory.
+(‘.egg-info’ eggs do not have script wrappers associated with them,
+except in the “setup.py develop” case.)
+
+The purpose of including the marker line in generated script wrappers is
+to facilitate introspection of installed scripts, and their relationship
+to installed eggs. For example, an uninstallation tool could use this
+data to identify what scripts can safely be removed, and/or identify
+what scripts would stop working if a particular egg is uninstalled.
+
+
+File: setuptools.info, Node: Easy Install, Next: Porting from Distutils, Prev: The Internal Structure of Python Eggs, Up: Guides on backward compatibility & deprecated practice
+
+8.3 Easy Install
+================
+
+ Warning: Easy Install is deprecated. Do not use it. Instead use
+ pip. If you think you need Easy Install, please reach out to the
+ PyPA team (a ticket to pip or setuptools is fine), describing your
+ use-case.
+
+Easy Install is a python module (‘easy_install’) bundled with
+‘setuptools’ that lets you automatically download, build, install, and
+manage Python packages.
+
+Please share your experiences with us! If you encounter difficulty
+installing a package, please contact us via the distutils mailing
+list(1). (Note: please DO NOT send private email directly to the author
+of setuptools; it will be discarded. The mailing list is a searchable
+archive of previously-asked and answered questions; you should begin
+your research there before reporting something as a bug – and then do so
+via list discussion first.)
+
+(Also, if you’d like to learn about how you can use ‘setuptools’ to make
+your own packages work better with EasyInstall, or provide
+EasyInstall-like features without requiring your users to use
+EasyInstall directly, you’ll probably want to check out the full
+documentation as well.)
+
+* Menu:
+
+* Using “Easy Install”::
+* Reference Manual::
+
+ ---------- Footnotes ----------
+
+ (1) http://mail.python.org/pipermail/distutils-sig/
+
+
+File: setuptools.info, Node: Using “Easy Install”, Next: Reference Manual, Up: Easy Install
+
+8.3.1 Using “Easy Install”
+--------------------------
+
+* Menu:
+
+* Installing “Easy Install”::
+* Downloading and Installing a Package::
+* Upgrading a Package::
+* Changing the Active Version::
+* Uninstalling Packages::
+* Managing Scripts::
+* Executables and Launchers::
+* Tips & Techniques::
+* Password-Protected Sites::
+* Using .pypirc Credentials: Using pypirc Credentials.
+
+
+File: setuptools.info, Node: Installing “Easy Install”, Next: Downloading and Installing a Package, Up: Using “Easy Install”
+
+8.3.1.1 Installing “Easy Install”
+.................................
+
+Please see the setuptools PyPI page(1) for download links and basic
+installation instructions for each of the supported platforms.
+
+You will need at least Python 3.5 or 2.7. An ‘easy_install’ script will
+be installed in the normal location for Python scripts on your platform.
+
+Note that the instructions on the setuptools PyPI page assume that you
+are are installing to Python’s primary ‘site-packages’ directory. If
+this is not the case, you should consult the section below on *note
+Custom Installation Locations: e8. before installing. (And, on Windows,
+you should not use the ‘.exe’ installer when installing to an alternate
+location.)
+
+Note that ‘easy_install’ normally works by downloading files from the
+internet. If you are behind an NTLM-based firewall that prevents Python
+programs from accessing the net directly, you may wish to first install
+and use the APS proxy server(2), which lets you get past such firewalls
+in the same way that your web browser(s) do.
+
+(Alternately, if you do not wish easy_install to actually download
+anything, you can restrict it from doing so with the ‘--allow-hosts’
+option; see the sections on *note restricting downloads with
+–allow-hosts: e9. and *note command-line options: ea. for more details.)
+
+* Menu:
+
+* Troubleshooting::
+* Windows Notes::
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/setuptools/
+
+ (2) http://ntlmaps.sf.net/
+
+
+File: setuptools.info, Node: Troubleshooting, Next: Windows Notes, Up: Installing “Easy Install”
+
+8.3.1.2 Troubleshooting
+.......................
+
+If EasyInstall/setuptools appears to install correctly, and you can run
+the ‘easy_install’ command but it fails with an ‘ImportError’, the most
+likely cause is that you installed to a location other than
+‘site-packages’, without taking any of the steps described in the *note
+Custom Installation Locations: e8. section below. Please see that
+section and follow the steps to make sure that your custom location will
+work correctly. Then re-install.
+
+Similarly, if you can run ‘easy_install’, and it appears to be
+installing packages, but then you can’t import them, the most likely
+issue is that you installed EasyInstall correctly but are using it to
+install packages to a non-standard location that hasn’t been properly
+prepared. Again, see the section on *note Custom Installation
+Locations: e8. for more details.
+
+
+File: setuptools.info, Node: Windows Notes, Prev: Troubleshooting, Up: Installing “Easy Install”
+
+8.3.1.3 Windows Notes
+.....................
+
+Installing setuptools will provide an ‘easy_install’ command according
+to the techniques described in *note Executables and Launchers: ed. If
+the ‘easy_install’ command is not available after installation, that
+section provides details on how to configure Windows to make the
+commands available.
+
+
+File: setuptools.info, Node: Downloading and Installing a Package, Next: Upgrading a Package, Prev: Installing “Easy Install”, Up: Using “Easy Install”
+
+8.3.1.4 Downloading and Installing a Package
+............................................
+
+For basic use of ‘easy_install’, you need only supply the filename or
+URL of a source distribution or .egg file (Python Egg(1)).
+
+`Example 1'. Install a package by name, searching PyPI for the latest
+version, and automatically downloading, building, and installing it:
+
+ easy_install SQLObject
+
+`Example 2'. Install or upgrade a package by name and version by
+finding links on a given “download page”:
+
+ easy_install -f http://pythonpaste.org/package_index.html SQLObject
+
+`Example 3'. Download a source distribution from a specified URL,
+automatically building and installing it:
+
+ easy_install http://example.com/path/to/MyPackage-1.2.3.tgz
+
+`Example 4'. Install an already-downloaded .egg file:
+
+ easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg
+
+`Example 5'. Upgrade an already-installed package to the latest version
+listed on PyPI:
+
+ easy_install --upgrade PyProtocols
+
+`Example 6'. Install a source distribution that’s already downloaded
+and extracted in the current directory (New in 0.5a9):
+
+ easy_install .
+
+`Example 7'. (New in 0.6a1) Find a source distribution or Subversion
+checkout URL for a package, and extract it or check it out to
+‘~/projects/sqlobject’ (the name will always be in all-lowercase), where
+it can be examined or edited. (The package will not be installed, but
+it can easily be installed with ‘easy_install ~/projects/sqlobject’.
+See *note Editing and Viewing Source Packages: ef. below for more
+info.):
+
+ easy_install --editable --build-directory ~/projects SQLObject
+
+`Example 7'. (New in 0.6.11) Install a distribution within your home
+dir:
+
+ easy_install --user SQLAlchemy
+
+Easy Install accepts URLs, filenames, PyPI package names (i.e.,
+‘distutils’ “distribution” names), and package+version specifiers. In
+each case, it will attempt to locate the latest available version that
+meets your criteria.
+
+When downloading or processing downloaded files, Easy Install recognizes
+distutils source distribution files with extensions of .tgz, .tar,
+.tar.gz, .tar.bz2, or .zip. And of course it handles already-built .egg
+distributions as well as ‘.win32.exe’ installers built using distutils.
+
+By default, packages are installed to the running Python installation’s
+‘site-packages’ directory, unless you provide the ‘-d’ or
+‘--install-dir’ option to specify an alternative directory, or specify
+an alternate location using distutils configuration files. (See *note
+Configuration Files: f0, below.)
+
+By default, any scripts included with the package are installed to the
+running Python installation’s standard script installation location.
+However, if you specify an installation directory via the command line
+or a config file, then the default directory for installing scripts will
+be the same as the package installation directory, to ensure that the
+script will have access to the installed package. You can override this
+using the ‘-s’ or ‘--script-dir’ option.
+
+Installed packages are added to an ‘easy-install.pth’ file in the
+install directory, so that Python will always use the
+most-recently-installed version of the package. If you would like to be
+able to select which version to use at runtime, you should use the ‘-m’
+or ‘--multi-version’ option.
+
+ ---------- Footnotes ----------
+
+ (1) http://peak.telecommunity.com/DevCenter/PythonEggs
+
+
+File: setuptools.info, Node: Upgrading a Package, Next: Changing the Active Version, Prev: Downloading and Installing a Package, Up: Using “Easy Install”
+
+8.3.1.5 Upgrading a Package
+...........................
+
+You don’t need to do anything special to upgrade a package: just install
+the new version, either by requesting a specific version, e.g.:
+
+ easy_install "SomePackage==2.0"
+
+a version greater than the one you have now:
+
+ easy_install "SomePackage>2.0"
+
+using the upgrade flag, to find the latest available version on PyPI:
+
+ easy_install --upgrade SomePackage
+
+or by using a download page, direct download URL, or package filename:
+
+ easy_install -f http://example.com/downloads ExamplePackage
+
+ easy_install http://example.com/downloads/ExamplePackage-2.0-py2.4.egg
+
+ easy_install my_downloads/ExamplePackage-2.0.tgz
+
+If you’re using ‘-m’ or ‘--multi-version’ , using the ‘require()’
+function at runtime automatically selects the newest installed version
+of a package that meets your version criteria. So, installing a newer
+version is the only step needed to upgrade such packages.
+
+If you’re installing to a directory on PYTHONPATH, or a configured
+“site” directory (and not using ‘-m’), installing a package
+automatically replaces any previous version in the ‘easy-install.pth’
+file, so that Python will import the most-recently installed version by
+default. So, again, installing the newer version is the only upgrade
+step needed.
+
+If you haven’t suppressed script installation (using ‘--exclude-scripts’
+or ‘-x’), then the upgraded version’s scripts will be installed, and
+they will be automatically patched to ‘require()’ the corresponding
+version of the package, so that you can use them even if they are
+installed in multi-version mode.
+
+‘easy_install’ never actually deletes packages (unless you’re installing
+a package with the same name and version number as an existing package),
+so if you want to get rid of older versions of a package, please see
+*note Uninstalling Packages: f2, below.
+
+
+File: setuptools.info, Node: Changing the Active Version, Next: Uninstalling Packages, Prev: Upgrading a Package, Up: Using “Easy Install”
+
+8.3.1.6 Changing the Active Version
+...................................
+
+If you’ve upgraded a package, but need to revert to a
+previously-installed version, you can do so like this:
+
+ easy_install PackageName==1.2.3
+
+Where ‘1.2.3’ is replaced by the exact version number you wish to switch
+to. If a package matching the requested name and version is not already
+installed in a directory on ‘sys.path’, it will be located via PyPI and
+installed.
+
+If you’d like to switch to the latest installed version of
+‘PackageName’, you can do so like this:
+
+ easy_install PackageName
+
+This will activate the latest installed version. (Note: if you have set
+any ‘find_links’ via distutils configuration files, those download pages
+will be checked for the latest available version of the package, and it
+will be downloaded and installed if it is newer than your current
+version.)
+
+Note that changing the active version of a package will install the
+newly active version’s scripts, unless the ‘--exclude-scripts’ or ‘-x’
+option is specified.
+
+
+File: setuptools.info, Node: Uninstalling Packages, Next: Managing Scripts, Prev: Changing the Active Version, Up: Using “Easy Install”
+
+8.3.1.7 Uninstalling Packages
+.............................
+
+If you have replaced a package with another version, then you can just
+delete the package(s) you don’t need by deleting the
+PackageName-versioninfo.egg file or directory (found in the installation
+directory).
+
+If you want to delete the currently installed version of a package (or
+all versions of a package), you should first run:
+
+ easy_install -m PackageName
+
+This will ensure that Python doesn’t continue to search for a package
+you’re planning to remove. After you’ve done this, you can safely
+delete the .egg files or directories, along with any scripts you wish to
+remove.
+
+
+File: setuptools.info, Node: Managing Scripts, Next: Executables and Launchers, Prev: Uninstalling Packages, Up: Using “Easy Install”
+
+8.3.1.8 Managing Scripts
+........................
+
+Whenever you install, upgrade, or change versions of a package,
+EasyInstall automatically installs the scripts for the selected package
+version, unless you tell it not to with ‘-x’ or ‘--exclude-scripts’. If
+any scripts in the script directory have the same name, they are
+overwritten.
+
+Thus, you do not normally need to manually delete scripts for older
+versions of a package, unless the newer version of the package does not
+include a script of the same name. However, if you are completely
+uninstalling a package, you may wish to manually delete its scripts.
+
+EasyInstall’s default behavior means that you can normally only run
+scripts from one version of a package at a time. If you want to keep
+multiple versions of a script available, however, you can simply use the
+‘--multi-version’ or ‘-m’ option, and rename the scripts that
+EasyInstall creates. This works because EasyInstall installs scripts as
+short code stubs that ‘require()’ the matching version of the package
+the script came from, so renaming the script has no effect on what it
+executes.
+
+For example, suppose you want to use two versions of the ‘rst2html’ tool
+provided by the docutils(1) package. You might first install one
+version:
+
+ easy_install -m docutils==0.3.9
+
+then rename the ‘rst2html.py’ to ‘r2h_039’, and install another version:
+
+ easy_install -m docutils==0.3.10
+
+This will create another ‘rst2html.py’ script, this one using docutils
+version 0.3.10 instead of 0.3.9. You now have two scripts, each using a
+different version of the package. (Notice that we used ‘-m’ for both
+installations, so that Python won’t lock us out of using anything but
+the most recently-installed version of the package.)
+
+ ---------- Footnotes ----------
+
+ (1) http://docutils.sf.net/
+
+
+File: setuptools.info, Node: Executables and Launchers, Next: Tips & Techniques, Prev: Managing Scripts, Up: Using “Easy Install”
+
+8.3.1.9 Executables and Launchers
+.................................
+
+On Unix systems, scripts are installed with as natural files with a “#!”
+header and no extension and they launch under the Python version
+indicated in the header.
+
+On Windows, there is no mechanism to “execute” files without extensions,
+so EasyInstall provides two techniques to mirror the Unix behavior. The
+behavior is indicated by the SETUPTOOLS_LAUNCHER environment variable,
+which may be “executable” (default) or “natural”.
+
+Regardless of the technique used, the script(s) will be installed to a
+Scripts directory (by default in the Python installation directory). It
+is recommended for EasyInstall that you ensure this directory is in the
+PATH environment variable. The easiest way to ensure the Scripts
+directory is in the PATH is to run ‘Tools\Scripts\win_add2path.py’ from
+the Python directory.
+
+Note that instead of changing your ‘PATH’ to include the Python scripts
+directory, you can also retarget the installation location for scripts
+so they go on a directory that’s already on the ‘PATH’. For more
+information see *note Command-Line Options: ea. and *note Configuration
+Files: f0. During installation, pass command line options (such as
+‘--script-dir’) to control where scripts will be installed.
+
+* Menu:
+
+* Windows Executable Launcher::
+* Natural Script Launcher::
+
+
+File: setuptools.info, Node: Windows Executable Launcher, Next: Natural Script Launcher, Up: Executables and Launchers
+
+8.3.1.10 Windows Executable Launcher
+....................................
+
+If the “executable” launcher is used, EasyInstall will create a ‘.exe’
+launcher of the same name beside each installed script (including
+‘easy_install’ itself). These small .exe files launch the script of the
+same name using the Python version indicated in the ‘#!’ header.
+
+This behavior is currently default. To force the use of executable
+launchers, set ‘SETUPTOOLS_LAUNCHER’ to “executable”.
+
+
+File: setuptools.info, Node: Natural Script Launcher, Prev: Windows Executable Launcher, Up: Executables and Launchers
+
+8.3.1.11 Natural Script Launcher
+................................
+
+EasyInstall also supports deferring to an external launcher such as
+pylauncher(1) for launching scripts. Enable this experimental
+functionality by setting the ‘SETUPTOOLS_LAUNCHER’ environment variable
+to “natural”. EasyInstall will then install scripts as simple scripts
+with a .pya (or .pyw) extension appended. If these extensions are
+associated with the pylauncher and listed in the PATHEXT environment
+variable, these scripts can then be invoked simply and directly just
+like any other executable. This behavior may become default in a future
+version.
+
+EasyInstall uses the .pya extension instead of simply the typical ‘.py’
+extension. This distinct extension is necessary to prevent Python from
+treating the scripts as importable modules (where name conflicts exist).
+Current releases of pylauncher do not yet associate with .pya files by
+default, but future versions should do so.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/pylauncher
+
+
+File: setuptools.info, Node: Tips & Techniques, Next: Password-Protected Sites, Prev: Executables and Launchers, Up: Using “Easy Install”
+
+8.3.1.12 Tips & Techniques
+..........................
+
+* Menu:
+
+* Multiple Python Versions::
+* Restricting Downloads with --allow-hosts::
+* Installing on Un-networked Machines::
+* Packaging Others’ Projects As Eggs::
+* Creating your own Package Index::
+
+
+File: setuptools.info, Node: Multiple Python Versions, Next: Restricting Downloads with --allow-hosts, Up: Tips & Techniques
+
+8.3.1.13 Multiple Python Versions
+.................................
+
+EasyInstall installs itself under two names: ‘easy_install’ and
+‘easy_install-N.N’, where ‘N.N’ is the Python version used to install
+it. Thus, if you install EasyInstall for both Python 3.2 and 2.7, you
+can use the ‘easy_install-3.2’ or ‘easy_install-2.7’ scripts to install
+packages for the respective Python version.
+
+Setuptools also supplies easy_install as a runnable module which may be
+invoked using ‘python -m easy_install’ for any Python with Setuptools
+installed.
+
+
+File: setuptools.info, Node: Restricting Downloads with --allow-hosts, Next: Installing on Un-networked Machines, Prev: Multiple Python Versions, Up: Tips & Techniques
+
+8.3.1.14 Restricting Downloads with ‘--allow-hosts’
+...................................................
+
+You can use the ‘--allow-hosts’ (‘-H’) option to restrict what domains
+EasyInstall will look for links and downloads on. ‘--allow-hosts=None’
+prevents downloading altogether. You can also use wildcards, for
+example to restrict downloading to hosts in your own intranet. See the
+section below on *note Command-Line Options: ea. for more details on the
+‘--allow-hosts’ option.
+
+By default, there are no host restrictions in effect, but you can change
+this default by editing the appropriate *note configuration files: f0.
+and adding:
+
+ [easy_install]
+ allow_hosts = *.myintranet.example.com,*.python.org
+
+The above example would then allow downloads only from hosts in the
+‘python.org’ and ‘myintranet.example.com’ domains, unless overridden on
+the command line.
+
+
+File: setuptools.info, Node: Installing on Un-networked Machines, Next: Packaging Others’ Projects As Eggs, Prev: Restricting Downloads with --allow-hosts, Up: Tips & Techniques
+
+8.3.1.15 Installing on Un-networked Machines
+............................................
+
+Just copy the eggs or source packages you need to a directory on the
+target machine, then use the ‘-f’ or ‘--find-links’ option to specify
+that directory’s location. For example:
+
+ easy_install -H None -f somedir SomePackage
+
+will attempt to install SomePackage using only eggs and source packages
+found in ‘somedir’ and disallowing all remote access. You should of
+course make sure you have all of SomePackage’s dependencies available in
+somedir.
+
+If you have another machine of the same operating system and library
+versions (or if the packages aren’t platform-specific), you can create
+the directory of eggs using a command like this:
+
+ easy_install -zmaxd somedir SomePackage
+
+This will tell EasyInstall to put zipped eggs or source packages for
+SomePackage and all its dependencies into ‘somedir’, without creating
+any scripts or .pth files. You can then copy the contents of ‘somedir’
+to the target machine. (‘-z’ means zipped eggs, ‘-m’ means
+multi-version, which prevents .pth files from being used, ‘-a’ means to
+copy all the eggs needed, even if they’re installed elsewhere on the
+machine, and ‘-d’ indicates the directory to place the eggs in.)
+
+You can also build the eggs from local development packages that were
+installed with the ‘setup.py develop’ command, by including the ‘-l’
+option, e.g.:
+
+ easy_install -zmaxld somedir SomePackage
+
+This will use locally-available source distributions to build the eggs.
+
+
+File: setuptools.info, Node: Packaging Others’ Projects As Eggs, Next: Creating your own Package Index, Prev: Installing on Un-networked Machines, Up: Tips & Techniques
+
+8.3.1.16 Packaging Others’ Projects As Eggs
+...........................................
+
+Need to distribute a package that isn’t published in egg form? You can
+use EasyInstall to build eggs for a project. You’ll want to use the
+‘--zip-ok’, ‘--exclude-scripts’, and possibly ‘--no-deps’ options (‘-z’,
+‘-x’ and ‘-N’, respectively). Use ‘-d’ or ‘--install-dir’ to specify
+the location where you’d like the eggs placed. By placing them in a
+directory that is published to the web, you can then make the eggs
+available for download, either in an intranet or to the internet at
+large.
+
+If someone distributes a package in the form of a single ‘.py’ file, you
+can wrap it in an egg by tacking an ‘#egg=name-version’ suffix on the
+file’s URL. So, something like this:
+
+ easy_install -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo
+
+will install the package as an egg, and this:
+
+ easy_install -zmaxd. \
+ -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo
+
+will create a ‘.egg’ file in the current directory.
+
+
+File: setuptools.info, Node: Creating your own Package Index, Prev: Packaging Others’ Projects As Eggs, Up: Tips & Techniques
+
+8.3.1.17 Creating your own Package Index
+........................................
+
+In addition to local directories and the Python Package Index,
+EasyInstall can find download links on most any web page whose URL is
+given to the ‘-f’ (‘--find-links’) option. In the simplest case, you
+can simply have a web page with links to eggs or Python source packages,
+even an automatically generated directory listing (such as the Apache
+web server provides).
+
+If you are setting up an intranet site for package downloads, you may
+want to configure the target machines to use your download site by
+default, adding something like this to their *note configuration files:
+f0.:
+
+ [easy_install]
+ find_links = http://mypackages.example.com/somedir/
+ http://turbogears.org/download/
+ http://peak.telecommunity.com/dist/
+
+As you can see, you can list multiple URLs separated by whitespace,
+continuing on multiple lines if necessary (as long as the subsequent
+lines are indented.
+
+If you are more ambitious, you can also create an entirely custom
+package index or PyPI mirror. See the ‘--index-url’ option under *note
+Command-Line Options: ea, below, and also the section on *note Package
+Index "API": fc.
+
+
+File: setuptools.info, Node: Password-Protected Sites, Next: Using pypirc Credentials, Prev: Tips & Techniques, Up: Using “Easy Install”
+
+8.3.1.18 Password-Protected Sites
+.................................
+
+If a site you want to download from is password-protected using HTTP
+“Basic” authentication, you can specify your credentials in the URL,
+like so:
+
+ http://some_userid:some_password@some.example.com/some_path/
+
+You can do this with both index page URLs and direct download URLs. As
+long as any HTML pages read by easy_install use `relative' links to
+point to the downloads, the same user ID and password will be used to do
+the downloading.
+
+
+File: setuptools.info, Node: Using pypirc Credentials, Prev: Password-Protected Sites, Up: Using “Easy Install”
+
+8.3.1.19 Using .pypirc Credentials
+..................................
+
+In additional to supplying credentials in the URL, ‘easy_install’ will
+also honor credentials if present in the .pypirc file. Teams
+maintaining a private repository of packages may already have defined
+access credentials for uploading packages according to the distutils
+documentation. ‘easy_install’ will attempt to honor those if present.
+Refer to the distutils documentation for Python 2.5 or later for details
+on the syntax.
+
+* Menu:
+
+* Controlling Build Options::
+* Editing and Viewing Source Packages::
+* Dealing with Installation Conflicts::
+* Compressed Installation::
+
+
+File: setuptools.info, Node: Controlling Build Options, Next: Editing and Viewing Source Packages, Up: Using pypirc Credentials
+
+8.3.1.20 Controlling Build Options
+..................................
+
+EasyInstall respects standard distutils *note Configuration Files: f0,
+so you can use them to configure build options for packages that it
+installs from source. For example, if you are on Windows using the
+MinGW compiler, you can configure the default compiler by putting
+something like this:
+
+ [build]
+ compiler = mingw32
+
+into the appropriate distutils configuration file. In fact, since this
+is just normal distutils configuration, it will affect any builds using
+that config file, not just ones done by EasyInstall. For example, if
+you add those lines to ‘distutils.cfg’ in the ‘distutils’ package
+directory, it will be the default compiler for `all' packages you build.
+See *note Configuration Files: f0. below for a list of the standard
+configuration file locations, and links to more documentation on using
+distutils configuration files.
+
+
+File: setuptools.info, Node: Editing and Viewing Source Packages, Next: Dealing with Installation Conflicts, Prev: Controlling Build Options, Up: Using pypirc Credentials
+
+8.3.1.21 Editing and Viewing Source Packages
+............................................
+
+Sometimes a package’s source distribution contains additional
+documentation, examples, configuration files, etc., that are not part of
+its actual code. If you want to be able to examine these files, you can
+use the ‘--editable’ option to EasyInstall, and EasyInstall will look
+for a source distribution or Subversion URL for the package, then
+download and extract it or check it out as a subdirectory of the
+‘--build-directory’ you specify. If you then wish to install the
+package after editing or configuring it, you can do so by rerunning
+EasyInstall with that directory as the target.
+
+Note that using ‘--editable’ stops EasyInstall from actually building or
+installing the package; it just finds, obtains, and possibly unpacks it
+for you. This allows you to make changes to the package if necessary,
+and to either install it in development mode using ‘setup.py develop’
+(if the package uses setuptools, that is), or by running ‘easy_install
+projectdir’ (where ‘projectdir’ is the subdirectory EasyInstall created
+for the downloaded package.
+
+In order to use ‘--editable’ (‘-e’ for short), you `must' also supply a
+‘--build-directory’ (‘-b’ for short). The project will be placed in a
+subdirectory of the build directory. The subdirectory will have the
+same name as the project itself, but in all-lowercase. If a file or
+directory of that name already exists, EasyInstall will print an error
+message and exit.
+
+Also, when using ‘--editable’, you cannot use URLs or filenames as
+arguments. You `must' specify project names (and optional version
+requirements) so that EasyInstall knows what directory name(s) to
+create. If you need to force EasyInstall to use a particular URL or
+filename, you should specify it as a ‘--find-links’ item (‘-f’ for
+short), and then also specify the project name, e.g.:
+
+ easy_install -eb ~/projects \
+ -fhttp://prdownloads.sourceforge.net/ctypes/ctypes-0.9.6.tar.gz?download \
+ ctypes==0.9.6
+
+
+File: setuptools.info, Node: Dealing with Installation Conflicts, Next: Compressed Installation, Prev: Editing and Viewing Source Packages, Up: Using pypirc Credentials
+
+8.3.1.22 Dealing with Installation Conflicts
+............................................
+
+(NOTE: As of 0.6a11, this section is obsolete; it is retained here only
+so that people using older versions of EasyInstall can consult it. As
+of version 0.6a11, installation conflicts are handled automatically
+without deleting the old or system-installed packages, and without
+ignoring the issue. Instead, eggs are automatically shifted to the
+front of ‘sys.path’ using special code added to the ‘easy-install.pth’
+file. So, if you are using version 0.6a11 or better of setuptools, you
+do not need to worry about conflicts, and the following issues do not
+apply to you.)
+
+EasyInstall installs distributions in a “managed” way, such that each
+distribution can be independently activated or deactivated on
+‘sys.path’. However, packages that were not installed by EasyInstall
+are “unmanaged”, in that they usually live all in one directory and
+cannot be independently activated or deactivated.
+
+As a result, if you are using EasyInstall to upgrade an existing
+package, or to install a package with the same name as an existing
+package, EasyInstall will warn you of the conflict. (This is an
+improvement over ‘setup.py install’, because the ‘distutils’ just
+install new packages on top of old ones, possibly combining two
+unrelated packages or leaving behind modules that have been deleted in
+the newer version of the package.)
+
+EasyInstall will stop the installation if it detects a conflict between
+an existing, “unmanaged” package, and a module or package in any of the
+distributions you’re installing. It will display a list of all of the
+existing files and directories that would need to be deleted for the new
+package to be able to function correctly. To proceed, you must manually
+delete these conflicting files and directories and re-run EasyInstall.
+
+Of course, once you’ve replaced all of your existing “unmanaged”
+packages with versions managed by EasyInstall, you won’t have any more
+conflicts to worry about!
+
+
+File: setuptools.info, Node: Compressed Installation, Prev: Dealing with Installation Conflicts, Up: Using pypirc Credentials
+
+8.3.1.23 Compressed Installation
+................................
+
+EasyInstall tries to install packages in zipped form, if it can.
+Zipping packages can improve Python’s overall import performance if
+you’re not using the ‘--multi-version’ option, because Python processes
+zipfile entries on ‘sys.path’ much faster than it does directories.
+
+As of version 0.5a9, EasyInstall analyzes packages to determine whether
+they can be safely installed as a zipfile, and then acts on its
+analysis. (Previous versions would not install a package as a zipfile
+unless you used the ‘--zip-ok’ option.)
+
+The current analysis approach is fairly conservative; it currently looks
+for:
+
+ * Any use of the ‘__file__’ or ‘__path__’ variables (which
+ should be replaced with ‘pkg_resources’ API calls)
+
+ * Possible use of ‘inspect’ functions that expect to manipulate
+ source files (e.g. ‘inspect.getsource()’)
+
+ * Top-level modules that might be scripts used with ‘python -m’
+ (Python 2.4)
+
+If any of the above are found in the package being installed,
+EasyInstall will assume that the package cannot be safely run from a
+zipfile, and unzip it to a directory instead. You can override this
+analysis with the ‘-zip-ok’ flag, which will tell EasyInstall to install
+the package as a zipfile anyway. Or, you can use the ‘--always-unzip’
+flag, in which case EasyInstall will always unzip, even if its analysis
+says the package is safe to run as a zipfile.
+
+Normally, however, it is simplest to let EasyInstall handle the
+determination of whether to zip or unzip, and only specify overrides
+when needed to work around a problem. If you find you need to override
+EasyInstall’s guesses, you may want to contact the package author and
+the EasyInstall maintainers, so that they can make appropriate changes
+in future versions.
+
+(Note: If a package uses ‘setuptools’ in its setup script, the package
+author has the option to declare the package safe or unsafe for zipped
+usage via the ‘zip_safe’ argument to ‘setup()’. If the package author
+makes such a declaration, EasyInstall believes the package’s author and
+does not perform its own analysis. However, your command-line option,
+if any, will still override the package author’s choice.)
+
+
+File: setuptools.info, Node: Reference Manual, Prev: Using “Easy Install”, Up: Easy Install
+
+8.3.2 Reference Manual
+----------------------
+
+* Menu:
+
+* Configuration Files::
+* Command-Line Options::
+* Custom Installation Locations::
+* Package Index “API”::
+
+
+File: setuptools.info, Node: Configuration Files, Next: Command-Line Options, Up: Reference Manual
+
+8.3.2.1 Configuration Files
+...........................
+
+(New in 0.4a2)
+
+You may specify default options for EasyInstall using the standard
+distutils configuration files, under the command heading ‘easy_install’.
+EasyInstall will look first for a ‘setup.cfg’ file in the current
+directory, then a ‘~/.pydistutils.cfg’ or ‘$HOME\\pydistutils.cfg’ (on
+Unix-like OSes and Windows, respectively), and finally a ‘distutils.cfg’
+file in the ‘distutils’ package directory. Here’s a simple example:
+
+ [easy_install]
+
+ # set the default location to install packages
+ install_dir = /home/me/lib/python
+
+ # Notice that indentation can be used to continue an option
+ # value; this is especially useful for the "--find-links"
+ # option, which tells easy_install to use download links on
+ # these pages before consulting PyPI:
+ #
+ find_links = http://sqlobject.org/
+ http://peak.telecommunity.com/dist/
+
+In addition to accepting configuration for its own options under
+‘[easy_install]’, EasyInstall also respects defaults specified for other
+distutils commands. For example, if you don’t set an ‘install_dir’ for
+‘[easy_install]’, but `have' set an ‘install_lib’ for the ‘[install]’
+command, this will become EasyInstall’s default installation directory.
+Thus, if you are already using distutils configuration files to set
+default install locations, build options, etc., EasyInstall will respect
+your existing settings until and unless you override them explicitly in
+an ‘[easy_install]’ section.
+
+For more information, see also the current Python documentation on the
+use and location of distutils configuration files(1).
+
+Notice that ‘easy_install’ will use the ‘setup.cfg’ from the current
+working directory only if it was triggered from ‘setup.py’ through the
+‘install_requires’ option. The standalone command will not use that
+file.
+
+ ---------- Footnotes ----------
+
+ (1) https://docs.python.org/install/index.html#inst-config-files
+
+
+File: setuptools.info, Node: Command-Line Options, Next: Custom Installation Locations, Prev: Configuration Files, Up: Reference Manual
+
+8.3.2.2 Command-Line Options
+............................
+
+‘--zip-ok, -z’
+
+ Install all packages as zip files, even if they are marked as
+ unsafe for running as a zipfile. This can be useful when
+ EasyInstall’s analysis of a non-setuptools package is too
+ conservative, but keep in mind that the package may not work
+ correctly. (Changed in 0.5a9; previously this option was required
+ in order for zipped installation to happen at all.)
+
+‘--always-unzip, -Z’
+
+ Don’t install any packages as zip files, even if the packages are
+ marked as safe for running as a zipfile. This can be useful if a
+ package does something unsafe, but not in a way that EasyInstall
+ can easily detect. EasyInstall’s default analysis is currently
+ very conservative, however, so you should only use this option if
+ you’ve had problems with a particular package, and `after'
+ reporting the problem to the package’s maintainer and to the
+ EasyInstall maintainers.
+
+ (Note: the ‘-z/-Z’ options only affect the installation of
+ newly-built or downloaded packages that are not already installed
+ in the target directory; if you want to convert an existing
+ installed version from zipped to unzipped or vice versa, you’ll
+ need to delete the existing version first, and re-run EasyInstall.)
+
+‘--multi-version, -m’
+
+ “Multi-version” mode. Specifying this option prevents
+ ‘easy_install’ from adding an ‘easy-install.pth’ entry for the
+ package being installed, and if an entry for any version the
+ package already exists, it will be removed upon successful
+ installation. In multi-version mode, no specific version of the
+ package is available for importing, unless you use
+ ‘pkg_resources.require()’ to put it on ‘sys.path’. This can be as
+ simple as:
+
+ from pkg_resources import require
+ require("SomePackage", "OtherPackage", "MyPackage")
+
+ which will put the latest installed version of the specified
+ packages on ‘sys.path’ for you. (For more advanced uses, like
+ selecting specific versions and enabling optional dependencies, see
+ the ‘pkg_resources’ API doc.)
+
+ Changed in 0.6a10: this option is no longer silently enabled when
+ installing to a non-PYTHONPATH, non-“site” directory. You must
+ always explicitly use this option if you want it to be active.
+
+‘--upgrade, -U’ (New in 0.5a4)
+
+ By default, EasyInstall only searches online if a project/version
+ requirement can’t be met by distributions already installed on
+ sys.path or the installation directory. However, if you supply the
+ ‘--upgrade’ or ‘-U’ flag, EasyInstall will always check the package
+ index and ‘--find-links’ URLs before selecting a version to
+ install. In this way, you can force EasyInstall to use the latest
+ available version of any package it installs (subject to any
+ version requirements that might exclude such later versions).
+
+‘--install-dir=DIR, -d DIR’
+
+ Set the installation directory. It is up to you to ensure that
+ this directory is on ‘sys.path’ at runtime, and to use
+ ‘pkg_resources.require()’ to enable the installed package(s) that
+ you need.
+
+ (New in 0.4a2) If this option is not directly specified on the
+ command line or in a distutils configuration file, the distutils
+ default installation location is used. Normally, this would be the
+ ‘site-packages’ directory, but if you are using distutils
+ configuration files, setting things like ‘prefix’ or ‘install_lib’,
+ then those settings are taken into account when computing the
+ default installation directory, as is the ‘--prefix’ option.
+
+‘--script-dir=DIR, -s DIR’
+
+ Set the script installation directory. If you don’t supply this
+ option (via the command line or a configuration file), but you
+ `have' supplied an ‘--install-dir’ (via command line or config
+ file), then this option defaults to the same directory, so that the
+ scripts will be able to find their associated package installation.
+ Otherwise, this setting defaults to the location where the
+ distutils would normally install scripts, taking any distutils
+ configuration file settings into account.
+
+‘--exclude-scripts, -x’
+
+ Don’t install scripts. This is useful if you need to install
+ multiple versions of a package, but do not want to reset the
+ version that will be run by scripts that are already installed.
+
+‘--user’ (New in 0.6.11)
+
+ Use the user-site-packages as specified in PEP 370(1) instead of
+ the global site-packages.
+
+‘--always-copy, -a’ (New in 0.5a4)
+
+ Copy all needed distributions to the installation directory, even
+ if they are already present in a directory on sys.path. In older
+ versions of EasyInstall, this was the default behavior, but now you
+ must explicitly request it. By default, EasyInstall will no longer
+ copy such distributions from other sys.path directories to the
+ installation directory, unless you explicitly gave the
+ distribution’s filename on the command line.
+
+ Note that as of 0.6a10, using this option excludes “system” and
+ “development” eggs from consideration because they can’t be
+ reliably copied. This may cause EasyInstall to choose an older
+ version of a package than what you expected, or it may cause
+ downloading and installation of a fresh copy of something that’s
+ already installed. You will see warning messages for any eggs that
+ EasyInstall skips, before it falls back to an older version or
+ attempts to download a fresh copy.
+
+‘--find-links=URLS_OR_FILENAMES, -f URLS_OR_FILENAMES’
+
+ Scan the specified “download pages” or directories for direct links
+ to eggs or other distributions. Any existing file or directory
+ names or direct download URLs are immediately added to
+ EasyInstall’s search cache, and any indirect URLs (ones that don’t
+ point to eggs or other recognized archive formats) are added to a
+ list of additional places to search for download links. As soon as
+ EasyInstall has to go online to find a package (either because it
+ doesn’t exist locally, or because ‘--upgrade’ or ‘-U’ was used),
+ the specified URLs will be downloaded and scanned for additional
+ direct links.
+
+ Eggs and archives found by way of ‘--find-links’ are only
+ downloaded if they are needed to meet a requirement specified on
+ the command line; links to unneeded packages are ignored.
+
+ If all requested packages can be found using links on the specified
+ download pages, the Python Package Index will not be consulted
+ unless you also specified the ‘--upgrade’ or ‘-U’ option.
+
+ (Note: if you want to refer to a local HTML file containing links,
+ you must use a ‘file:’ URL, as filenames that do not refer to a
+ directory, egg, or archive are ignored.)
+
+ You may specify multiple URLs or file/directory names with this
+ option, separated by whitespace. Note that on the command line,
+ you will probably have to surround the URL list with quotes, so
+ that it is recognized as a single option value. You can also
+ specify URLs in a configuration file; see *note Configuration
+ Files: f0, above.
+
+ Changed in 0.6a10: previously all URLs and directories passed to
+ this option were scanned as early as possible, but from 0.6a10 on,
+ only directories and direct archive links are scanned immediately;
+ URLs are not retrieved unless a package search was already going to
+ go online due to a package not being available locally, or due to
+ the use of the ‘--update’ or ‘-U’ option.
+
+‘--no-find-links’ Blocks the addition of any link.
+
+ This parameter is useful if you want to avoid adding links defined
+ in a project easy_install is installing (whether it’s a requested
+ project or a dependency). When used, ‘--find-links’ is ignored.
+
+ Added in Distribute 0.6.11 and Setuptools 0.7.
+
+‘--index-url=URL, -i URL’ (New in 0.4a1; default changed in 0.6c7)
+
+ Specifies the base URL of the Python Package Index. The default is
+ ‘https://pypi.org/simple/’ if not specified. When a package is
+ requested that is not locally available or linked from a
+ ‘--find-links’ download page, the package index will be searched
+ for download pages for the needed package, and those download pages
+ will be searched for links to download an egg or source
+ distribution.
+
+‘--editable, -e’ (New in 0.6a1)
+
+ Only find and download source distributions for the specified
+ projects, unpacking them to subdirectories of the specified
+ ‘--build-directory’. EasyInstall will not actually build or
+ install the requested projects or their dependencies; it will just
+ find and extract them for you. See *note Editing and Viewing
+ Source Packages: ef. above for more details.
+
+‘--build-directory=DIR, -b DIR’ (UPDATED in 0.6a1)
+
+ Set the directory used to build source packages. If a package is
+ built from a source distribution or checkout, it will be extracted
+ to a subdirectory of the specified directory. The subdirectory
+ will have the same name as the extracted distribution’s project,
+ but in all-lowercase. If a file or directory of that name already
+ exists in the given directory, a warning will be printed to the
+ console, and the build will take place in a temporary directory
+ instead.
+
+ This option is most useful in combination with the ‘--editable’
+ option, which forces EasyInstall to `only' find and extract (but
+ not build and install) source distributions. See *note Editing and
+ Viewing Source Packages: ef, above, for more information.
+
+‘--verbose, -v, --quiet, -q’ (New in 0.4a4)
+
+ Control the level of detail of EasyInstall’s progress messages.
+ The default detail level is “info”, which prints information only
+ about relatively time-consuming operations like running a setup
+ script, unpacking an archive, or retrieving a URL. Using ‘-q’ or
+ ‘--quiet’ drops the detail level to “warn”, which will only display
+ installation reports, warnings, and errors. Using ‘-v’ or
+ ‘--verbose’ increases the detail level to include individual
+ file-level operations, link analysis messages, and distutils
+ messages from any setup scripts that get run. If you include the
+ ‘-v’ option more than once, the second and subsequent uses are
+ passed down to any setup scripts, increasing the verbosity of their
+ reporting as well.
+
+‘--dry-run, -n’ (New in 0.4a4)
+
+ Don’t actually install the package or scripts. This option is
+ passed down to any setup scripts run, so packages should not
+ actually build either. This does `not' skip downloading, nor does
+ it skip extracting source distributions to a temporary/build
+ directory.
+
+‘--optimize=LEVEL’, ‘-O LEVEL’ (New in 0.4a4)
+
+ If you are installing from a source distribution, and are `not'
+ using the ‘--zip-ok’ option, this option controls the optimization
+ level for compiling installed ‘.py’ files to ‘.pyo’ files. It does
+ not affect the compilation of modules contained in ‘.egg’ files,
+ only those in ‘.egg’ directories. The optimization level can be
+ set to 0, 1, or 2; the default is 0 (unless it’s set under
+ ‘install’ or ‘install_lib’ in one of your distutils configuration
+ files).
+
+‘--record=FILENAME’ (New in 0.5a4)
+
+ Write a record of all installed files to FILENAME. This is
+ basically the same as the same option for the standard distutils
+ “install” command, and is included for compatibility with tools
+ that expect to pass this option to “setup.py install”.
+
+‘--site-dirs=DIRLIST, -S DIRLIST’ (New in 0.6a1)
+
+ Specify one or more custom “site” directories (separated by
+ commas). “Site” directories are directories where ‘.pth’ files are
+ processed, such as the main Python ‘site-packages’ directory. As
+ of 0.6a10, EasyInstall automatically detects whether a given
+ directory processes ‘.pth’ files (or can be made to do so), so you
+ should not normally need to use this option. It is is now only
+ necessary if you want to override EasyInstall’s judgment and force
+ an installation directory to be treated as if it supported ‘.pth’
+ files.
+
+‘--no-deps, -N’ (New in 0.6a6)
+
+ Don’t install any dependencies. This is intended as a convenience
+ for tools that wrap eggs in a platform-specific packaging system.
+ (We don’t recommend that you use it for anything else.)
+
+‘--allow-hosts=PATTERNS, -H PATTERNS’ (New in 0.6a6)
+
+ Restrict downloading and spidering to hosts matching the specified
+ glob patterns. E.g. ‘-H *.python.org’ restricts web access so
+ that only packages listed and downloadable from machines in the
+ ‘python.org’ domain. The glob patterns must match the `entire'
+ user/host/port section of the target URL(s). For example,
+ ‘*.python.org’ will NOT accept a URL like ‘http://python.org/foo’
+ or ‘http://www.python.org:8080/’. Multiple patterns can be
+ specified by separating them with commas. The default pattern is
+ ‘*’, which matches anything.
+
+ In general, this option is mainly useful for blocking EasyInstall’s
+ web access altogether (e.g. ‘-Hlocalhost’), or to restrict it to
+ an intranet or other trusted site. EasyInstall will do the best it
+ can to satisfy dependencies given your host restrictions, but of
+ course can fail if it can’t find suitable packages. EasyInstall
+ displays all blocked URLs, so that you can adjust your
+ ‘--allow-hosts’ setting if it is more strict than you intended.
+ Some sites may wish to define a restrictive default setting for
+ this option in their *note configuration files: f0, and then
+ manually override the setting on the command line as needed.
+
+‘--prefix=DIR’ (New in 0.6a10)
+
+ Use the specified directory as a base for computing the default
+ installation and script directories. On Windows, the resulting
+ default directories will be ‘prefix\\Lib\\site-packages’ and
+ ‘prefix\\Scripts’, while on other platforms the defaults will be
+ ‘prefix/lib/python2.X/site-packages’ (with the appropriate version
+ substituted) for libraries and ‘prefix/bin’ for scripts.
+
+ Note that the ‘--prefix’ option only sets the `default'
+ installation and script directories, and does not override the ones
+ set on the command line or in a configuration file.
+
+‘--local-snapshots-ok, -l’ (New in 0.6c6)
+
+ Normally, EasyInstall prefers to only install `released' versions
+ of projects, not in-development ones, because such projects may not
+ have a currently-valid version number. So, it usually only
+ installs them when their ‘setup.py’ directory is explicitly passed
+ on the command line.
+
+ However, if this option is used, then any in-development projects
+ that were installed using the ‘setup.py develop’ command, will be
+ used to build eggs, effectively upgrading the “in-development”
+ project to a snapshot release. Normally, this option is used only
+ in conjunction with the ‘--always-copy’ option to create a
+ distributable snapshot of every egg needed to run an application.
+
+ Note that if you use this option, you must make sure that there is
+ a valid version number (such as an SVN revision number tag) for any
+ in-development projects that may be used, as otherwise EasyInstall
+ may not be able to tell what version of the project is “newer” when
+ future installations or upgrades are attempted.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0370
+
+
+File: setuptools.info, Node: Custom Installation Locations, Next: Package Index “API”, Prev: Command-Line Options, Up: Reference Manual
+
+8.3.2.3 Custom Installation Locations
+.....................................
+
+By default, EasyInstall installs python packages into Python’s main
+‘site-packages’ directory, and manages them using a custom ‘.pth’ file
+in that same directory.
+
+Very often though, a user or developer wants ‘easy_install’ to install
+and manage python packages in an alternative location, usually for one
+of 3 reasons:
+
+ 1. They don’t have access to write to the main Python site-packages
+ directory.
+
+ 2. They want a user-specific stash of packages, that is not visible to
+ other users.
+
+ 3. They want to isolate a set of packages to a specific python
+ application, usually to minimize the possibility of version
+ conflicts.
+
+Historically, there have been many approaches to achieve custom
+installation. The following section lists only the easiest and most
+relevant approaches (1).
+
+*note Use the "–user" option: 104.
+
+*note Use the "–user" option and customize "PYTHONUSERBASE": 105.
+
+*note Use "virtualenv": 106.
+
+* Menu:
+
+* Use the “–user” option::
+* Use the “–user” option and customize “PYTHONUSERBASE”::
+* Use “virtualenv”::
+
+ ---------- Footnotes ----------
+
+ (1) (1) There are older ways to achieve custom installation using
+various ‘easy_install’ and ‘setup.py install’ options, combined with
+‘PYTHONPATH’ and/or ‘PYTHONUSERBASE’ alterations, but all of these are
+effectively deprecated by the User scheme brought in by PEP-370
+(http://www.python.org/dev/peps/pep-0370/).
+
+
+File: setuptools.info, Node: Use the “–user” option, Next: Use the “–user” option and customize “PYTHONUSERBASE”, Up: Custom Installation Locations
+
+8.3.2.4 Use the “–user” option
+..............................
+
+Python provides a User scheme for installation, which means that all
+python distributions support an alternative install location that is
+specific to a user (1). The Default location for each OS is explained
+in the python documentation for the ‘site.USER_BASE’ variable. This
+mode of installation can be turned on by specifying the ‘--user’ option
+to ‘setup.py install’ or ‘easy_install’. This approach serves the need
+to have a user-specific stash of packages.
+
+ ---------- Footnotes ----------
+
+ (1) (3) Prior to the User scheme, there was the Home scheme, which is
+still available, but requires more effort than the User scheme to get
+packages recognized.
+
+
+File: setuptools.info, Node: Use the “–user” option and customize “PYTHONUSERBASE”, Next: Use “virtualenv”, Prev: Use the “–user” option, Up: Custom Installation Locations
+
+8.3.2.5 Use the “–user” option and customize “PYTHONUSERBASE”
+.............................................................
+
+The User scheme install location can be customized by setting the
+‘PYTHONUSERBASE’ environment variable, which updates the value of
+‘site.USER_BASE’. To isolate packages to a specific application, simply
+set the OS environment of that application to a specific value of
+‘PYTHONUSERBASE’, that contains just those packages.
+
+
+File: setuptools.info, Node: Use “virtualenv”, Prev: Use the “–user” option and customize “PYTHONUSERBASE”, Up: Custom Installation Locations
+
+8.3.2.6 Use “virtualenv”
+........................
+
+“virtualenv” is a 3rd-party python package that effectively “clones” a
+python installation, thereby creating an isolated location to install
+packages. The evolution of “virtualenv” started before the existence of
+the User installation scheme. “virtualenv” provides a version of
+‘easy_install’ that is scoped to the cloned python install and is used
+in the normal way. “virtualenv” does offer various features that the
+User installation scheme alone does not provide, e.g. the ability to
+hide the main python site-packages.
+
+Please refer to the virtualenv(1) documentation for more details.
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.org/project/virtualenv/
+
+
+File: setuptools.info, Node: Package Index “API”, Prev: Custom Installation Locations, Up: Reference Manual
+
+8.3.2.7 Package Index “API”
+...........................
+
+Custom package indexes (and PyPI) must follow the following rules for
+EasyInstall to be able to look up and download packages:
+
+ 1. Except where stated otherwise, “pages” are HTML or XHTML, and
+ “links” refer to ‘href’ attributes.
+
+ 2. Individual project version pages’ URLs must be of the form
+ ‘base/projectname/version’, where ‘base’ is the package index’s
+ base URL.
+
+ 3. Omitting the ‘/version’ part of a project page’s URL (but keeping
+ the trailing ‘/’) should result in a page that is either:
+
+ a. The single active version of that project, as though the
+ version had been explicitly included, OR
+
+ b. A page with links to all of the active version pages for that
+ project.
+
+ 4. Individual project version pages should contain direct links to
+ downloadable distributions where possible. It is explicitly
+ permitted for a project’s “long_description” to include URLs, and
+ these should be formatted as HTML links by the package index, as
+ EasyInstall does no special processing to identify what parts of a
+ page are index-specific and which are part of the project’s
+ supplied description.
+
+ 5. Where available, MD5 information should be added to download URLs
+ by appending a fragment identifier of the form ‘#md5=...’, where
+ ‘...’ is the 32-character hex MD5 digest. EasyInstall will verify
+ that the downloaded file’s MD5 digest matches the given value.
+
+ 6. Individual project version pages should identify any “homepage” or
+ “download” URLs using ‘rel="homepage"’ and ‘rel="download"’
+ attributes on the HTML elements linking to those URLs. Use of
+ these attributes will cause EasyInstall to always follow the
+ provided links, unless it can be determined by inspection that they
+ are downloadable distributions. If the links are not to
+ downloadable distributions, they are retrieved, and if they are
+ HTML, they are scanned for download links. They are `not' scanned
+ for additional “homepage” or “download” links, as these are only
+ processed for pages that are part of a package index site.
+
+ 7. The root URL of the index, if retrieved with a trailing ‘/’, must
+ result in a page containing links to `all' projects’ active version
+ pages.
+
+ (Note: This requirement is a workaround for the absence of
+ case-insensitive ‘safe_name()’ matching of project names in URL
+ paths. If project names are matched in this fashion (e.g. via the
+ PyPI server, mod_rewrite, or a similar mechanism), then it is not
+ necessary to include this all-packages listing page.)
+
+ 8. If a package index is accessed via a ‘file://’ URL, then
+ EasyInstall will automatically use ‘index.html’ files, if present,
+ when trying to read a directory with a trailing ‘/’ on the URL.
+
+
+File: setuptools.info, Node: Porting from Distutils, Next: “Eggsecutable” Scripts, Prev: Easy Install, Up: Guides on backward compatibility & deprecated practice
+
+8.4 Porting from Distutils
+==========================
+
+Setuptools and the PyPA have a stated goal(1) 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:
+
+ SETUPTOOLS_USE_DISTUTILS=local
+
+This behavior is planned to become the default.
+
+* Menu:
+
+* Prefer Setuptools::
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/packaging-problems/issues/127
+
+
+File: setuptools.info, Node: Prefer Setuptools, Up: Porting from Distutils
+
+8.4.1 Prefer Setuptools
+-----------------------
+
+As Distutils is deprecated, any usage of functions or objects from
+distutils is similarly discouraged, and Setuptools aims to replace or
+deprecate all such uses. This section describes the recommended
+replacements.
+
+‘distutils.core.setup’ → ‘setuptools.setup’
+
+‘distutils.cmd.Command’ → ‘setuptools.Command’
+
+‘distutils.log’ → (no replacement yet)
+
+‘distutils.version.*’ → ‘packaging.version.*’
+
+If a project relies on uses of ‘distutils’ that do not have a suitable
+replacement above, please search the Setuptools issue tracker(1) 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/
+
+
+File: setuptools.info, Node: “Eggsecutable” Scripts, Prev: Porting from Distutils, Up: Guides on backward compatibility & deprecated practice
+
+8.5 “Eggsecutable” Scripts
+==========================
+
+Deprecated since version 45.3.0.
+
+Occasionally, there are situations where it’s desirable to make an
+‘.egg’ file directly executable. You can do this by including an entry
+point such as the following:
+
+ setup(
+ # other arguments here...
+ entry_points={
+ "setuptools.installation": [
+ "eggsecutable = my_package.some_module:main_func",
+ ]
+ }
+ )
+
+Any eggs built from the above setup script will include a short
+executable prelude that imports and calls ‘main_func()’ from
+‘my_package.some_module’. The prelude can be run on Unix-like platforms
+(including Mac and Linux) by invoking the egg with ‘/bin/sh’, or by
+enabling execute permissions on the ‘.egg’ file. For the executable
+prelude to run, the appropriate version of Python must be available via
+the ‘PATH’ environment variable, under its “long” name. That is, if the
+egg is built for Python 2.3, there must be a ‘python2.3’ executable
+present in a directory on ‘PATH’.
+
+IMPORTANT NOTE: Eggs with an “eggsecutable” header cannot be renamed, or
+invoked via symlinks. They `must' be invoked using their original
+filename, in order to ensure that, once running, ‘pkg_resources’ will
+know what project and version is in use. The header script will check
+this and exit with an error if the ‘.egg’ file has been renamed or is
+invoked via a symlink that changes its base name.
+
+
+File: setuptools.info, Node: History<2>, Next: Credits, Prev: Guides on backward compatibility & deprecated practice, Up: Top
+
+9 History
+*********
+
+* Menu:
+
+* v50.3.2: v50 3 2.
+* v50.3.1: v50 3 1.
+* v50.3.0: v50 3 0.
+* v50.2.0: v50 2 0.
+* v50.1.0: v50 1 0.
+* v50.0.3: v50 0 3.
+* v50.0.2: v50 0 2.
+* v50.0.1: v50 0 1.
+* v50.0.0: v50 0 0.
+* v49.6.0: v49 6 0.
+* v49.5.0: v49 5 0.
+* v49.4.0: v49 4 0.
+* v49.3.2: v49 3 2.
+* v49.3.1: v49 3 1.
+* v49.3.0: v49 3 0.
+* v49.2.1: v49 2 1.
+* v49.2.0: v49 2 0.
+* v49.1.3: v49 1 3.
+* v49.1.2: v49 1 2.
+* v49.1.1: v49 1 1.
+* v49.0.1: v49 0 1.
+* v49.1.0: v49 1 0.
+* v49.0.0: v49 0 0.
+* v48.0.0: v48 0 0.
+* v47.3.2: v47 3 2.
+* v47.3.1: v47 3 1.
+* v47.3.0: v47 3 0.
+* v47.2.0: v47 2 0.
+* v47.1.1: v47 1 1.
+* v44.1.1: v44 1 1.
+* v47.1.0: v47 1 0.
+* v47.0.0: v47 0 0.
+* v46.4.0: v46 4 0.
+* v46.3.1: v46 3 1.
+* v46.3.0: v46 3 0.
+* v46.2.0: v46 2 0.
+* v46.1.3: v46 1 3.
+* v46.1.2: v46 1 2.
+* v46.1.1: v46 1 1.
+* v46.1.0: v46 1 0.
+* v44.1.0: v44 1 0.
+* v46.0.0: v46 0 0.
+* v45.3.0: v45 3 0.
+* v45.2.0: v45 2 0.
+* v45.1.0: v45 1 0.
+* v45.0.0: v45 0 0.
+* v44.0.0: v44 0 0.
+* v43.0.0: v43 0 0.
+* v42.0.2: v42 0 2.
+* v42.0.1: v42 0 1.
+* v42.0.0: v42 0 0.
+* v41.6.0: v41 6 0.
+* v41.5.1: v41 5 1.
+* v41.5.0: v41 5 0.
+* v41.4.0: v41 4 0.
+* v41.3.0: v41 3 0.
+* v41.2.0: v41 2 0.
+* v41.1.0: v41 1 0.
+* v41.0.1: v41 0 1.
+* v41.0.0: v41 0 0.
+* v40.9.0: v40 9 0.
+* v40.8.0: v40 8 0.
+* v40.7.3: v40 7 3.
+* v40.7.2: v40 7 2.
+* v40.7.1: v40 7 1.
+* v40.7.0: v40 7 0.
+* v40.6.3: v40 6 3.
+* v40.6.2: v40 6 2.
+* v40.6.1: v40 6 1.
+* v40.6.0: v40 6 0.
+* v40.5.0: v40 5 0.
+* v40.4.3: v40 4 3.
+* v40.4.2: v40 4 2.
+* v40.4.1: v40 4 1.
+* v40.4.0: v40 4 0.
+* v40.3.0: v40 3 0.
+* v40.2.0: v40 2 0.
+* v40.1.1: v40 1 1.
+* v40.1.0: v40 1 0.
+* v40.0.0: v40 0 0.
+* v39.2.0: v39 2 0.
+* v39.1.0: v39 1 0.
+* v39.0.1: v39 0 1.
+* v39.0.0: v39 0 0.
+* v38.7.0: v38 7 0.
+* v38.6.1: v38 6 1.
+* v38.6.0: v38 6 0.
+* v38.5.2: v38 5 2.
+* v38.5.1: v38 5 1.
+* v38.5.0: v38 5 0.
+* v38.4.1: v38 4 1.
+* v38.4.0: v38 4 0.
+* v38.3.0: v38 3 0.
+* v38.2.5: v38 2 5.
+* v38.2.4: v38 2 4.
+* v38.2.3: v38 2 3.
+* v38.2.2: v38 2 2.
+* v38.2.1: v38 2 1.
+* v38.2.0: v38 2 0.
+* v38.1.0: v38 1 0.
+* v38.0.0: v38 0 0.
+* v37.0.0: v37 0 0.
+* v36.8.0: v36 8 0.
+* v36.7.3: v36 7 3.
+* v36.7.2: v36 7 2.
+* v36.7.1: v36 7 1.
+* v36.7.0: v36 7 0.
+* v36.6.1: v36 6 1.
+* v36.6.0: v36 6 0.
+* v36.5.0: v36 5 0.
+* v36.4.0: v36 4 0.
+* v36.3.0: v36 3 0.
+* v36.2.7: v36 2 7.
+* v36.2.6: v36 2 6.
+* v36.2.5: v36 2 5.
+* v36.2.4: v36 2 4.
+* v36.2.3: v36 2 3.
+* v36.2.2: v36 2 2.
+* v36.2.1: v36 2 1.
+* v36.2.0: v36 2 0.
+* v36.1.1: v36 1 1.
+* v36.1.0: v36 1 0.
+* v36.0.1: v36 0 1.
+* v36.0.0: v36 0 0.
+* v35.0.2: v35 0 2.
+* v35.0.1: v35 0 1.
+* v35.0.0: v35 0 0.
+* v34.4.1: v34 4 1.
+* v34.4.0: v34 4 0.
+* v34.3.3: v34 3 3.
+* v34.3.2: v34 3 2.
+* v34.3.1: v34 3 1.
+* v34.3.0: v34 3 0.
+* v34.2.0: v34 2 0.
+* v34.1.1: v34 1 1.
+* v34.1.0: v34 1 0.
+* v34.0.3: v34 0 3.
+* v34.0.2: v34 0 2.
+* v34.0.1: v34 0 1.
+* v34.0.0: v34 0 0.
+* v33.1.1: v33 1 1.
+* v33.1.0: v33 1 0.
+* v33.0.0: v33 0 0.
+* v32.3.1: v32 3 1.
+* v32.3.0: v32 3 0.
+* v32.2.0: v32 2 0.
+* v32.1.3: v32 1 3.
+* v32.1.2: v32 1 2.
+* v32.1.1: v32 1 1.
+* v32.1.0: v32 1 0.
+* v32.0.0: v32 0 0.
+* v31.0.1: v31 0 1.
+* v31.0.0: v31 0 0.
+* v30.4.0: v30 4 0.
+* v30.3.0: v30 3 0.
+* v30.2.1: v30 2 1.
+* v30.2.0: v30 2 0.
+* v30.1.0: v30 1 0.
+* v30.0.0: v30 0 0.
+* v29.0.1: v29 0 1.
+* v29.0.0: v29 0 0.
+* v28.8.0: v28 8 0.
+* v28.7.1: v28 7 1.
+* v28.7.0: v28 7 0.
+* v28.6.1: v28 6 1.
+* v28.6.0: v28 6 0.
+* v28.5.0: v28 5 0.
+* v28.4.0: v28 4 0.
+* v28.3.0: v28 3 0.
+* v28.1.0: v28 1 0.
+* v28.0.0: v28 0 0.
+* v27.3.1: v27 3 1.
+* v27.3.0: v27 3 0.
+* v27.2.0: v27 2 0.
+* v27.1.2: v27 1 2.
+* v27.1.1: v27 1 1.
+* v27.1.0: v27 1 0.
+* v27.0.0: v27 0 0.
+* v26.1.1: v26 1 1.
+* v26.1.0: v26 1 0.
+* v26.0.0: v26 0 0.
+* v25.4.0: v25 4 0.
+* v25.3.0: v25 3 0.
+* v25.2.0: v25 2 0.
+* v25.1.6: v25 1 6.
+* v25.1.5: v25 1 5.
+* v25.1.4: v25 1 4.
+* v25.1.3: v25 1 3.
+* v25.1.2: v25 1 2.
+* v25.1.1: v25 1 1.
+* v25.1.0: v25 1 0.
+* v25.0.2: v25 0 2.
+* v25.0.1: v25 0 1.
+* v25.0.0: v25 0 0.
+* v24.3.1: v24 3 1.
+* v24.3.0: v24 3 0.
+* v24.2.1: v24 2 1.
+* v24.2.0: v24 2 0.
+* v24.1.1: v24 1 1.
+* v24.1.0: v24 1 0.
+* v24.0.3: v24 0 3.
+* v24.0.2: v24 0 2.
+* v24.0.1: v24 0 1.
+* v24.0.0: v24 0 0.
+* v23.2.1: v23 2 1.
+* v23.1.0: v23 1 0.
+* v23.0.0: v23 0 0.
+* v22.0.5: v22 0 5.
+* v22.0.4: v22 0 4.
+* v22.0.3: v22 0 3.
+* v22.0.2: v22 0 2.
+* v22.0.1: v22 0 1.
+* v22.0.0: v22 0 0.
+* v21.2.2: v21 2 2.
+* v21.2.1: v21 2 1.
+* v21.2.0: v21 2 0.
+* v21.1.0: v21 1 0.
+* v21.0.0: v21 0 0.
+* v20.10.0: v20 10 0.
+* v20.9.0: v20 9 0.
+* v20.8.1: v20 8 1.
+* v20.8.0: v20 8 0.
+* v20.7.0: v20 7 0.
+* v20.6.8: v20 6 8.
+* v20.6.7: v20 6 7.
+* v20.6.6: v20 6 6.
+* v20.6.0: v20 6 0.
+* 20.5: 20 5.
+* 20.4: 20 4.
+* 20.3.1: 20 3 1.
+* 20.3: 20 3.
+* 20.2.2: 20 2 2.
+* 20.2.1: 20 2 1.
+* 20.2: 20 2.
+* 20.1.1: 20 1 1.
+* 20.1: 20 1.
+* 20.0: 20 0.
+* 19.7: 19 7.
+* 19.6.2: 19 6 2.
+* 19.6.1: 19 6 1.
+* 19.6: 19 6.
+* 19.5: 19 5.
+* 19.4.1: 19 4 1.
+* 19.4: 19 4.
+* 19.3: 19 3.
+* 19.2: 19 2.
+* 19.1.1: 19 1 1.
+* 19.1: 19 1.
+* 19.0: 19 0.
+* 18.8.1: 18 8 1.
+* 18.8: 18 8.
+* 18.7.1: 18 7 1.
+* 18.7: 18 7.
+* 18.6.1: 18 6 1.
+* 18.6: 18 6.
+* 18.5: 18 5.
+* 18.4: 18 4.
+* 18.3.2: 18 3 2.
+* 18.3.1: 18 3 1.
+* 18.3: 18 3.
+* 18.2: 18 2.
+* 18.1: 18 1.
+* 18.0.1: 18 0 1.
+* 18.0: 18 0.
+* 17.1.1: 17 1 1.
+* 17.1: 17 1.
+* 17.0: 17 0.
+* 16.0: 16 0.
+* 15.2: 15 2.
+* 15.1: 15 1.
+* 15.0: 15 0.
+* 14.3.1: 14 3 1.
+* 14.3: 14 3.
+* 14.2: 14 2.
+* 14.1.1: 14 1 1.
+* 14.1: 14 1.
+* 14.0: 14 0.
+* 13.0.2: 13 0 2.
+* 13.0.1: 13 0 1.
+* 13.0: 13 0.
+* 12.4: 12 4.
+* 12.3: 12 3.
+* 12.2: 12 2.
+* 12.1: 12 1.
+* 12.0.5: 12 0 5.
+* 12.0.4: 12 0 4.
+* 12.0.3: 12 0 3.
+* 12.0.2: 12 0 2.
+* 12.0.1: 12 0 1.
+* 12.0: 12 0.
+* 11.3.1: 11 3 1.
+* 11.3: 11 3.
+* 11.2: 11 2.
+* 11.1: 11 1.
+* 11.0: 11 0.
+* 10.2.1: 10 2 1.
+* 10.2: 10 2.
+* 10.1: 10 1.
+* 10.0.1: 10 0 1.
+* 10.0: 10 0.
+* 9.1: 9 1.
+* 9.0.1: 9 0 1.
+* 9.0: 9 0.
+* 8.4: 8 4.
+* 8.3: 8 3.
+* 8.2.1: 8 2 1.
+* 8.2: 8 2.
+* 8.1: 8 1.
+* 8.0.4: 8 0 4.
+* 8.0.3: 8 0 3.
+* 8.0.2: 8 0 2.
+* 8.0.1: 8 0 1.
+* 8.0: 8 0.
+* 7.0: 7 0.
+* 6.1: 6 1.
+* 6.0.2: 6 0 2.
+* 6.0.1: 6 0 1.
+* 6.0: 6 0.
+* 5.8: 5 8.
+* 5.7: 5 7.
+* 5.6: 5 6.
+* 5.5.1: 5 5 1.
+* 5.5: 5 5.
+* 5.4.2: 5 4 2.
+* 5.4.1: 5 4 1.
+* 5.4: 5 4.
+* 5.3: 5 3.
+* 5.2: 5 2.
+* 5.1: 5 1.
+* 5.0.2: 5 0 2.
+* 5.0.1: 5 0 1.
+* 5.0: 5 0.
+* 3.7.1 and 3.8.1 and 4.0.1: 3 7 1 and 3 8 1 and 4 0 1.
+* 4.0: 4 0.
+* 3.8: 3 8.
+* 3.7: 3 7.
+* 3.6: 3 6.
+* 3.5.2: 3 5 2.
+* 3.5.1: 3 5 1.
+* 3.5: 3 5.
+* 3.4.4: 3 4 4.
+* 3.4.3: 3 4 3.
+* 3.4.2: 3 4 2.
+* 3.4.1: 3 4 1.
+* 3.4: 3 4.
+* 3.3: 3 3.
+* 3.2: 3 2.
+* 3.1: 3 1.
+* 3.0.2: 3 0 2.
+* 3.0.1: 3 0 1.
+* 3.0: 3 0.
+* 2.2: 2 2.
+* 2.1.2: 2 1 2.
+* 2.1.1: 2 1 1.
+* 2.1: 2 1.
+* 2.0.2: 2 0 2.
+* 2.0.1: 2 0 1.
+* 2.0: 2 0.
+* 1.4.2: 1 4 2.
+* 1.4.1: 1 4 1.
+* 1.4: 1 4.
+* 1.3.2: 1 3 2.
+* 1.3.1: 1 3 1.
+* 1.3: 1 3.
+* 1.2: 1 2.
+* 1.1.7: 1 1 7.
+* 1.1.6: 1 1 6.
+* 1.1.5: 1 1 5.
+* 1.1.4: 1 1 4.
+* 1.1.3: 1 1 3.
+* 1.1.2: 1 1 2.
+* 1.1.1: 1 1 1.
+* 1.1: 1 1.
+* 1.0: 1 0.
+* 0.9.8: 0 9 8.
+* 0.9.7: 0 9 7.
+* 0.9.6: 0 9 6.
+* 0.9.5: 0 9 5.
+* 0.9.4: 0 9 4.
+* 0.9.3: 0 9 3.
+* 0.9.2: 0 9 2.
+* 0.9.1: 0 9 1.
+* 0.9: 0 9.
+* 0.8: 0 8.
+* 0.7.8: 0 7 8.
+* 0.7.7: 0 7 7.
+* 0.7.6: 0 7 6.
+* 0.7.5: 0 7 5.
+* 0.7.4: 0 7 4.
+* 0.7.3: 0 7 3.
+* 0.7.2: 0 7 2.
+* 0.7.1: 0 7 1.
+* 0.7: 0 7.
+* 0.7b4: 0 7b4.
+* 0.6.49: 0 6 49.
+* 0.6.48: 0 6 48.
+* 0.6.47: 0 6 47.
+* 0.6.46: 0 6 46.
+* 0.6.45: 0 6 45.
+* 0.6.44: 0 6 44.
+* 0.6.43: 0 6 43.
+* 0.6.42: 0 6 42.
+* 0.6.41: 0 6 41.
+* 0.6.40: 0 6 40.
+* 0.6.39: 0 6 39.
+* 0.6.38: 0 6 38.
+* 0.6.37: 0 6 37.
+* 0.6.36: 0 6 36.
+* 0.6.35: 0 6 35.
+* 0.6.34: 0 6 34.
+* 0.6.33: 0 6 33.
+* 0.6.32: 0 6 32.
+* 0.6.31: 0 6 31.
+* 0.6.30: 0 6 30.
+* 0.6.29: 0 6 29.
+* 0.6.28: 0 6 28.
+* 0.6.27: 0 6 27.
+* 0.6.26: 0 6 26.
+* 0.6.25: 0 6 25.
+* 0.6.24: 0 6 24.
+* 0.6.23: 0 6 23.
+* 0.6.21: 0 6 21.
+* 0.6.20: 0 6 20.
+* 0.6.19: 0 6 19.
+* 0.6.18: 0 6 18.
+* 0.6.17: 0 6 17.
+* 0.6.16: 0 6 16.
+* 0.6.15: 0 6 15.
+* 0.6.14: 0 6 14.
+* 0.6.13: 0 6 13.
+* 0.6.12: 0 6 12.
+* 0.6.11: 0 6 11.
+* 0.6.10: 0 6 10.
+* 0.6.9: 0 6 9.
+* 0.6.8: 0 6 8.
+* 0.6.7: 0 6 7.
+* 0.6.6: 0 6 6.
+* 0.6.5: 0 6 5.
+* 0.6.4: 0 6 4.
+* 0.6.3: 0 6 3.
+* 0.6.2: 0 6 2.
+* 0.6.1: 0 6 1.
+* 0.6: 0 6.
+* 0.6c9: 0 6c9.
+* 0.6c7: 0 6c7.
+* 0.6c6: 0 6c6.
+* 0.6c5: 0 6c5.
+* 0.6c4: 0 6c4.
+* 0.6c3: 0 6c3.
+* 0.6c2: 0 6c2.
+* 0.6c1: 0 6c1.
+* 0.6b4: 0 6b4.
+* 0.6b3: 0 6b3.
+* 0.6b2: 0 6b2.
+* 0.6b1: 0 6b1.
+* 0.6a11: 0 6a11.
+* 0.6a10: 0 6a10.
+* 0.6a9: 0 6a9.
+* 0.6a8: 0 6a8.
+* 0.6a7: 0 6a7.
+* 0.6a6: 0 6a6.
+* 0.6a5: 0 6a5.
+* 0.6a3: 0 6a3.
+* 0.6a2: 0 6a2.
+* 0.6a1: 0 6a1.
+* 0.5a12: 0 5a12.
+* 0.5a11: 0 5a11.
+* 0.5a10: 0 5a10.
+* 0.5a9: 0 5a9.
+* 0.5a8: 0 5a8.
+* 0.5a7: 0 5a7.
+* 0.5a6: 0 5a6.
+* 0.5a5: 0 5a5.
+* 0.5a4: 0 5a4.
+* 0.5a3: 0 5a3.
+* 0.5a2: 0 5a2.
+* 0.5a1: 0 5a1.
+* 0.4a4: 0 4a4.
+* 0.4a3: 0 4a3.
+* 0.4a2: 0 4a2.
+* 0.4a1: 0 4a1.
+* 0.3a4: 0 3a4.
+* 0.3a3: 0 3a3.
+* 0.3a2: 0 3a2.
+* 0.3a1: 0 3a1.
+
+
+File: setuptools.info, Node: v50 3 2, Next: v50 3 1, Up: History<2>
+
+9.1 v50.3.2
+===========
+
+17 Oct 2020
+
+* Menu:
+
+* Documentation changes::
+* Misc::
+
+
+File: setuptools.info, Node: Documentation changes, Next: Misc, Up: v50 3 2
+
+9.1.1 Documentation changes
+---------------------------
+
+ * #2394(1): Extended towncrier news template to include change note
+ categories. This allows to see what types of changes a given
+ version introduces – by @webknjaz(2)
+
+ * #2427(3): Started enforcing strict syntax and reference validation
+ in the Sphinx docs – by @webknjaz(4)
+
+ * #2428(5): Removed redundant Sphinx ‘Makefile’ support – by
+ @webknjaz(6)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2394
+
+ (2) https://github.com/sponsors/webknjaz
+
+ (3) https://github.com/pypa/setuptools/issues/2427
+
+ (4) https://github.com/sponsors/webknjaz
+
+ (5) https://github.com/pypa/setuptools/issues/2428
+
+ (6) https://github.com/sponsors/webknjaz
+
+
+File: setuptools.info, Node: Misc, Prev: Documentation changes, Up: v50 3 2
+
+9.1.2 Misc
+----------
+
+ * #2401(1): Enabled test results reporting in AppVeyor CI – by
+ @webknjaz(2)
+
+ * #2420(3): Replace Python 3.9.0 beta with 3.9.0 final on GitHub
+ Actions.
+
+ * #2421(4): Python 3.9 Trove classifier got added to the dist
+ metadata – by @webknjaz(5)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2401
+
+ (2) https://github.com/sponsors/webknjaz
+
+ (3) https://github.com/pypa/setuptools/issues/2420
+
+ (4) https://github.com/pypa/setuptools/issues/2421
+
+ (5) https://github.com/sponsors/webknjaz
+
+
+File: setuptools.info, Node: v50 3 1, Next: v50 3 0, Prev: v50 3 2, Up: History<2>
+
+9.2 v50.3.1
+===========
+
+14 Oct 2020
+
+* Menu:
+
+* Documentation changes: Documentation changes<2>.
+* Misc: Misc<2>.
+
+
+File: setuptools.info, Node: Documentation changes<2>, Next: Misc<2>, Up: v50 3 1
+
+9.2.1 Documentation changes
+---------------------------
+
+ * #2093(1): Finalized doc revamp.
+
+ * #2097(2): doc: simplify index and group deprecated files
+
+ * #2102(3): doc overhaul step 2: break main doc into multiple
+ sections
+
+ * #2111(4): doc overhaul step 3: update userguide
+
+ * #2395(5): Added a ‘:user:’ role to Sphinx config – by @webknjaz(6)
+
+ * #2395(7): Added an illustrative explanation about the change notes
+ to fragments dir – by @webknjaz(8)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2093
+
+ (2) https://github.com/pypa/setuptools/issues/2097
+
+ (3) https://github.com/pypa/setuptools/issues/2102
+
+ (4) https://github.com/pypa/setuptools/issues/2111
+
+ (5) https://github.com/pypa/setuptools/issues/2395
+
+ (6) https://github.com/sponsors/webknjaz
+
+ (7) https://github.com/pypa/setuptools/issues/2395
+
+ (8) https://github.com/sponsors/webknjaz
+
+
+File: setuptools.info, Node: Misc<2>, Prev: Documentation changes<2>, Up: v50 3 1
+
+9.2.2 Misc
+----------
+
+ * #2379(1): Travis CI test suite now tests against PPC64.
+
+ * #2413(2): Suppress EOF errors (and other exceptions) when importing
+ lib2to3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2379
+
+ (2) https://github.com/pypa/setuptools/issues/2413
+
+
+File: setuptools.info, Node: v50 3 0, Next: v50 2 0, Prev: v50 3 1, Up: History<2>
+
+9.3 v50.3.0
+===========
+
+05 Sep 2020
+
+* Menu:
+
+* Changes::
+
+
+File: setuptools.info, Node: Changes, Up: v50 3 0
+
+9.3.1 Changes
+-------------
+
+ * #2368(1): In distutils, restore support for monkeypatched
+ CCompiler.spawn per pypa/distutils#15(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2368
+
+ (2) https://github.com/pypa/distutils/issues/15
+
+
+File: setuptools.info, Node: v50 2 0, Next: v50 1 0, Prev: v50 3 0, Up: History<2>
+
+9.4 v50.2.0
+===========
+
+04 Sep 2020
+
+* Menu:
+
+* Changes: Changes<2>.
+
+
+File: setuptools.info, Node: Changes<2>, Up: v50 2 0
+
+9.4.1 Changes
+-------------
+
+ * #2355(1): When pip is imported as part of a build, leave distutils
+ patched.
+
+ * #2380(2): There are some setuptools specific changes in the
+ ‘setuptools.command.bdist_rpm’ module that are no longer needed,
+ because they are part of the ‘bdist_rpm’ module in distutils in
+ Python 3.5.0. Therefore, code was removed from
+ ‘setuptools.command.bdist_rpm’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2355
+
+ (2) https://github.com/pypa/setuptools/issues/2380
+
+
+File: setuptools.info, Node: v50 1 0, Next: v50 0 3, Prev: v50 2 0, Up: History<2>
+
+9.5 v50.1.0
+===========
+
+02 Sep 2020
+
+* Menu:
+
+* Changes: Changes<3>.
+
+
+File: setuptools.info, Node: Changes<3>, Up: v50 1 0
+
+9.5.1 Changes
+-------------
+
+ * #2350(1): Setuptools reverts using the included distutils by
+ default. Platform maintainers and system integrators and others
+ are `strongly' encouraged to set ‘SETUPTOOLS_USE_DISTUTILS=local’
+ to help identify and work through the reported issues with
+ distutils adoption, mainly to file issues and pull requests with
+ pypa/distutils such that distutils performs as needed across every
+ supported environment.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2350
+
+
+File: setuptools.info, Node: v50 0 3, Next: v50 0 2, Prev: v50 1 0, Up: History<2>
+
+9.6 v50.0.3
+===========
+
+01 Sep 2020
+
+* Menu:
+
+* Misc: Misc<3>.
+
+
+File: setuptools.info, Node: Misc<3>, Up: v50 0 3
+
+9.6.1 Misc
+----------
+
+ * #2363(1): Restore link_libpython support on Python 3.7 and earlier
+ (see pypa/distutils#9(2)).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2363
+
+ (2) https://github.com/pypa/distutils/issues/9
+
+
+File: setuptools.info, Node: v50 0 2, Next: v50 0 1, Prev: v50 0 3, Up: History<2>
+
+9.7 v50.0.2
+===========
+
+01 Sep 2020
+
+* Menu:
+
+* Misc: Misc<4>.
+
+
+File: setuptools.info, Node: Misc<4>, Up: v50 0 2
+
+9.7.1 Misc
+----------
+
+ * #2352(1): In distutils hack, use absolute import rather than
+ relative to avoid bpo-30876(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2352
+
+ (2) http://bugs.python.org/issue30876
+
+
+File: setuptools.info, Node: v50 0 1, Next: v50 0 0, Prev: v50 0 2, Up: History<2>
+
+9.8 v50.0.1
+===========
+
+01 Sep 2020
+
+* Menu:
+
+* Misc: Misc<5>.
+
+
+File: setuptools.info, Node: Misc<5>, Up: v50 0 1
+
+9.8.1 Misc
+----------
+
+ * #2357(1): Restored Python 3.5 support in distutils.util for missing
+ ‘subprocess._optim_args_from_interpreter_flags’.
+
+ * #2358(2): Restored AIX support on Python 3.8 and earlier.
+
+ * #2361(3): Add Python 3.10 support to _distutils_hack. Get the
+ ‘Loader’ abstract class from importlib.abc rather than
+ importlib.util.abc (alias removed in Python 3.10).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2357
+
+ (2) https://github.com/pypa/setuptools/issues/2358
+
+ (3) https://github.com/pypa/setuptools/issues/2361
+
+
+File: setuptools.info, Node: v50 0 0, Next: v49 6 0, Prev: v50 0 1, Up: History<2>
+
+9.9 v50.0.0
+===========
+
+20 Aug 2020
+
+* Menu:
+
+* Breaking Changes::
+* Changes: Changes<4>.
+
+
+File: setuptools.info, Node: Breaking Changes, Next: Changes<4>, Up: v50 0 0
+
+9.9.1 Breaking Changes
+----------------------
+
+ * #2232(1): Once again, Setuptools overrides the stdlib distutils on
+ import. For environments or invocations where this behavior is
+ undesirable, users are provided with a temporary escape hatch. If
+ the environment variable ‘SETUPTOOLS_USE_DISTUTILS’ is set to
+ ‘stdlib’, Setuptools will fall back to the legacy behavior. Use of
+ this escape hatch is discouraged, but it is provided to ease the
+ transition while proper fixes for edge cases can be addressed.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2232
+
+
+File: setuptools.info, Node: Changes<4>, Prev: Breaking Changes, Up: v50 0 0
+
+9.9.2 Changes
+-------------
+
+ * #2334(1): In MSVC module, refine text in error message.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2334
+
+
+File: setuptools.info, Node: v49 6 0, Next: v49 5 0, Prev: v50 0 0, Up: History<2>
+
+9.10 v49.6.0
+============
+
+13 Aug 2020
+
+* Menu:
+
+* Changes: Changes<5>.
+
+
+File: setuptools.info, Node: Changes<5>, Up: v49 6 0
+
+9.10.1 Changes
+--------------
+
+ * #2129(1): In pkg_resources, no longer detect any pathname ending in
+ .egg as a Python egg. Now the path must be an unpacked egg or a
+ zip file.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2129
+
+
+File: setuptools.info, Node: v49 5 0, Next: v49 4 0, Prev: v49 6 0, Up: History<2>
+
+9.11 v49.5.0
+============
+
+13 Aug 2020
+
+* Menu:
+
+* Changes: Changes<6>.
+
+
+File: setuptools.info, Node: Changes<6>, Up: v49 5 0
+
+9.11.1 Changes
+--------------
+
+ * #2306(1): When running as a PEP 517(2) backend, setuptools does not
+ try to install ‘setup_requires’ itself. They are reported as build
+ requirements for the frontend to install.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2306
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: v49 4 0, Next: v49 3 2, Prev: v49 5 0, Up: History<2>
+
+9.12 v49.4.0
+============
+
+13 Aug 2020
+
+* Menu:
+
+* Changes: Changes<7>.
+
+
+File: setuptools.info, Node: Changes<7>, Up: v49 4 0
+
+9.12.1 Changes
+--------------
+
+ * #2310(1): Updated vendored packaging version to 20.4.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2310
+
+
+File: setuptools.info, Node: v49 3 2, Next: v49 3 1, Prev: v49 4 0, Up: History<2>
+
+9.13 v49.3.2
+============
+
+12 Aug 2020
+
+* Menu:
+
+* Documentation changes: Documentation changes<3>.
+* Misc: Misc<6>.
+
+
+File: setuptools.info, Node: Documentation changes<3>, Next: Misc<6>, Up: v49 3 2
+
+9.13.1 Documentation changes
+----------------------------
+
+ * #2300(1): Improve the ‘safe_version’ function documentation
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2300
+
+
+File: setuptools.info, Node: Misc<6>, Prev: Documentation changes<3>, Up: v49 3 2
+
+9.13.2 Misc
+-----------
+
+ * #2297(1): Once again, in stubs prefer exec_module to the deprecated
+ load_module.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2297
+
+
+File: setuptools.info, Node: v49 3 1, Next: v49 3 0, Prev: v49 3 2, Up: History<2>
+
+9.14 v49.3.1
+============
+
+10 Aug 2020
+
+* Menu:
+
+* Changes: Changes<8>.
+
+
+File: setuptools.info, Node: Changes<8>, Up: v49 3 1
+
+9.14.1 Changes
+--------------
+
+ * #2316(1): Removed warning when ‘distutils’ is imported before
+ ‘setuptools’ when ‘distutils’ replacement is not enabled.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2316
+
+
+File: setuptools.info, Node: v49 3 0, Next: v49 2 1, Prev: v49 3 1, Up: History<2>
+
+9.15 v49.3.0
+============
+
+09 Aug 2020
+
+* Menu:
+
+* Changes: Changes<9>.
+
+
+File: setuptools.info, Node: Changes<9>, Up: v49 3 0
+
+9.15.1 Changes
+--------------
+
+ * #2259(1): Setuptools now provides a .pth file (except for editable
+ installs of setuptools) to the target environment to ensure that
+ when enabled, the setuptools-provided distutils is preferred before
+ setuptools has been imported (and even if setuptools is never
+ imported). Honors the SETUPTOOLS_USE_DISTUTILS environment
+ variable.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2259
+
+
+File: setuptools.info, Node: v49 2 1, Next: v49 2 0, Prev: v49 3 0, Up: History<2>
+
+9.16 v49.2.1
+============
+
+02 Aug 2020
+
+* Menu:
+
+* Misc: Misc<7>.
+
+
+File: setuptools.info, Node: Misc<7>, Up: v49 2 1
+
+9.16.1 Misc
+-----------
+
+ * #2257(1): Fixed two flaws in
+ distutils._msvccompiler.MSVCCompiler.spawn.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2257
+
+
+File: setuptools.info, Node: v49 2 0, Next: v49 1 3, Prev: v49 2 1, Up: History<2>
+
+9.17 v49.2.0
+============
+
+12 Jul 2020
+
+* Menu:
+
+* Changes: Changes<10>.
+
+
+File: setuptools.info, Node: Changes<10>, Up: v49 2 0
+
+9.17.1 Changes
+--------------
+
+ * #2230(1): Now warn the user when setuptools is imported after
+ distutils modules have been loaded (exempting PyPy for 3.6),
+ directing the users of packages to import setuptools first.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2230
+
+
+File: setuptools.info, Node: v49 1 3, Next: v49 1 2, Prev: v49 2 0, Up: History<2>
+
+9.18 v49.1.3
+============
+
+12 Jul 2020
+
+* Menu:
+
+* Misc: Misc<8>.
+
+
+File: setuptools.info, Node: Misc<8>, Up: v49 1 3
+
+9.18.1 Misc
+-----------
+
+ * #2212(1): (Distutils) Allow spawn to accept environment. Avoid
+ monkey-patching global state.
+
+ * #2249(2): Fix extension loading technique in stubs.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2212
+
+ (2) https://github.com/pypa/setuptools/issues/2249
+
+
+File: setuptools.info, Node: v49 1 2, Next: v49 1 1, Prev: v49 1 3, Up: History<2>
+
+9.19 v49.1.2
+============
+
+11 Jul 2020
+
+* Menu:
+
+* Changes: Changes<11>.
+
+
+File: setuptools.info, Node: Changes<11>, Up: v49 1 2
+
+9.19.1 Changes
+--------------
+
+ * #2232(1): In preparation for re-enabling a local copy of distutils,
+ Setuptools now honors an environment variable,
+ SETUPTOOLS_USE_DISTUTILS. If set to ‘stdlib’ (current default),
+ distutils will be used from the standard library. If set to
+ ‘local’ (default in a imminent backward-incompatible release), the
+ local copy of distutils will be used.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2232
+
+
+File: setuptools.info, Node: v49 1 1, Next: v49 0 1, Prev: v49 1 2, Up: History<2>
+
+9.20 v49.1.1
+============
+
+10 Jul 2020
+
+* Menu:
+
+* Misc: Misc<9>.
+
+
+File: setuptools.info, Node: Misc<9>, Up: v49 1 1
+
+9.20.1 Misc
+-----------
+
+ * #2094(1): Removed pkg_resources.py2_warn module, which is no longer
+ reachable.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2094
+
+
+File: setuptools.info, Node: v49 0 1, Next: v49 1 0, Prev: v49 1 1, Up: History<2>
+
+9.21 v49.0.1
+============
+
+05 Jul 2020
+
+* Menu:
+
+* Misc: Misc<10>.
+
+
+File: setuptools.info, Node: Misc<10>, Up: v49 0 1
+
+9.21.1 Misc
+-----------
+
+ * #2228(1): Applied fix for pypa/distutils#3(2), restoring
+ expectation that spawn will raise a DistutilsExecError when
+ attempting to execute a missing file.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2228
+
+ (2) https://github.com/pypa/distutils/issues/3
+
+
+File: setuptools.info, Node: v49 1 0, Next: v49 0 0, Prev: v49 0 1, Up: History<2>
+
+9.22 v49.1.0
+============
+
+03 Jul 2020
+
+* Menu:
+
+* Changes: Changes<12>.
+
+
+File: setuptools.info, Node: Changes<12>, Up: v49 1 0
+
+9.22.1 Changes
+--------------
+
+ * #2228(1): Disabled distutils adoption for now while emergent issues
+ are addressed.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2228
+
+
+File: setuptools.info, Node: v49 0 0, Next: v48 0 0, Prev: v49 1 0, Up: History<2>
+
+9.23 v49.0.0
+============
+
+03 Jul 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<2>.
+* Changes: Changes<13>.
+* Misc: Misc<11>.
+
+
+File: setuptools.info, Node: Breaking Changes<2>, Next: Changes<13>, Up: v49 0 0
+
+9.23.1 Breaking Changes
+-----------------------
+
+ * #2165(1): Setuptools no longer installs a site.py file during
+ easy_install or develop installs. As a result, .eggs on PYTHONPATH
+ will no longer take precedence over other packages on sys.path. If
+ this issue affects your production environment, please reach out to
+ the maintainers at #2165(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2165
+
+ (2) https://github.com/pypa/setuptools/issues/2165
+
+
+File: setuptools.info, Node: Changes<13>, Next: Misc<11>, Prev: Breaking Changes<2>, Up: v49 0 0
+
+9.23.2 Changes
+--------------
+
+ * #2137(1): Removed (private) pkg_resources.RequirementParseError,
+ now replaced by packaging.requirements.InvalidRequirement. Kept
+ the name for compatibility, but users should catch
+ InvalidRequirement instead.
+
+ * #2180(2): Update vendored packaging in pkg_resources to 19.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2137
+
+ (2) https://github.com/pypa/setuptools/issues/2180
+
+
+File: setuptools.info, Node: Misc<11>, Prev: Changes<13>, Up: v49 0 0
+
+9.23.3 Misc
+-----------
+
+ * #2199(1): Fix exception causes all over the codebase by using
+ ‘raise new_exception from old_exception’
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2199
+
+
+File: setuptools.info, Node: v48 0 0, Next: v47 3 2, Prev: v49 0 0, Up: History<2>
+
+9.24 v48.0.0
+============
+
+03 Jul 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<3>.
+
+
+File: setuptools.info, Node: Breaking Changes<3>, Up: v48 0 0
+
+9.24.1 Breaking Changes
+-----------------------
+
+ * #2143(1): Setuptools adopts distutils from the Python 3.9 standard
+ library and no longer depends on distutils in the standard library.
+ When importing ‘setuptools’ or ‘setuptools.distutils_patch’,
+ Setuptools will expose its bundled version as a top-level
+ ‘distutils’ package (and unload any previously-imported top-level
+ distutils package), retaining the expectation that ‘distutils’’
+ objects are actually Setuptools objects. To avoid getting any
+ legacy behavior from the standard library, projects are advised to
+ always “import setuptools” prior to importing anything from
+ distutils. This behavior happens by default when using ‘pip
+ install’ or ‘pep517.build’. Workflows that rely on ‘setup.py
+ (anything)’ will need to first ensure setuptools is imported. One
+ way to achieve this behavior without modifying code is to invoke
+ Python thus: ‘python -c "import setuptools;
+ exec(open('setup.py').read())" (anything)’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2143
+
+
+File: setuptools.info, Node: v47 3 2, Next: v47 3 1, Prev: v48 0 0, Up: History<2>
+
+9.25 v47.3.2
+============
+
+03 Jul 2020
+
+* Menu:
+
+* Misc: Misc<12>.
+
+
+File: setuptools.info, Node: Misc<12>, Up: v47 3 2
+
+9.25.1 Misc
+-----------
+
+ * #2071(1): Replaced references to the deprecated imp package with
+ references to importlib
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2071
+
+
+File: setuptools.info, Node: v47 3 1, Next: v47 3 0, Prev: v47 3 2, Up: History<2>
+
+9.26 v47.3.1
+============
+
+16 Jun 2020
+
+* Menu:
+
+* Misc: Misc<13>.
+
+
+File: setuptools.info, Node: Misc<13>, Up: v47 3 1
+
+9.26.1 Misc
+-----------
+
+ * #1973(1): Removed ‘pkg_resources.py31compat.makedirs’ in favor of
+ the stdlib. Use ‘os.makedirs()’ instead.
+
+ * #2198(2): Restore ‘__requires__’ directive in easy-install wrapper
+ scripts.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1973
+
+ (2) https://github.com/pypa/setuptools/issues/2198
+
+
+File: setuptools.info, Node: v47 3 0, Next: v47 2 0, Prev: v47 3 1, Up: History<2>
+
+9.27 v47.3.0
+============
+
+15 Jun 2020
+
+* Menu:
+
+* Changes: Changes<14>.
+* Misc: Misc<14>.
+
+
+File: setuptools.info, Node: Changes<14>, Next: Misc<14>, Up: v47 3 0
+
+9.27.1 Changes
+--------------
+
+ * #2197(1): Console script wrapper for editable installs now has a
+ unified template and honors importlib_metadata if present for
+ faster script execution on older Pythons.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2197
+
+
+File: setuptools.info, Node: Misc<14>, Prev: Changes<14>, Up: v47 3 0
+
+9.27.2 Misc
+-----------
+
+ * #2195(1): Fix broken entry points generated by easy-install (pip
+ editable installs).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2195
+
+
+File: setuptools.info, Node: v47 2 0, Next: v47 1 1, Prev: v47 3 0, Up: History<2>
+
+9.28 v47.2.0
+============
+
+15 Jun 2020
+
+* Menu:
+
+* Changes: Changes<15>.
+
+
+File: setuptools.info, Node: Changes<15>, Up: v47 2 0
+
+9.28.1 Changes
+--------------
+
+ * #2194(1): Editable-installed entry points now load significantly
+ faster on Python versions 3.8+.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2194
+
+
+File: setuptools.info, Node: v47 1 1, Next: v44 1 1, Prev: v47 2 0, Up: History<2>
+
+9.29 v47.1.1
+============
+
+28 May 2020
+
+* Menu:
+
+* Documentation changes: Documentation changes<4>.
+* Incorporate changes from v44.1.1;: Incorporate changes from v44 1 1.
+
+
+File: setuptools.info, Node: Documentation changes<4>, Next: Incorporate changes from v44 1 1, Up: v47 1 1
+
+9.29.1 Documentation changes
+----------------------------
+
+ * #2156(1): Update mailing list pointer in developer docs
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2156
+
+
+File: setuptools.info, Node: Incorporate changes from v44 1 1, Prev: Documentation changes<4>, Up: v47 1 1
+
+9.29.2 Incorporate changes from v44.1.1:
+----------------------------------------
+
+ * #2158(1): Avoid loading working set during
+ ‘Distribution.finalize_options’ prior to invoking
+ ‘_install_setup_requires’, broken since v42.0.0.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2158
+
+
+File: setuptools.info, Node: v44 1 1, Next: v47 1 0, Prev: v47 1 1, Up: History<2>
+
+9.30 v44.1.1
+============
+
+28 May 2020
+
+* Menu:
+
+* Misc: Misc<15>.
+
+
+File: setuptools.info, Node: Misc<15>, Up: v44 1 1
+
+9.30.1 Misc
+-----------
+
+ * #2158(1): Avoid loading working set during
+ ‘Distribution.finalize_options’ prior to invoking
+ ‘_install_setup_requires’, broken since v42.0.0.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2158
+
+
+File: setuptools.info, Node: v47 1 0, Next: v47 0 0, Prev: v44 1 1, Up: History<2>
+
+9.31 v47.1.0
+============
+
+28 May 2020
+
+* Menu:
+
+* Changes: Changes<16>.
+
+
+File: setuptools.info, Node: Changes<16>, Up: v47 1 0
+
+9.31.1 Changes
+--------------
+
+ * #2070(1): In wheel-to-egg conversion, use simple
+ pkg_resources-style namespace declaration for packages that declare
+ namespace_packages.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2070
+
+
+File: setuptools.info, Node: v47 0 0, Next: v46 4 0, Prev: v47 1 0, Up: History<2>
+
+9.32 v47.0.0
+============
+
+28 May 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<4>.
+* Changes: Changes<17>.
+
+
+File: setuptools.info, Node: Breaking Changes<4>, Next: Changes<17>, Up: v47 0 0
+
+9.32.1 Breaking Changes
+-----------------------
+
+ * #2094(1): Setuptools now actively crashes under Python 2. Python
+ 3.5 or later is required. Users of Python 2 should use
+ ‘setuptools<45’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2094
+
+
+File: setuptools.info, Node: Changes<17>, Prev: Breaking Changes<4>, Up: v47 0 0
+
+9.32.2 Changes
+--------------
+
+ * #1700(1): Document all supported keywords by migrating the ones
+ from distutils.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1700
+
+
+File: setuptools.info, Node: v46 4 0, Next: v46 3 1, Prev: v47 0 0, Up: History<2>
+
+9.33 v46.4.0
+============
+
+16 May 2020
+
+* Menu:
+
+* Changes: Changes<18>.
+
+
+File: setuptools.info, Node: Changes<18>, Up: v46 4 0
+
+9.33.1 Changes
+--------------
+
+ * #1753(1): ‘attr:’ now extracts variables through rudimentary
+ examination of the AST, thereby supporting modules with third-party
+ imports. If examining the AST fails to find the variable, ‘attr:’
+ falls back to the old behavior of importing the module. Works on
+ Python 3 only.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1753
+
+
+File: setuptools.info, Node: v46 3 1, Next: v46 3 0, Prev: v46 4 0, Up: History<2>
+
+9.34 v46.3.1
+============
+
+15 May 2020
+
+No significant changes.
+
+
+File: setuptools.info, Node: v46 3 0, Next: v46 2 0, Prev: v46 3 1, Up: History<2>
+
+9.35 v46.3.0
+============
+
+13 May 2020
+
+* Menu:
+
+* Changes: Changes<19>.
+* Misc: Misc<16>.
+
+
+File: setuptools.info, Node: Changes<19>, Next: Misc<16>, Up: v46 3 0
+
+9.35.1 Changes
+--------------
+
+ * #2089(1): Package index functionality no longer attempts to remove
+ an md5 fragment from the index URL. This functionality, added for
+ distribute #163(2) is no longer relevant.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2089
+
+ (2) https://github.com/pypa/setuptools/issues/163
+
+
+File: setuptools.info, Node: Misc<16>, Prev: Changes<19>, Up: v46 3 0
+
+9.35.2 Misc
+-----------
+
+ * #2041(1): Preserve file modes during pkg files copying, but clear
+ read only flag for target afterwards.
+
+ * #2105(2): Filter ‘2to3’ deprecation warnings from
+ ‘TestDevelop.test_2to3_user_mode’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2041
+
+ (2) https://github.com/pypa/setuptools/issues/2105
+
+
+File: setuptools.info, Node: v46 2 0, Next: v46 1 3, Prev: v46 3 0, Up: History<2>
+
+9.36 v46.2.0
+============
+
+10 May 2020
+
+* Menu:
+
+* Changes: Changes<20>.
+* Documentation changes: Documentation changes<5>.
+* Misc: Misc<17>.
+
+
+File: setuptools.info, Node: Changes<20>, Next: Documentation changes<5>, Up: v46 2 0
+
+9.36.1 Changes
+--------------
+
+ * #2040(1): Deprecated the ‘bdist_wininst’ command. Binary packages
+ should be built as wheels instead.
+
+ * #2062(2): Change ‘Mac OS X’ to ‘macOS’ in code.
+
+ * #2075(3): Stop recognizing files ending with ‘.dist-info’ as
+ distribution metadata.
+
+ * #2086(4): Deprecate ‘use_2to3’ functionality. Packagers are
+ encouraged to use single-source solutions or build tool chains to
+ manage conversions outside of setuptools.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2040
+
+ (2) https://github.com/pypa/setuptools/issues/2062
+
+ (3) https://github.com/pypa/setuptools/issues/2075
+
+ (4) https://github.com/pypa/setuptools/issues/2086
+
+
+File: setuptools.info, Node: Documentation changes<5>, Next: Misc<17>, Prev: Changes<20>, Up: v46 2 0
+
+9.36.2 Documentation changes
+----------------------------
+
+ * #1698(1): Added documentation for ‘build_meta’ (a bare minimum, not
+ completed).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1698
+
+
+File: setuptools.info, Node: Misc<17>, Prev: Documentation changes<5>, Up: v46 2 0
+
+9.36.3 Misc
+-----------
+
+ * #2082(1): Filter ‘lib2to3’ ‘PendingDeprecationWarning’ and
+ ‘DeprecationWarning’ in tests, because ‘lib2to3’ is deprecated in
+ Python 3.9(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2082
+
+ (2) https://bugs.python.org/issue40360
+
+
+File: setuptools.info, Node: v46 1 3, Next: v46 1 2, Prev: v46 2 0, Up: History<2>
+
+9.37 v46.1.3
+============
+
+25 Mar 2020
+
+No significant changes.
+
+
+File: setuptools.info, Node: v46 1 2, Next: v46 1 1, Prev: v46 1 3, Up: History<2>
+
+9.38 v46.1.2
+============
+
+25 Mar 2020
+
+* Menu:
+
+* Misc: Misc<18>.
+
+
+File: setuptools.info, Node: Misc<18>, Up: v46 1 2
+
+9.38.1 Misc
+-----------
+
+ * #1458(1): Added template for reporting Python 2 incompatibilities.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1458
+
+
+File: setuptools.info, Node: v46 1 1, Next: v46 1 0, Prev: v46 1 2, Up: History<2>
+
+9.39 v46.1.1
+============
+
+21 Mar 2020
+
+No significant changes.
+
+
+File: setuptools.info, Node: v46 1 0, Next: v44 1 0, Prev: v46 1 1, Up: History<2>
+
+9.40 v46.1.0
+============
+
+21 Mar 2020
+
+* Menu:
+
+* Changes: Changes<21>.
+* Incorporate changes from v44.1.0;: Incorporate changes from v44 1 0.
+
+
+File: setuptools.info, Node: Changes<21>, Next: Incorporate changes from v44 1 0, Up: v46 1 0
+
+9.40.1 Changes
+--------------
+
+ * #308(1): Allow version number normalization to be bypassed by
+ wrapping in a ‘setuptools.sic()’ call.
+
+ * #1424(2): Prevent keeping files mode for package_data build. It
+ may break a build if user’s package data has read only flag.
+
+ * #1431(3): In ‘easy_install.check_site_dir’, ensure the installation
+ directory exists.
+
+ * #1563(4): In ‘pkg_resources’ prefer ‘find_spec’ (PEP 451(5)) to
+ ‘find_module’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/308
+
+ (2) https://github.com/pypa/setuptools/issues/1424
+
+ (3) https://github.com/pypa/setuptools/issues/1431
+
+ (4) https://github.com/pypa/setuptools/issues/1563
+
+ (5) https://www.python.org/dev/peps/pep-0451/
+
+
+File: setuptools.info, Node: Incorporate changes from v44 1 0, Prev: Changes<21>, Up: v46 1 0
+
+9.40.2 Incorporate changes from v44.1.0:
+----------------------------------------
+
+ * #1704(1): Set sys.argv[0] in setup script run by
+ build_meta.__legacy__
+
+ * #1959(2): Fix for Python 4: replace unsafe six.PY3 with six.PY2
+
+ * #1994(3): Fixed a bug in the
+ “setuptools.finalize_distribution_options” hook that lead to
+ ignoring the order attribute of entry points managed by this hook.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1704
+
+ (2) https://github.com/pypa/setuptools/issues/1959
+
+ (3) https://github.com/pypa/setuptools/issues/1994
+
+
+File: setuptools.info, Node: v44 1 0, Next: v46 0 0, Prev: v46 1 0, Up: History<2>
+
+9.41 v44.1.0
+============
+
+21 Mar 2020
+
+* Menu:
+
+* Changes: Changes<22>.
+
+
+File: setuptools.info, Node: Changes<22>, Up: v44 1 0
+
+9.41.1 Changes
+--------------
+
+ * #1704(1): Set sys.argv[0] in setup script run by
+ build_meta.__legacy__
+
+ * #1959(2): Fix for Python 4: replace unsafe six.PY3 with six.PY2
+
+ * #1994(3): Fixed a bug in the
+ “setuptools.finalize_distribution_options” hook that lead to
+ ignoring the order attribute of entry points managed by this hook.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1704
+
+ (2) https://github.com/pypa/setuptools/issues/1959
+
+ (3) https://github.com/pypa/setuptools/issues/1994
+
+
+File: setuptools.info, Node: v46 0 0, Next: v45 3 0, Prev: v44 1 0, Up: History<2>
+
+9.42 v46.0.0
+============
+
+08 Mar 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<5>.
+* Changes: Changes<23>.
+* Documentation changes: Documentation changes<6>.
+* Misc: Misc<19>.
+
+
+File: setuptools.info, Node: Breaking Changes<5>, Next: Changes<23>, Up: v46 0 0
+
+9.42.1 Breaking Changes
+-----------------------
+
+ * #65(1): Once again as in 3.0, removed the Features feature.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/65
+
+
+File: setuptools.info, Node: Changes<23>, Next: Documentation changes<6>, Prev: Breaking Changes<5>, Up: v46 0 0
+
+9.42.2 Changes
+--------------
+
+ * #1890(1): Fix vendored dependencies so importing
+ ‘setuptools.extern.some_module’ gives the same object as
+ ‘setuptools._vendor.some_module’. This makes Metadata picklable
+ again.
+
+ * #1899(2): Test suite now fails on warnings.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1890
+
+ (2) https://github.com/pypa/setuptools/issues/1899
+
+
+File: setuptools.info, Node: Documentation changes<6>, Next: Misc<19>, Prev: Changes<23>, Up: v46 0 0
+
+9.42.3 Documentation changes
+----------------------------
+
+ * #2011(1): Fix broken link to distutils docs on package_data
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/2011
+
+
+File: setuptools.info, Node: Misc<19>, Prev: Documentation changes<6>, Up: v46 0 0
+
+9.42.4 Misc
+-----------
+
+ * #1991(1): Include pkg_resources test data in sdist, so tests can be
+ executed from it.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1991
+
+
+File: setuptools.info, Node: v45 3 0, Next: v45 2 0, Prev: v46 0 0, Up: History<2>
+
+9.43 v45.3.0
+============
+
+07 Mar 2020
+
+* Menu:
+
+* Changes: Changes<24>.
+
+
+File: setuptools.info, Node: Changes<24>, Up: v45 3 0
+
+9.43.1 Changes
+--------------
+
+ * #1557(1): Deprecated eggsecutable scripts and updated docs.
+
+ * #1904(2): Update msvc.py to use CPython 3.8.0 mechanism to find
+ msvc 14+
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1557
+
+ (2) https://github.com/pypa/setuptools/issues/1904
+
+
+File: setuptools.info, Node: v45 2 0, Next: v45 1 0, Prev: v45 3 0, Up: History<2>
+
+9.44 v45.2.0
+============
+
+08 Feb 2020
+
+* Menu:
+
+* Changes: Changes<25>.
+* Misc: Misc<20>.
+
+
+File: setuptools.info, Node: Changes<25>, Next: Misc<20>, Up: v45 2 0
+
+9.44.1 Changes
+--------------
+
+ * #1905(1): Fixed defect in _imp, introduced in 41.6.0 when the
+ ‘tests’ directory is not present.
+
+ * #1941(2): Improve editable installs with PEP 518(3) build
+ isolation:
+
+ * The ‘--user’ option is now always available. A warning is
+ issued if the user site directory is not available.
+
+ * The error shown when the install directory is not in
+ ‘PYTHONPATH’ has been turned into a warning.
+
+ * #1981(4): Setuptools now declares its ‘tests’ and ‘docs’
+ dependencies in metadata (extras).
+
+ * #1985(5): Add support for installing scripts in environments where
+ bdist_wininst is missing (i.e. Python 3.9).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1905
+
+ (2) https://github.com/pypa/setuptools/issues/1941
+
+ (3) https://www.python.org/dev/peps/pep-0518/
+
+ (4) https://github.com/pypa/setuptools/issues/1981
+
+ (5) https://github.com/pypa/setuptools/issues/1985
+
+
+File: setuptools.info, Node: Misc<20>, Prev: Changes<25>, Up: v45 2 0
+
+9.44.2 Misc
+-----------
+
+ * #1968(1): Add flake8-2020 to check for misuse of sys.version or
+ sys.version_info.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1968
+
+
+File: setuptools.info, Node: v45 1 0, Next: v45 0 0, Prev: v45 2 0, Up: History<2>
+
+9.45 v45.1.0
+============
+
+19 Jan 2020
+
+* Menu:
+
+* Changes: Changes<26>.
+
+
+File: setuptools.info, Node: Changes<26>, Up: v45 1 0
+
+9.45.1 Changes
+--------------
+
+ * #1458(1): Add minimum sunset date and preamble to Python 2 warning.
+
+ * #1704(2): Set sys.argv[0] in setup script run by
+ build_meta.__legacy__
+
+ * #1974(3): Add Python 3 Only Trove Classifier and remove universal
+ wheel declaration for more complete transition from Python 2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1458
+
+ (2) https://github.com/pypa/setuptools/issues/1704
+
+ (3) https://github.com/pypa/setuptools/issues/1974
+
+
+File: setuptools.info, Node: v45 0 0, Next: v44 0 0, Prev: v45 1 0, Up: History<2>
+
+9.46 v45.0.0
+============
+
+11 Jan 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<6>.
+* Changes: Changes<27>.
+
+
+File: setuptools.info, Node: Breaking Changes<6>, Next: Changes<27>, Up: v45 0 0
+
+9.46.1 Breaking Changes
+-----------------------
+
+ * #1458(1): Drop support for Python 2. Setuptools now requires
+ Python 3.5 or later. Install setuptools using pip >=9 or pin to
+ Setuptools <45 to maintain 2.7 support.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1458
+
+
+File: setuptools.info, Node: Changes<27>, Prev: Breaking Changes<6>, Up: v45 0 0
+
+9.46.2 Changes
+--------------
+
+ * #1959(1): Fix for Python 4: replace unsafe six.PY3 with six.PY2
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1959
+
+
+File: setuptools.info, Node: v44 0 0, Next: v43 0 0, Prev: v45 0 0, Up: History<2>
+
+9.47 v44.0.0
+============
+
+01 Jan 2020
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<7>.
+
+
+File: setuptools.info, Node: Breaking Changes<7>, Up: v44 0 0
+
+9.47.1 Breaking Changes
+-----------------------
+
+ * #1908(1): Drop support for Python 3.4.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1908
+
+
+File: setuptools.info, Node: v43 0 0, Next: v42 0 2, Prev: v44 0 0, Up: History<2>
+
+9.48 v43.0.0
+============
+
+31 Dec 2019
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<8>.
+* Changes: Changes<28>.
+
+
+File: setuptools.info, Node: Breaking Changes<8>, Next: Changes<28>, Up: v43 0 0
+
+9.48.1 Breaking Changes
+-----------------------
+
+ * #1634(1): Include ‘pyproject.toml’ in source distribution by
+ default. Projects relying on the previous behavior where
+ ‘pyproject.toml’ was excluded by default should stop relying on
+ that behavior or add ‘exclude pyproject.toml’ to their MANIFEST.in
+ file.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1634
+
+
+File: setuptools.info, Node: Changes<28>, Prev: Breaking Changes<8>, Up: v43 0 0
+
+9.48.2 Changes
+--------------
+
+ * #1927(1): Setuptools once again declares ‘setuptools’ in the
+ ‘build-system.requires’ and adds PEP 517(2) build support by
+ declaring itself as the ‘build-backend’. It additionally specifies
+ ‘build-system.backend-path’ to rely on itself for those builders
+ that support it.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1927
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: v42 0 2, Next: v42 0 1, Prev: v43 0 0, Up: History<2>
+
+9.49 v42.0.2
+============
+
+01 Dec 2019
+
+* Menu:
+
+* Changes: Changes<29>.
+
+
+File: setuptools.info, Node: Changes<29>, Up: v42 0 2
+
+9.49.1 Changes
+--------------
+
+ * #1921(1): Fix support for easy_install’s ‘find-links’ option in
+ ‘setup.cfg’.
+
+ * #1922(2): Build dependencies (setup_requires and tests_require) now
+ install transitive dependencies indicated by extras.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1921
+
+ (2) https://github.com/pypa/setuptools/issues/1922
+
+
+File: setuptools.info, Node: v42 0 1, Next: v42 0 0, Prev: v42 0 2, Up: History<2>
+
+9.50 v42.0.1
+============
+
+25 Nov 2019
+
+* Menu:
+
+* Changes: Changes<30>.
+
+
+File: setuptools.info, Node: Changes<30>, Up: v42 0 1
+
+9.50.1 Changes
+--------------
+
+ * #1918(1): Fix regression in handling wheels compatibility tags.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1918
+
+
+File: setuptools.info, Node: v42 0 0, Next: v41 6 0, Prev: v42 0 1, Up: History<2>
+
+9.51 v42.0.0
+============
+
+23 Nov 2019
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<9>.
+* Changes: Changes<31>.
+
+
+File: setuptools.info, Node: Breaking Changes<9>, Next: Changes<31>, Up: v42 0 0
+
+9.51.1 Breaking Changes
+-----------------------
+
+ *
+ #1830(1), #1909(2): Mark the easy_install script and setuptools command as deprecated, and use pip(3) when available to fetch/build wheels for missing ‘setup_requires’/‘tests_require’ requirements, with the following differences in behavior:
+
+ * support for ‘python_requires’
+
+ * better support for wheels (proper handling of priority
+ with respect to PEP 425(4) tags)
+
+ * PEP 517(5)/518 support
+
+ * eggs are not supported
+
+ * no support for the ‘allow_hosts’ easy_install option
+ (‘index_url’/‘find_links’ are still honored)
+
+ * pip environment variables are honored (and take
+ precedence over easy_install options)
+
+ * #1898(6): Removed the “upload” and “register” commands in favor of
+ twine(7).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1830
+
+ (2) https://github.com/pypa/setuptools/issues/1909
+
+ (3) https://pip.pypa.io/en/stable/
+
+ (4) https://www.python.org/dev/peps/pep-0425/
+
+ (5) https://www.python.org/dev/peps/pep-0517/
+
+ (6) https://github.com/pypa/setuptools/issues/1898
+
+ (7) https://pypi.org/p/twine
+
+
+File: setuptools.info, Node: Changes<31>, Prev: Breaking Changes<9>, Up: v42 0 0
+
+9.51.2 Changes
+--------------
+
+ * #1767(1): Add support for the ‘license_files’ option in ‘setup.cfg’
+ to automatically include multiple license files in a source
+ distribution.
+
+ * #1829(2): Update handling of wheels compatibility tags: * add
+ support for manylinux2010 * fix use of removed ‘m’ ABI flag in
+ Python 3.8 on Windows
+
+ * #1861(3): Fix empty namespace package installation from wheel.
+
+ * #1877(4): Setuptools now exposes a new entry point hook
+ “setuptools.finalize_distribution_options”, enabling plugins like
+ setuptools_scm(5) to configure options on the distribution at
+ finalization time.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1767
+
+ (2) https://github.com/pypa/setuptools/issues/1829
+
+ (3) https://github.com/pypa/setuptools/issues/1861
+
+ (4) https://github.com/pypa/setuptools/issues/1877
+
+ (5) https://pypi.org/project/setuptools_scm
+
+
+File: setuptools.info, Node: v41 6 0, Next: v41 5 1, Prev: v42 0 0, Up: History<2>
+
+9.52 v41.6.0
+============
+
+29 Oct 2019
+
+* Menu:
+
+* Changes: Changes<32>.
+
+
+File: setuptools.info, Node: Changes<32>, Up: v41 6 0
+
+9.52.1 Changes
+--------------
+
+ * #479(1): Replace usage of deprecated ‘imp’ module with local
+ re-implementation in ‘setuptools._imp’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/479
+
+
+File: setuptools.info, Node: v41 5 1, Next: v41 5 0, Prev: v41 6 0, Up: History<2>
+
+9.53 v41.5.1
+============
+
+28 Oct 2019
+
+* Menu:
+
+* Changes: Changes<33>.
+
+
+File: setuptools.info, Node: Changes<33>, Up: v41 5 1
+
+9.53.1 Changes
+--------------
+
+ * #1891(1): Fix code for detecting Visual Studio’s version on Windows
+ under Python 2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1891
+
+
+File: setuptools.info, Node: v41 5 0, Next: v41 4 0, Prev: v41 5 1, Up: History<2>
+
+9.54 v41.5.0
+============
+
+27 Oct 2019
+
+* Menu:
+
+* Changes: Changes<34>.
+* Documentation changes: Documentation changes<7>.
+* Misc: Misc<21>.
+
+
+File: setuptools.info, Node: Changes<34>, Next: Documentation changes<7>, Up: v41 5 0
+
+9.54.1 Changes
+--------------
+
+ * #1811(1): Improve Visual C++ 14.X support, mainly for Visual Studio
+ 2017 and 2019.
+
+ * #1814(2): Fix ‘pkg_resources.Requirement’ hash/equality
+ implementation: take PEP 508(3) direct URL into account.
+
+ * #1824(4): Fix tests when running under ‘python3.10’.
+
+ * #1878(5): Formally deprecated the ‘test’ command, with the
+ recommendation that users migrate to ‘tox’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1811
+
+ (2) https://github.com/pypa/setuptools/issues/1814
+
+ (3) https://www.python.org/dev/peps/pep-0508/
+
+ (4) https://github.com/pypa/setuptools/issues/1824
+
+ (5) https://github.com/pypa/setuptools/issues/1878
+
+
+File: setuptools.info, Node: Documentation changes<7>, Next: Misc<21>, Prev: Changes<34>, Up: v41 5 0
+
+9.54.2 Documentation changes
+----------------------------
+
+ * #1860(1): Update documentation to mention the egg format is not
+ supported by pip and dependency links support was dropped starting
+ with pip 19.0.
+
+ * #1862(2): Drop ez_setup documentation: deprecated for some time
+ (last updated in 2016), and still relying on easy_install
+ (deprecated too).
+
+ * #1868(3): Drop most documentation references to (deprecated)
+ EasyInstall.
+
+ * #1884(4): Added a trove classifier to document support for Python
+ 3.8.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1860
+
+ (2) https://github.com/pypa/setuptools/issues/1862
+
+ (3) https://github.com/pypa/setuptools/issues/1868
+
+ (4) https://github.com/pypa/setuptools/issues/1884
+
+
+File: setuptools.info, Node: Misc<21>, Prev: Documentation changes<7>, Up: v41 5 0
+
+9.54.3 Misc
+-----------
+
+ * #1886(1): Added Python 3.8 release to the Travis test matrix.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1886
+
+
+File: setuptools.info, Node: v41 4 0, Next: v41 3 0, Prev: v41 5 0, Up: History<2>
+
+9.55 v41.4.0
+============
+
+06 Oct 2019
+
+* Menu:
+
+* Changes: Changes<35>.
+
+
+File: setuptools.info, Node: Changes<35>, Up: v41 4 0
+
+9.55.1 Changes
+--------------
+
+ * #1847(1): In declarative config, now traps errors when invalid
+ ‘python_requires’ values are supplied.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1847
+
+
+File: setuptools.info, Node: v41 3 0, Next: v41 2 0, Prev: v41 4 0, Up: History<2>
+
+9.56 v41.3.0
+============
+
+06 Oct 2019
+
+* Menu:
+
+* Changes: Changes<36>.
+* Misc: Misc<22>.
+
+
+File: setuptools.info, Node: Changes<36>, Next: Misc<22>, Up: v41 3 0
+
+9.56.1 Changes
+--------------
+
+ * #1690(1): When storing extras, rely on OrderedSet to retain order
+ of extras as indicated by the packager, which will also be
+ deterministic on Python 2.7 (with PYTHONHASHSEED unset) and Python
+ 3.6+.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1690
+
+
+File: setuptools.info, Node: Misc<22>, Prev: Changes<36>, Up: v41 3 0
+
+9.56.2 Misc
+-----------
+
+ * #1858(1): Fixed failing integration test triggered by
+ ‘long_description_content_type’ in packaging.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1858
+
+
+File: setuptools.info, Node: v41 2 0, Next: v41 1 0, Prev: v41 3 0, Up: History<2>
+
+9.57 v41.2.0
+============
+
+21 Aug 2019
+
+* Menu:
+
+* Changes: Changes<37>.
+* Misc: Misc<23>.
+
+
+File: setuptools.info, Node: Changes<37>, Next: Misc<23>, Up: v41 2 0
+
+9.57.1 Changes
+--------------
+
+ * #479(1): Remove some usage of the deprecated ‘imp’ module.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/479
+
+
+File: setuptools.info, Node: Misc<23>, Prev: Changes<37>, Up: v41 2 0
+
+9.57.2 Misc
+-----------
+
+ * #1565(1): Changed html_sidebars from string to list of string as
+ per ‘https://www.sphinx-doc.org/en/master/changes.html#id58’
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1565
+
+
+File: setuptools.info, Node: v41 1 0, Next: v41 0 1, Prev: v41 2 0, Up: History<2>
+
+9.58 v41.1.0
+============
+
+13 Aug 2019
+
+* Menu:
+
+* Misc: Misc<24>.
+* Documentation changes: Documentation changes<8>.
+
+
+File: setuptools.info, Node: Misc<24>, Next: Documentation changes<8>, Up: v41 1 0
+
+9.58.1 Misc
+-----------
+
+ * #1697(1): Moved most of the constants from setup.py to setup.cfg
+
+ * #1749(2): Fixed issue with the PEP 517(3) backend where building a
+ source distribution would fail if any tarball existed in the
+ destination directory.
+
+ * #1750(4): Fixed an issue with PEP 517(5) backend where wheel builds
+ would fail if the destination directory did not already exist.
+
+ * #1756(6): Force metadata-version >= 1.2. when project urls are
+ present.
+
+ * #1769(7): Improve ‘package_data’ check: ensure the dictionary
+ values are lists/tuples of strings.
+
+ * #1788(8): Changed compatibility fallback logic for ‘html.unescape’
+ to avoid accessing ‘HTMLParser.unescape’ when not necessary.
+ ‘HTMLParser.unescape’ is deprecated and will be removed in Python
+ 3.9.
+
+ * #1790(9): Added the file path to the error message when a
+ ‘UnicodeDecodeError’ occurs while reading a metadata file.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1697
+
+ (2) https://github.com/pypa/setuptools/issues/1749
+
+ (3) https://www.python.org/dev/peps/pep-0517/
+
+ (4) https://github.com/pypa/setuptools/issues/1750
+
+ (5) https://www.python.org/dev/peps/pep-0517/
+
+ (6) https://github.com/pypa/setuptools/issues/1756
+
+ (7) https://github.com/pypa/setuptools/issues/1769
+
+ (8) https://github.com/pypa/setuptools/issues/1788
+
+ (9) https://github.com/pypa/setuptools/issues/1790
+
+
+File: setuptools.info, Node: Documentation changes<8>, Prev: Misc<24>, Up: v41 1 0
+
+9.58.2 Documentation changes
+----------------------------
+
+ * #1776(1): Use license classifiers rather than the license field.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1776
+
+
+File: setuptools.info, Node: v41 0 1, Next: v41 0 0, Prev: v41 1 0, Up: History<2>
+
+9.59 v41.0.1
+============
+
+22 Apr 2019
+
+* Menu:
+
+* Changes: Changes<38>.
+
+
+File: setuptools.info, Node: Changes<38>, Up: v41 0 1
+
+9.59.1 Changes
+--------------
+
+ * #1671(1): Fixed issue with the PEP 517(2) backend that prevented
+ building a wheel when the ‘dist/’ directory contained existing
+ ‘.whl’ files.
+
+ * #1709(3): In test.paths_on_python_path, avoid adding unnecessary
+ duplicates to the PYTHONPATH.
+
+ * #1741(4): In package_index, now honor “current directory” during a
+ checkout of git and hg repositories under Windows
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1671
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+ (3) https://github.com/pypa/setuptools/issues/1709
+
+ (4) https://github.com/pypa/setuptools/issues/1741
+
+
+File: setuptools.info, Node: v41 0 0, Next: v40 9 0, Prev: v41 0 1, Up: History<2>
+
+9.60 v41.0.0
+============
+
+05 Apr 2019
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<10>.
+
+
+File: setuptools.info, Node: Breaking Changes<10>, Up: v41 0 0
+
+9.60.1 Breaking Changes
+-----------------------
+
+ * #1735(1): When parsing setup.cfg files, setuptools now requires the
+ files to be encoded as UTF-8. Any other encoding will lead to a
+ UnicodeDecodeError. This change removes support for specifying an
+ encoding using a ‘coding: ‘ directive in the header of the file, a
+ feature that was introduces in 40.7. Given the recent release of
+ the aforementioned feature, it is assumed that few if any projects
+ are utilizing the feature to specify an encoding other than UTF-8.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1735
+
+
+File: setuptools.info, Node: v40 9 0, Next: v40 8 0, Prev: v41 0 0, Up: History<2>
+
+9.61 v40.9.0
+============
+
+03 Apr 2019
+
+* Menu:
+
+* Changes: Changes<39>.
+* Documentation changes: Documentation changes<9>.
+
+
+File: setuptools.info, Node: Changes<39>, Next: Documentation changes<9>, Up: v40 9 0
+
+9.61.1 Changes
+--------------
+
+ * #1675(1): Added support for ‘setup.cfg’-only projects when using
+ the ‘setuptools.build_meta’ backend. Projects that have enabled
+ PEP 517(2) no longer need to have a ‘setup.py’ and can use the
+ purely declarative ‘setup.cfg’ configuration file instead.
+
+ * #1720(3): Added support for
+ ‘pkg_resources.parse_requirements’-style requirements in
+ ‘setup_requires’ when ‘setup.py’ is invoked from the
+ ‘setuptools.build_meta’ build backend.
+
+ * #1664(4): Added the path to the ‘PKG-INFO’ or ‘METADATA’ file in
+ the exception text when the ‘Version:’ header can’t be found.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1675
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+ (3) https://github.com/pypa/setuptools/issues/1720
+
+ (4) https://github.com/pypa/setuptools/issues/1664
+
+
+File: setuptools.info, Node: Documentation changes<9>, Prev: Changes<39>, Up: v40 9 0
+
+9.61.2 Documentation changes
+----------------------------
+
+ * #1705(1): Removed some placeholder documentation sections referring
+ to deprecated features.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1705
+
+
+File: setuptools.info, Node: v40 8 0, Next: v40 7 3, Prev: v40 9 0, Up: History<2>
+
+9.62 v40.8.0
+============
+
+05 Feb 2019
+
+* Menu:
+
+* Changes: Changes<40>.
+
+
+File: setuptools.info, Node: Changes<40>, Up: v40 8 0
+
+9.62.1 Changes
+--------------
+
+ * #1652(1): Added the ‘build_meta:__legacy__’ backend, a
+ “compatibility mode” PEP 517(2) backend that can be used as the
+ default when ‘build-backend’ is left unspecified in
+ ‘pyproject.toml’.
+
+ * #1635(3): Resource paths are passed to
+ ‘pkg_resources.resource_string’ and similar no longer accept paths
+ that traverse parents, that begin with a leading ‘/’. Violations
+ of this expectation raise DeprecationWarnings and will become
+ errors. Additionally, any paths that are absolute on Windows are
+ strictly disallowed and will raise ValueErrors.
+
+ * #1536(4): ‘setuptools’ will now automatically include licenses if
+ ‘setup.cfg’ contains a ‘license_file’ attribute, unless this file
+ is manually excluded inside ‘MANIFEST.in’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1652
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+ (3) https://github.com/pypa/setuptools/issues/1635
+
+ (4) https://github.com/pypa/setuptools/issues/1536
+
+
+File: setuptools.info, Node: v40 7 3, Next: v40 7 2, Prev: v40 8 0, Up: History<2>
+
+9.63 v40.7.3
+============
+
+03 Feb 2019
+
+* Menu:
+
+* Changes: Changes<41>.
+
+
+File: setuptools.info, Node: Changes<41>, Up: v40 7 3
+
+9.63.1 Changes
+--------------
+
+ * #1670(1): In package_index, revert to using a copy of splituser
+ from Python 3.8. Attempts to use ‘urllib.parse.urlparse’ led to
+ problems as reported in #1663(2) and #1668(3). This change serves
+ as an alternative to #1499(4) and fixes #1668(5).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1670
+
+ (2) https://github.com/pypa/setuptools/issues/1663
+
+ (3) https://github.com/pypa/setuptools/issues/1668
+
+ (4) https://github.com/pypa/setuptools/issues/1499
+
+ (5) https://github.com/pypa/setuptools/issues/1668
+
+
+File: setuptools.info, Node: v40 7 2, Next: v40 7 1, Prev: v40 7 3, Up: History<2>
+
+9.64 v40.7.2
+============
+
+31 Jan 2019
+
+* Menu:
+
+* Changes: Changes<42>.
+
+
+File: setuptools.info, Node: Changes<42>, Up: v40 7 2
+
+9.64.1 Changes
+--------------
+
+ * #1666(1): Restore port in URL handling in package_index.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1666
+
+
+File: setuptools.info, Node: v40 7 1, Next: v40 7 0, Prev: v40 7 2, Up: History<2>
+
+9.65 v40.7.1
+============
+
+28 Jan 2019
+
+* Menu:
+
+* Changes: Changes<43>.
+
+
+File: setuptools.info, Node: Changes<43>, Up: v40 7 1
+
+9.65.1 Changes
+--------------
+
+ * #1660(1): On Python 2, when reading config files, downcast options
+ from text to bytes to satisfy distutils expectations.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1660
+
+
+File: setuptools.info, Node: v40 7 0, Next: v40 6 3, Prev: v40 7 1, Up: History<2>
+
+9.66 v40.7.0
+============
+
+27 Jan 2019
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<11>.
+* Changes: Changes<44>.
+
+
+File: setuptools.info, Node: Breaking Changes<11>, Next: Changes<44>, Up: v40 7 0
+
+9.66.1 Breaking Changes
+-----------------------
+
+ * #1551(1): File inputs for the ‘license’ field in ‘setup.cfg’ files
+ now explicitly raise an error.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1551
+
+
+File: setuptools.info, Node: Changes<44>, Prev: Breaking Changes<11>, Up: v40 7 0
+
+9.66.2 Changes
+--------------
+
+ * #1180(1): Add support for non-ASCII in setup.cfg (#1062(2)). Add
+ support for native strings on some parameters (#1136(3)).
+
+ * #1499(4): ‘setuptools.package_index’ no longer relies on the
+ deprecated ‘urllib.parse.splituser’ per Python #27485(5).
+
+ * #1544(6): Added tests for PackageIndex.download (for git URLs).
+
+ * #1625(7): In PEP 517(8) build_meta builder, ensure that sdists are
+ built as gztar per the spec.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1180
+
+ (2) https://github.com/pypa/setuptools/issues/1062
+
+ (3) https://github.com/pypa/setuptools/issues/1136
+
+ (4) https://github.com/pypa/setuptools/issues/1499
+
+ (5) http://bugs.python.org/issue27485
+
+ (6) https://github.com/pypa/setuptools/issues/1544
+
+ (7) https://github.com/pypa/setuptools/issues/1625
+
+ (8) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: v40 6 3, Next: v40 6 2, Prev: v40 7 0, Up: History<2>
+
+9.67 v40.6.3
+============
+
+11 Dec 2018
+
+* Menu:
+
+* Changes: Changes<45>.
+
+
+File: setuptools.info, Node: Changes<45>, Up: v40 6 3
+
+9.67.1 Changes
+--------------
+
+ * #1594(1): PEP 517(2) backend no longer declares setuptools as a
+ dependency as it can be assumed.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1594
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: v40 6 2, Next: v40 6 1, Prev: v40 6 3, Up: History<2>
+
+9.68 v40.6.2
+============
+
+13 Nov 2018
+
+* Menu:
+
+* Changes: Changes<46>.
+
+
+File: setuptools.info, Node: Changes<46>, Up: v40 6 2
+
+9.68.1 Changes
+--------------
+
+ * #1592(1): Fix invalid dependency on external six module (instead of
+ vendored version).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1592
+
+
+File: setuptools.info, Node: v40 6 1, Next: v40 6 0, Prev: v40 6 2, Up: History<2>
+
+9.69 v40.6.1
+============
+
+12 Nov 2018
+
+* Menu:
+
+* Changes: Changes<47>.
+
+
+File: setuptools.info, Node: Changes<47>, Up: v40 6 1
+
+9.69.1 Changes
+--------------
+
+ * #1590(1): Fixed regression where packages without ‘author’ or
+ ‘author_email’ fields generated malformed package metadata.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1590
+
+
+File: setuptools.info, Node: v40 6 0, Next: v40 5 0, Prev: v40 6 1, Up: History<2>
+
+9.70 v40.6.0
+============
+
+12 Nov 2018
+
+* Menu:
+
+* Deprecations::
+* Changes: Changes<48>.
+* Documentation changes: Documentation changes<10>.
+* Misc: Misc<25>.
+
+
+File: setuptools.info, Node: Deprecations, Next: Changes<48>, Up: v40 6 0
+
+9.70.1 Deprecations
+-------------------
+
+ * #1541(1): Officially deprecated the ‘requires’ parameter in
+ ‘setup()’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1541
+
+
+File: setuptools.info, Node: Changes<48>, Next: Documentation changes<10>, Prev: Deprecations, Up: v40 6 0
+
+9.70.2 Changes
+--------------
+
+ * #1519(1): In ‘pkg_resources.normalize_path’, additional path
+ normalization is now performed to ensure path values to a directory
+ is always the same, preventing false positives when checking
+ scripts have a consistent prefix to set up on Windows.
+
+ * #1545(2): Changed the warning class of all deprecation warnings;
+ deprecation warning classes are no longer derived from
+ ‘DeprecationWarning’ and are thus visible by default.
+
+ * #1554(3): ‘build_meta.build_sdist’ now includes ‘setup.py’ in
+ source distributions by default.
+
+ * #1576(4): Started monkey-patching ‘get_metadata_version’ and
+ ‘read_pkg_file’ onto ‘distutils.DistributionMetadata’ to retain the
+ correct version on the ‘PKG-INFO’ file in the (deprecated) ‘upload’
+ command.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1519
+
+ (2) https://github.com/pypa/setuptools/issues/1545
+
+ (3) https://github.com/pypa/setuptools/issues/1554
+
+ (4) https://github.com/pypa/setuptools/issues/1576
+
+
+File: setuptools.info, Node: Documentation changes<10>, Next: Misc<25>, Prev: Changes<48>, Up: v40 6 0
+
+9.70.3 Documentation changes
+----------------------------
+
+ * #1395(1): Changed Pyrex references to Cython in the documentation.
+
+ * #1456(2): Documented that the ‘rpmbuild’ packages is required for
+ the ‘bdist_rpm’ command.
+
+ * #1537(3): Documented how to use ‘setup.cfg’ for ‘src/ layouts’
+
+ * #1539(4): Added minimum version column in ‘setup.cfg’ metadata
+ table.
+
+ * #1552(5): Fixed a minor typo in the python 2/3 compatibility
+ documentation.
+
+ * #1553(6): Updated installation instructions to point to ‘pip
+ install’ instead of ‘ez_setup.py’.
+
+ * #1560(7): Updated ‘setuptools’ distribution documentation to remove
+ some outdated information.
+
+ * #1564(8): Documented ‘setup.cfg’ minimum version for version and
+ project_urls.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1395
+
+ (2) https://github.com/pypa/setuptools/issues/1456
+
+ (3) https://github.com/pypa/setuptools/issues/1537
+
+ (4) https://github.com/pypa/setuptools/issues/1539
+
+ (5) https://github.com/pypa/setuptools/issues/1552
+
+ (6) https://github.com/pypa/setuptools/issues/1553
+
+ (7) https://github.com/pypa/setuptools/issues/1560
+
+ (8) https://github.com/pypa/setuptools/issues/1564
+
+
+File: setuptools.info, Node: Misc<25>, Prev: Documentation changes<10>, Up: v40 6 0
+
+9.70.4 Misc
+-----------
+
+ * #1533(1): Restricted the ‘recursive-include setuptools/_vendor’ to
+ contain only .py and .txt files.
+
+ * #1572(2): Added the ‘concurrent.futures’ backport ‘futures’ to the
+ Python 2.7 test suite requirements.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1533
+
+ (2) https://github.com/pypa/setuptools/issues/1572
+
+
+File: setuptools.info, Node: v40 5 0, Next: v40 4 3, Prev: v40 6 0, Up: History<2>
+
+9.71 v40.5.0
+============
+
+26 Oct 2018
+
+* Menu:
+
+* Changes: Changes<49>.
+* Documentation changes: Documentation changes<11>.
+
+
+File: setuptools.info, Node: Changes<49>, Next: Documentation changes<11>, Up: v40 5 0
+
+9.71.1 Changes
+--------------
+
+ * #1335(1): In ‘pkg_resources.normalize_path’, fix issue on Cygwin
+ when cwd contains symlinks.
+
+ * #1502(2): Deprecated support for downloads from Subversion in
+ package_index/easy_install.
+
+ * #1517(3): Dropped use of six.u in favor of ‘u""’ literals.
+
+ * #1520(4): Added support for ‘data_files’ in ‘setup.cfg’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1335
+
+ (2) https://github.com/pypa/setuptools/issues/1502
+
+ (3) https://github.com/pypa/setuptools/issues/1517
+
+ (4) https://github.com/pypa/setuptools/issues/1520
+
+
+File: setuptools.info, Node: Documentation changes<11>, Prev: Changes<49>, Up: v40 5 0
+
+9.71.2 Documentation changes
+----------------------------
+
+ * #1525(1): Fixed rendering of the deprecation warning in
+ easy_install doc.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1525
+
+
+File: setuptools.info, Node: v40 4 3, Next: v40 4 2, Prev: v40 5 0, Up: History<2>
+
+9.72 v40.4.3
+============
+
+23 Sep 2018
+
+* Menu:
+
+* Changes: Changes<50>.
+
+
+File: setuptools.info, Node: Changes<50>, Up: v40 4 3
+
+9.72.1 Changes
+--------------
+
+ * #1480(1): Bump vendored pyparsing in pkg_resources to 2.2.1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1480
+
+
+File: setuptools.info, Node: v40 4 2, Next: v40 4 1, Prev: v40 4 3, Up: History<2>
+
+9.73 v40.4.2
+============
+
+21 Sep 2018
+
+* Menu:
+
+* Misc: Misc<26>.
+
+
+File: setuptools.info, Node: Misc<26>, Up: v40 4 2
+
+9.73.1 Misc
+-----------
+
+ * #1497(1): Updated gitignore in repo.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1497
+
+
+File: setuptools.info, Node: v40 4 1, Next: v40 4 0, Prev: v40 4 2, Up: History<2>
+
+9.74 v40.4.1
+============
+
+18 Sep 2018
+
+* Menu:
+
+* Changes: Changes<51>.
+
+
+File: setuptools.info, Node: Changes<51>, Up: v40 4 1
+
+9.74.1 Changes
+--------------
+
+ * #1480(1): Bump vendored pyparsing to 2.2.1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1480
+
+
+File: setuptools.info, Node: v40 4 0, Next: v40 3 0, Prev: v40 4 1, Up: History<2>
+
+9.75 v40.4.0
+============
+
+18 Sep 2018
+
+* Menu:
+
+* Changes: Changes<52>.
+
+
+File: setuptools.info, Node: Changes<52>, Up: v40 4 0
+
+9.75.1 Changes
+--------------
+
+ * #1481(1): Join the sdist ‘--dist-dir’ and the ‘build_meta’ sdist
+ directory argument to point to the same target (meaning the build
+ frontend no longer needs to clean manually the dist dir to avoid
+ multiple sdist presence, and setuptools no longer needs to handle
+ conflicts between the two).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1481
+
+
+File: setuptools.info, Node: v40 3 0, Next: v40 2 0, Prev: v40 4 0, Up: History<2>
+
+9.76 v40.3.0
+============
+
+16 Sep 2018
+
+* Menu:
+
+* Changes: Changes<53>.
+* Misc: Misc<27>.
+
+
+File: setuptools.info, Node: Changes<53>, Next: Misc<27>, Up: v40 3 0
+
+9.76.1 Changes
+--------------
+
+ * #1402(1): Fixed a bug with namespace packages under Python 3.6 when
+ one package in current directory hides another which is installed.
+
+ * #1427(2): Set timestamp of ‘.egg-info’ directory whenever
+ ‘egg_info’ command is run.
+
+ * #1474(3): ‘build_meta.get_requires_for_build_sdist’ now does not
+ include the ‘wheel’ package anymore.
+
+ * #1486(4): Suppress warnings in pkg_resources.handle_ns.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1402
+
+ (2) https://github.com/pypa/setuptools/issues/1427
+
+ (3) https://github.com/pypa/setuptools/issues/1474
+
+ (4) https://github.com/pypa/setuptools/issues/1486
+
+
+File: setuptools.info, Node: Misc<27>, Prev: Changes<53>, Up: v40 3 0
+
+9.76.2 Misc
+-----------
+
+ * #1479(1): Remove internal use of six.binary_type.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1479
+
+
+File: setuptools.info, Node: v40 2 0, Next: v40 1 1, Prev: v40 3 0, Up: History<2>
+
+9.77 v40.2.0
+============
+
+21 Aug 2018
+
+* Menu:
+
+* Changes: Changes<54>.
+
+
+File: setuptools.info, Node: Changes<54>, Up: v40 2 0
+
+9.77.1 Changes
+--------------
+
+ * #1466(1): Fix handling of Unicode arguments in PEP 517(2) backend
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1466
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+
+File: setuptools.info, Node: v40 1 1, Next: v40 1 0, Prev: v40 2 0, Up: History<2>
+
+9.78 v40.1.1
+============
+
+21 Aug 2018
+
+* Menu:
+
+* Changes: Changes<55>.
+
+
+File: setuptools.info, Node: Changes<55>, Up: v40 1 1
+
+9.78.1 Changes
+--------------
+
+ * #1465(1): Fix regression with ‘egg_info’ command when tagging is
+ used.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1465
+
+
+File: setuptools.info, Node: v40 1 0, Next: v40 0 0, Prev: v40 1 1, Up: History<2>
+
+9.79 v40.1.0
+============
+
+17 Aug 2018
+
+* Menu:
+
+* Changes: Changes<56>.
+* Misc: Misc<28>.
+
+
+File: setuptools.info, Node: Changes<56>, Next: Misc<28>, Up: v40 1 0
+
+9.79.1 Changes
+--------------
+
+ * #1410(1): Deprecated ‘upload’ and ‘register’ commands.
+
+ * #1312(2): Introduced find_namespace_packages() to find PEP 420(3)
+ namespace packages.
+
+ * #1420(4): Added find_namespace: directive to config parser.
+
+ * #1418(5): Solved race in when creating egg cache directories.
+
+ * #1450(6): Upgraded vendored PyParsing from 2.1.10 to 2.2.0.
+
+ * #1451(7): Upgraded vendored appdirs from 1.4.0 to 1.4.3.
+
+ * #1388(8): Fixed “Microsoft Visual C++ Build Tools” link in
+ exception when Visual C++ not found.
+
+ * #1389(9): Added support for scripts which have unicode content.
+
+ * #1416(10): Moved several Python version checks over to using
+ ‘six.PY2’ and ‘six.PY3’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1410
+
+ (2) https://github.com/pypa/setuptools/issues/1312
+
+ (3) https://www.python.org/dev/peps/pep-0420/
+
+ (4) https://github.com/pypa/setuptools/issues/1420
+
+ (5) https://github.com/pypa/setuptools/issues/1418
+
+ (6) https://github.com/pypa/setuptools/issues/1450
+
+ (7) https://github.com/pypa/setuptools/issues/1451
+
+ (8) https://github.com/pypa/setuptools/issues/1388
+
+ (9) https://github.com/pypa/setuptools/issues/1389
+
+ (10) https://github.com/pypa/setuptools/issues/1416
+
+
+File: setuptools.info, Node: Misc<28>, Prev: Changes<56>, Up: v40 1 0
+
+9.79.2 Misc
+-----------
+
+ * #1441(1): Removed spurious executable permissions from files that
+ don’t need them.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1441
+
+
+File: setuptools.info, Node: v40 0 0, Next: v39 2 0, Prev: v40 1 0, Up: History<2>
+
+9.80 v40.0.0
+============
+
+09 Jul 2018
+
+* Menu:
+
+* Breaking Changes: Breaking Changes<12>.
+* Changes: Changes<57>.
+* Documentation changes: Documentation changes<12>.
+* Misc: Misc<29>.
+
+
+File: setuptools.info, Node: Breaking Changes<12>, Next: Changes<57>, Up: v40 0 0
+
+9.80.1 Breaking Changes
+-----------------------
+
+ * #1342(1): Drop support for Python 3.3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1342
+
+
+File: setuptools.info, Node: Changes<57>, Next: Documentation changes<12>, Prev: Breaking Changes<12>, Up: v40 0 0
+
+9.80.2 Changes
+--------------
+
+ * #1366(1): In package_index, fixed handling of encoded entities in
+ URLs.
+
+ * #1383(2): In pkg_resources VendorImporter, avoid removing packages
+ imported from the root.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1366
+
+ (2) https://github.com/pypa/setuptools/issues/1383
+
+
+File: setuptools.info, Node: Documentation changes<12>, Next: Misc<29>, Prev: Changes<57>, Up: v40 0 0
+
+9.80.3 Documentation changes
+----------------------------
+
+ * #1379(1): Minor doc fixes after actually using the new release
+ process.
+
+ * #1385(2): Removed section on non-package data files.
+
+ * #1403(3): Fix developer’s guide.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1379
+
+ (2) https://github.com/pypa/setuptools/issues/1385
+
+ (3) https://github.com/pypa/setuptools/issues/1403
+
+
+File: setuptools.info, Node: Misc<29>, Prev: Documentation changes<12>, Up: v40 0 0
+
+9.80.4 Misc
+-----------
+
+ * #1404(1): Fix PEP 518(2) configuration: set build requirements in
+ ‘pyproject.toml’ to ‘["wheel"]’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1404
+
+ (2) https://www.python.org/dev/peps/pep-0518/
+
+
+File: setuptools.info, Node: v39 2 0, Next: v39 1 0, Prev: v40 0 0, Up: History<2>
+
+9.81 v39.2.0
+============
+
+19 May 2018
+
+* Menu:
+
+* Changes: Changes<58>.
+* Documentation changes: Documentation changes<13>.
+* Misc: Misc<30>.
+
+
+File: setuptools.info, Node: Changes<58>, Next: Documentation changes<13>, Up: v39 2 0
+
+9.81.1 Changes
+--------------
+
+ * #1359(1): Support using “file:” to load a PEP 440(2)-compliant
+ package version from a text file.
+
+ * #1360(3): Fixed issue with a mismatch between the name of the
+ package and the name of the .dist-info file in wheel files
+
+ * #1364(4): Add ‘__dir__()’ implementation to
+ ‘pkg_resources.Distribution()’ that includes the attributes in the
+ ‘_provider’ instance variable.
+
+ * #1365(5): Take the package_dir option into account when loading the
+ version from a module attribute.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1359
+
+ (2) https://www.python.org/dev/peps/pep-0440/
+
+ (3) https://github.com/pypa/setuptools/issues/1360
+
+ (4) https://github.com/pypa/setuptools/issues/1364
+
+ (5) https://github.com/pypa/setuptools/issues/1365
+
+
+File: setuptools.info, Node: Documentation changes<13>, Next: Misc<30>, Prev: Changes<58>, Up: v39 2 0
+
+9.81.2 Documentation changes
+----------------------------
+
+ * #1353(1): Added coverage badge to README.
+
+ * #1356(2): Made small fixes to the developer guide documentation.
+
+ * #1357(3): Fixed warnings in documentation builds and started
+ enforcing that the docs build without warnings in tox.
+
+ * #1376(4): Updated release process docs.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1353
+
+ (2) https://github.com/pypa/setuptools/issues/1356
+
+ (3) https://github.com/pypa/setuptools/issues/1357
+
+ (4) https://github.com/pypa/setuptools/issues/1376
+
+
+File: setuptools.info, Node: Misc<30>, Prev: Documentation changes<13>, Up: v39 2 0
+
+9.81.3 Misc
+-----------
+
+ * #1343(1): The ‘setuptools’ specific
+ ‘long_description_content_type’, ‘project_urls’ and
+ ‘provides_extras’ fields are now set consistently after any
+ ‘distutils’ ‘setup_keywords’ calls, allowing them to override
+ values.
+
+ * #1352(2): Added ‘tox’ environment for documentation builds.
+
+ * #1354(3): Added ‘towncrier’ for changelog management.
+
+ * #1355(4): Add PR template.
+
+ * #1368(5): Fixed tests which failed without network connectivity.
+
+ * #1369(6): Added unit tests for PEP 425(7) compatibility tags
+ support.
+
+ * #1372(8): Stop testing Python 3.3 in Travis CI, now that the latest
+ version of ‘wheel’ no longer installs on it.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1343
+
+ (2) https://github.com/pypa/setuptools/issues/1352
+
+ (3) https://github.com/pypa/setuptools/issues/1354
+
+ (4) https://github.com/pypa/setuptools/issues/1355
+
+ (5) https://github.com/pypa/setuptools/issues/1368
+
+ (6) https://github.com/pypa/setuptools/issues/1369
+
+ (7) https://www.python.org/dev/peps/pep-0425/
+
+ (8) https://github.com/pypa/setuptools/issues/1372
+
+
+File: setuptools.info, Node: v39 1 0, Next: v39 0 1, Prev: v39 2 0, Up: History<2>
+
+9.82 v39.1.0
+============
+
+28 Apr 2018
+
+ * #1340(1): Update all PyPI URLs to reflect the switch to the new
+ Warehouse codebase.
+
+ * #1337(2): In ‘pkg_resources’, now support loading resources for
+ modules loaded by the ‘SourcelessFileLoader’.
+
+ * #1332(3): Silence spurious wheel related warnings on Windows.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1340
+
+ (2) https://github.com/pypa/setuptools/issues/1337
+
+ (3) https://github.com/pypa/setuptools/issues/1332
+
+
+File: setuptools.info, Node: v39 0 1, Next: v39 0 0, Prev: v39 1 0, Up: History<2>
+
+9.83 v39.0.1
+============
+
+18 Mar 2018
+
+ * #1297(1): Restore Unicode handling for Maintainer fields in
+ metadata.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1297
+
+
+File: setuptools.info, Node: v39 0 0, Next: v38 7 0, Prev: v39 0 1, Up: History<2>
+
+9.84 v39.0.0
+============
+
+17 Mar 2018
+
+ * #1296(1): Setuptools now vendors its own direct dependencies, no
+ longer relying on the dependencies as vendored by pkg_resources.
+
+ * #296(2): Removed long-deprecated support for iteration on Version
+ objects as returned by ‘pkg_resources.parse_version’. Removed the
+ ‘SetuptoolsVersion’ and ‘SetuptoolsLegacyVersion’ names as well.
+ They should not have been used, but if they were, replace with
+ ‘Version’ and ‘LegacyVersion’ from ‘packaging.version’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1296
+
+ (2) https://github.com/pypa/setuptools/issues/296
+
+
+File: setuptools.info, Node: v38 7 0, Next: v38 6 1, Prev: v39 0 0, Up: History<2>
+
+9.85 v38.7.0
+============
+
+17 Mar 2018
+
+ * #1288(1): Add support for maintainer in PKG-INFO.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1288
+
+
+File: setuptools.info, Node: v38 6 1, Next: v38 6 0, Prev: v38 7 0, Up: History<2>
+
+9.86 v38.6.1
+============
+
+17 Mar 2018
+
+ * #1292(1): Avoid generating ‘Provides-Extra’ in metadata when no
+ extra is present (but environment markers are).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1292
+
+
+File: setuptools.info, Node: v38 6 0, Next: v38 5 2, Prev: v38 6 1, Up: History<2>
+
+9.87 v38.6.0
+============
+
+15 Mar 2018
+
+ * #1286(1): Add support for Metadata 2.1 (PEP 566(2)).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1286
+
+ (2) https://www.python.org/dev/peps/pep-0566/
+
+
+File: setuptools.info, Node: v38 5 2, Next: v38 5 1, Prev: v38 6 0, Up: History<2>
+
+9.88 v38.5.2
+============
+
+06 Mar 2018
+
+ * #1285(1): Fixed RuntimeError in pkg_resources.parse_requirements on
+ Python 3.7 (stemming from PEP 479(2)).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1285
+
+ (2) https://www.python.org/dev/peps/pep-0479/
+
+
+File: setuptools.info, Node: v38 5 1, Next: v38 5 0, Prev: v38 5 2, Up: History<2>
+
+9.89 v38.5.1
+============
+
+06 Feb 2018
+
+ * #1271(1): Revert to Cython legacy ‘build_ext’ behavior for
+ compatibility.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1271
+
+
+File: setuptools.info, Node: v38 5 0, Next: v38 4 1, Prev: v38 5 1, Up: History<2>
+
+9.90 v38.5.0
+============
+
+04 Feb 2018
+
+ * #1229(1): Expand imports in ‘build_ext’ to refine detection of
+ Cython availability.
+
+ * #1270(2): When Cython is available, ‘build_ext’ now uses the
+ new_build_ext.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1229
+
+ (2) https://github.com/pypa/setuptools/issues/1270
+
+
+File: setuptools.info, Node: v38 4 1, Next: v38 4 0, Prev: v38 5 0, Up: History<2>
+
+9.91 v38.4.1
+============
+
+03 Feb 2018
+
+ * #1257(1): In bdist_egg.scan_module, fix ValueError on Python 3.7.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1257
+
+
+File: setuptools.info, Node: v38 4 0, Next: v38 3 0, Prev: v38 4 1, Up: History<2>
+
+9.92 v38.4.0
+============
+
+05 Jan 2018
+
+ * #1231(1): Removed warning when PYTHONDONTWRITEBYTECODE is enabled.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1231
+
+
+File: setuptools.info, Node: v38 3 0, Next: v38 2 5, Prev: v38 4 0, Up: History<2>
+
+9.93 v38.3.0
+============
+
+04 Jan 2018
+
+ * #1210(1): Add support for PEP 345(2) Project-URL metadata.
+
+ * #1207(3): Add support for ‘long_description_type’ to setup.cfg
+ declarative config as intended and documented.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1210
+
+ (2) https://www.python.org/dev/peps/pep-0345/
+
+ (3) https://github.com/pypa/setuptools/issues/1207
+
+
+File: setuptools.info, Node: v38 2 5, Next: v38 2 4, Prev: v38 3 0, Up: History<2>
+
+9.94 v38.2.5
+============
+
+ * #1232(1): Fix trailing slash handling in
+ ‘pkg_resources.ZipProvider’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1232
+
+
+File: setuptools.info, Node: v38 2 4, Next: v38 2 3, Prev: v38 2 5, Up: History<2>
+
+9.95 v38.2.4
+============
+
+04 Dec 2017
+
+ * #1220(1): Fix ‘data_files’ handling when installing from wheel.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1220
+
+
+File: setuptools.info, Node: v38 2 3, Next: v38 2 2, Prev: v38 2 4, Up: History<2>
+
+9.96 v38.2.3
+============
+
+28 Nov 2017
+
+ * fix Travis’ Python 3.3 job.
+
+
+File: setuptools.info, Node: v38 2 2, Next: v38 2 1, Prev: v38 2 3, Up: History<2>
+
+9.97 v38.2.2
+============
+
+27 Nov 2017
+
+ * #1214(1): fix handling of namespace packages when installing from a
+ wheel.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1214
+
+
+File: setuptools.info, Node: v38 2 1, Next: v38 2 0, Prev: v38 2 2, Up: History<2>
+
+9.98 v38.2.1
+============
+
+26 Nov 2017
+
+ * #1212(1): fix encoding handling of metadata when installing from a
+ wheel.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1212
+
+
+File: setuptools.info, Node: v38 2 0, Next: v38 1 0, Prev: v38 2 1, Up: History<2>
+
+9.99 v38.2.0
+============
+
+26 Nov 2017
+
+ * #1200(1): easy_install now support installing from wheels: they
+ will be installed as standalone unzipped eggs.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1200
+
+
+File: setuptools.info, Node: v38 1 0, Next: v38 0 0, Prev: v38 2 0, Up: History<2>
+
+9.100 v38.1.0
+=============
+
+25 Nov 2017
+
+ * #1208(1): Improve error message when failing to locate scripts in
+ egg-info metadata.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1208
+
+
+File: setuptools.info, Node: v38 0 0, Next: v37 0 0, Prev: v38 1 0, Up: History<2>
+
+9.101 v38.0.0
+=============
+
+25 Nov 2017
+
+ * #458(1): In order to support deterministic builds, Setuptools no
+ longer allows packages to declare ‘install_requires’ as unordered
+ sequences (sets or dicts).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/458
+
+
+File: setuptools.info, Node: v37 0 0, Next: v36 8 0, Prev: v38 0 0, Up: History<2>
+
+9.102 v37.0.0
+=============
+
+20 Nov 2017
+
+ * #878(1): Drop support for Python 2.6. Python 2.6 users should rely
+ on ‘setuptools < 37dev’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/878
+
+
+File: setuptools.info, Node: v36 8 0, Next: v36 7 3, Prev: v37 0 0, Up: History<2>
+
+9.103 v36.8.0
+=============
+
+19 Nov 2017
+
+ * #1190(1): In SSL support for package index operations, use SNI
+ where available.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1190
+
+
+File: setuptools.info, Node: v36 7 3, Next: v36 7 2, Prev: v36 8 0, Up: History<2>
+
+9.104 v36.7.3
+=============
+
+13 Nov 2017
+
+ * #1175(1): Bug fixes to ‘build_meta’ module.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1175
+
+
+File: setuptools.info, Node: v36 7 2, Next: v36 7 1, Prev: v36 7 3, Up: History<2>
+
+9.105 v36.7.2
+=============
+
+13 Nov 2017
+
+ * #701(1): Fixed duplicate test discovery on Python 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/701
+
+
+File: setuptools.info, Node: v36 7 1, Next: v36 7 0, Prev: v36 7 2, Up: History<2>
+
+9.106 v36.7.1
+=============
+
+11 Nov 2017
+
+ * #1193(1): Avoid test failures in bdist_egg when
+ PYTHONDONTWRITEBYTECODE is set.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1193
+
+
+File: setuptools.info, Node: v36 7 0, Next: v36 6 1, Prev: v36 7 1, Up: History<2>
+
+9.107 v36.7.0
+=============
+
+09 Nov 2017
+
+ * #1054(1): Support ‘setup_requires’ in ‘setup.cfg’ files.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1054
+
+
+File: setuptools.info, Node: v36 6 1, Next: v36 6 0, Prev: v36 7 0, Up: History<2>
+
+9.108 v36.6.1
+=============
+
+09 Nov 2017
+
+ * #1132(1): Removed redundant and costly serialization/parsing step
+ in ‘EntryPoint.__init__’.
+
+ * #844(2): ‘bdist_egg --exclude-source-files’ now tested and works on
+ Python 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1132
+
+ (2) https://github.com/pypa/setuptools/issues/844
+
+
+File: setuptools.info, Node: v36 6 0, Next: v36 5 0, Prev: v36 6 1, Up: History<2>
+
+9.109 v36.6.0
+=============
+
+12 Oct 2017
+
+ * #1143(1): Added ‘setuptools.build_meta’ module, an implementation
+ of PEP-517(2) for Setuptools-defined packages.
+
+ * #1143(3): Added ‘dist_info’ command for producing dist_info
+ metadata.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1143
+
+ (2) https://www.python.org/dev/peps/pep-0517/
+
+ (3) https://github.com/pypa/setuptools/issues/1143
+
+
+File: setuptools.info, Node: v36 5 0, Next: v36 4 0, Prev: v36 6 0, Up: History<2>
+
+9.110 v36.5.0
+=============
+
+15 Sep 2017
+
+ * #170(1): When working with Mercurial checkouts, use
+ Windows-friendly syntax for suppressing output.
+
+ * Inspired by #1134(2), performed substantial refactoring of
+ ‘pkg_resources.find_on_path’ to facilitate an optimization for
+ paths with many non-version entries.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/170
+
+ (2) https://github.com/pypa/setuptools/issues/1134
+
+
+File: setuptools.info, Node: v36 4 0, Next: v36 3 0, Prev: v36 5 0, Up: History<2>
+
+9.111 v36.4.0
+=============
+
+03 Sep 2017
+
+ * #1075(1): Add new ‘Description-Content-Type’ metadata field. See
+ here for documentation on how to use this field.(2)
+
+ * #1068(3): Sort files and directories when building eggs for
+ deterministic order.
+
+ * #196(4): Remove caching of easy_install command in fetch_build_egg.
+ Fixes issue where ‘pytest-runner-N.N’ would satisfy the
+ installation of ‘pytest’.
+
+ * #1129(5): Fix working set dependencies handling when replacing
+ conflicting distributions (e.g. when using ‘setup_requires’ with a
+ conflicting transitive dependency, fix #1124(6)).
+
+ * #1133(7): Improved handling of README files extensions and added
+ Markdown to the list of searched READMES.
+
+ * #1135(8): Improve performance of pkg_resources import by not
+ invoking ‘access’ or ‘stat’ and using ‘os.listdir’ instead.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1075
+
+ (2)
+https://packaging.python.org/specifications/#description-content-type
+
+ (3) https://github.com/pypa/setuptools/issues/1068
+
+ (4) https://github.com/pypa/setuptools/issues/196
+
+ (5) https://github.com/pypa/setuptools/issues/1129
+
+ (6) https://github.com/pypa/setuptools/issues/1124
+
+ (7) https://github.com/pypa/setuptools/issues/1133
+
+ (8) https://github.com/pypa/setuptools/issues/1135
+
+
+File: setuptools.info, Node: v36 3 0, Next: v36 2 7, Prev: v36 4 0, Up: History<2>
+
+9.112 v36.3.0
+=============
+
+28 Aug 2017
+
+ * #1131(1): Make possible using several files within ‘file:’
+ directive in metadata.long_description in ‘setup.cfg’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1131
+
+
+File: setuptools.info, Node: v36 2 7, Next: v36 2 6, Prev: v36 3 0, Up: History<2>
+
+9.113 v36.2.7
+=============
+
+02 Aug 2017
+
+ * fix #1105(1): Fix handling of requirements with environment markers
+ when declared in ‘setup.cfg’ (same treatment as for #1081(2)).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1105
+
+ (2) https://github.com/pypa/setuptools/issues/1081
+
+
+File: setuptools.info, Node: v36 2 6, Next: v36 2 5, Prev: v36 2 7, Up: History<2>
+
+9.114 v36.2.6
+=============
+
+31 Jul 2017
+
+ * #462(1): Don’t assume a directory is an egg by the ‘.egg’ extension
+ alone.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/462
+
+
+File: setuptools.info, Node: v36 2 5, Next: v36 2 4, Prev: v36 2 6, Up: History<2>
+
+9.115 v36.2.5
+=============
+
+30 Jul 2017
+
+ * #1093(1): Fix test command handler with extras_require.
+
+ * #1112(2), #1091(3), #1115(4): Now using Trusty containers in Travis
+ for CI and CD.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1093
+
+ (2) https://github.com/pypa/setuptools/issues/1112
+
+ (3) https://github.com/pypa/setuptools/issues/1091
+
+ (4) https://github.com/pypa/setuptools/issues/1115
+
+
+File: setuptools.info, Node: v36 2 4, Next: v36 2 3, Prev: v36 2 5, Up: History<2>
+
+9.116 v36.2.4
+=============
+
+26 Jul 2017
+
+ * #1092(1): ‘pkg_resources’ now uses ‘inspect.getmro’ to resolve
+ classes in method resolution order.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1092
+
+
+File: setuptools.info, Node: v36 2 3, Next: v36 2 2, Prev: v36 2 4, Up: History<2>
+
+9.117 v36.2.3
+=============
+
+25 Jul 2017
+
+ * #1102(1): Restore behavior for empty extras.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1102
+
+
+File: setuptools.info, Node: v36 2 2, Next: v36 2 1, Prev: v36 2 3, Up: History<2>
+
+9.118 v36.2.2
+=============
+
+24 Jul 2017
+
+ * #1099(1): Revert commit a3ec721, restoring intended purpose of
+ extras as part of a requirement declaration.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1099
+
+
+File: setuptools.info, Node: v36 2 1, Next: v36 2 0, Prev: v36 2 2, Up: History<2>
+
+9.119 v36.2.1
+=============
+
+23 Jul 2017
+
+ * fix #1086(1)
+
+ * fix #1087(2)
+
+ * support extras specifiers in install_requires requirements
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1086
+
+ (2) https://github.com/pypa/setuptools/issues/1087
+
+
+File: setuptools.info, Node: v36 2 0, Next: v36 1 1, Prev: v36 2 1, Up: History<2>
+
+9.120 v36.2.0
+=============
+
+13 Jul 2017
+
+ * #1081(1): Environment markers indicated in ‘install_requires’ are
+ now processed and treated as nameless ‘extras_require’ with
+ markers, allowing their metadata in requires.txt to be correctly
+ generated.
+
+ * #1053(2): Tagged commits are now released using Travis-CI build
+ stages, meaning releases depend on passing tests on all supported
+ Python versions (Linux) and not just the latest Python version.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1081
+
+ (2) https://github.com/pypa/setuptools/issues/1053
+
+
+File: setuptools.info, Node: v36 1 1, Next: v36 1 0, Prev: v36 2 0, Up: History<2>
+
+9.121 v36.1.1
+=============
+
+13 Jul 2017
+
+ * #1083(1): Correct ‘py31compat.makedirs’ to correctly honor
+ ‘exist_ok’ parameter.
+
+ * #1083(2): Also use makedirs compatibility throughout setuptools.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1083
+
+ (2) https://github.com/pypa/setuptools/issues/1083
+
+
+File: setuptools.info, Node: v36 1 0, Next: v36 0 1, Prev: v36 1 1, Up: History<2>
+
+9.122 v36.1.0
+=============
+
+13 Jul 2017
+
+ * #1083(1): Avoid race condition on directory creation in
+ ‘pkg_resources.ensure_directory’.
+
+ * Removed deprecation of and restored support for ‘upload_docs’
+ command for sites other than PyPI. Only warehouse is dropping
+ support, but services like devpi(2) continue to support docs built
+ by setuptools’ plugins. See this comment(3) for more context on
+ the motivation for this change.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1083
+
+ (2) http://doc.devpi.net/latest/
+
+ (3)
+https://bitbucket.org/hpk42/devpi/issues/388/support-rtd-model-for-building-uploading#comment-34292423
+
+
+File: setuptools.info, Node: v36 0 1, Next: v36 0 0, Prev: v36 1 0, Up: History<2>
+
+9.123 v36.0.1
+=============
+
+01 Jun 2017
+
+ * #1042(1): Fix import in py27compat module that still referenced six
+ directly, rather than through the externs module (vendored packages
+ hook).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1042
+
+
+File: setuptools.info, Node: v36 0 0, Next: v35 0 2, Prev: v36 0 1, Up: History<2>
+
+9.124 v36.0.0
+=============
+
+30 May 2017
+
+ * #980(1) and others: Once again, Setuptools vendors all of its
+ dependencies. It seems to be the case that in the Python
+ ecosystem, all build tools must run without any dependencies
+ (build, runtime, or otherwise). At such a point that a mechanism
+ exists that allows build tools to have dependencies, Setuptools
+ will adopt it.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/980
+
+
+File: setuptools.info, Node: v35 0 2, Next: v35 0 1, Prev: v36 0 0, Up: History<2>
+
+9.125 v35.0.2
+=============
+
+27 Apr 2017
+
+ * #1015(1): Fix test failures on Python 3.7.
+
+ * #1024(2): Add workaround for Jython #2581(3) in monkey module.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1015
+
+ (2) https://github.com/pypa/setuptools/issues/1024
+
+ (3) http://bugs.jython.org/issue2581
+
+
+File: setuptools.info, Node: v35 0 1, Next: v35 0 0, Prev: v35 0 2, Up: History<2>
+
+9.126 v35.0.1
+=============
+
+18 Apr 2017
+
+ * #992(1): Revert change introduced in v34.4.1, now considered
+ invalid.
+
+ * #1016(2): Revert change introduced in v35.0.0 per #1014(3),
+ referencing #436(4). The approach had unintended consequences,
+ causing sdist installs to be missing files.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/992
+
+ (2) https://github.com/pypa/setuptools/issues/1016
+
+ (3) https://github.com/pypa/setuptools/issues/1014
+
+ (4) https://github.com/pypa/setuptools/issues/436
+
+
+File: setuptools.info, Node: v35 0 0, Next: v34 4 1, Prev: v35 0 1, Up: History<2>
+
+9.127 v35.0.0
+=============
+
+15 Apr 2017
+
+ * #436(1): In egg_info.manifest_maker, no longer read the file list
+ from the manifest file, and instead re-build it on each build. In
+ this way, files removed from the specification will not linger in
+ the manifest. As a result, any files manually added to the
+ manifest will be removed on subsequent egg_info invocations. No
+ projects should be manually adding files to the manifest and should
+ instead use MANIFEST.in or SCM file finders to force inclusion of
+ files in the manifest.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/436
+
+
+File: setuptools.info, Node: v34 4 1, Next: v34 4 0, Prev: v35 0 0, Up: History<2>
+
+9.128 v34.4.1
+=============
+
+10 Apr 2017
+
+ * #1008(1): In MSVC support, use always the last version available
+ for Windows SDK and UCRT SDK.
+
+ * #1008(2): In MSVC support, fix “vcruntime140.dll” returned path
+ with Visual Studio 2017.
+
+ * #992(3): In msvc.msvc9_query_vcvarsall, ensure the returned dicts
+ have str values and not Unicode for compatibility with os.environ.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1008
+
+ (2) https://github.com/pypa/setuptools/issues/1008
+
+ (3) https://github.com/pypa/setuptools/issues/992
+
+
+File: setuptools.info, Node: v34 4 0, Next: v34 3 3, Prev: v34 4 1, Up: History<2>
+
+9.129 v34.4.0
+=============
+
+07 Apr 2017
+
+ * #995(1): In MSVC support, add support for “Microsoft Visual Studio
+ 2017” and “Microsoft Visual Studio Build Tools 2017”.
+
+ * #999(2) via #1007(3): Extend support for declarative package config
+ in a setup.cfg file to include the options ‘python_requires’ and
+ ‘py_modules’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/995
+
+ (2) https://github.com/pypa/setuptools/issues/999
+
+ (3) https://github.com/pypa/setuptools/issues/1007
+
+
+File: setuptools.info, Node: v34 3 3, Next: v34 3 2, Prev: v34 4 0, Up: History<2>
+
+9.130 v34.3.3
+=============
+
+26 Mar 2017
+
+ * #967(1) (and #997(2)): Explicitly import submodules of packaging to
+ account for environments where the imports of those submodules is
+ not implied by other behavior.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/967
+
+ (2) https://github.com/pypa/setuptools/issues/997
+
+
+File: setuptools.info, Node: v34 3 2, Next: v34 3 1, Prev: v34 3 3, Up: History<2>
+
+9.131 v34.3.2
+=============
+
+11 Mar 2017
+
+ * #993(1): Fix documentation upload by correcting rendering of
+ content-type in _build_multipart on Python 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/993
+
+
+File: setuptools.info, Node: v34 3 1, Next: v34 3 0, Prev: v34 3 2, Up: History<2>
+
+9.132 v34.3.1
+=============
+
+02 Mar 2017
+
+ * #988(1): Trap ‘os.unlink’ same as ‘os.remove’ in ‘auto_chmod’ error
+ handler.
+
+ * #983(2): Fixes to invalid escape sequence deprecations on Python
+ 3.6.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/988
+
+ (2) https://github.com/pypa/setuptools/issues/983
+
+
+File: setuptools.info, Node: v34 3 0, Next: v34 2 0, Prev: v34 3 1, Up: History<2>
+
+9.133 v34.3.0
+=============
+
+23 Feb 2017
+
+ * #941(1): In the upload command, if the username is blank, default
+ to ‘getpass.getuser()’.
+
+ * #971(2): Correct distutils findall monkeypatch to match appropriate
+ versions (namely Python 3.4.6).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/941
+
+ (2) https://github.com/pypa/setuptools/issues/971
+
+
+File: setuptools.info, Node: v34 2 0, Next: v34 1 1, Prev: v34 3 0, Up: History<2>
+
+9.134 v34.2.0
+=============
+
+12 Feb 2017
+
+ * #966(1): Add support for reading dist-info metadata and thus
+ locating Distributions from zip files.
+
+ * #968(2): Allow ‘+’ and ‘!’ in egg fragments so that it can take
+ package names that contain PEP 440(3) conforming version
+ specifiers.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/966
+
+ (2) https://github.com/pypa/setuptools/issues/968
+
+ (3) https://www.python.org/dev/peps/pep-0440/
+
+
+File: setuptools.info, Node: v34 1 1, Next: v34 1 0, Prev: v34 2 0, Up: History<2>
+
+9.135 v34.1.1
+=============
+
+03 Feb 2017
+
+ * #953(1): More aggressively employ the compatibility issue
+ originally added in #706(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/953
+
+ (2) https://github.com/pypa/setuptools/issues/706
+
+
+File: setuptools.info, Node: v34 1 0, Next: v34 0 3, Prev: v34 1 1, Up: History<2>
+
+9.136 v34.1.0
+=============
+
+28 Jan 2017
+
+ * #930(1): ‘build_info’ now accepts two new parameters to optimize
+ and customize the building of C libraries.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/930
+
+
+File: setuptools.info, Node: v34 0 3, Next: v34 0 2, Prev: v34 1 0, Up: History<2>
+
+9.137 v34.0.3
+=============
+
+28 Jan 2017
+
+ * #947(1): Loosen restriction on the version of six required,
+ restoring compatibility with environments relying on six 1.6.0 and
+ later.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/947
+
+
+File: setuptools.info, Node: v34 0 2, Next: v34 0 1, Prev: v34 0 3, Up: History<2>
+
+9.138 v34.0.2
+=============
+
+24 Jan 2017
+
+ * #882(1): Ensure extras are honored when building the working set.
+
+ * #913(2): Fix issue in develop if package directory has a trailing
+ slash.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/882
+
+ (2) https://github.com/pypa/setuptools/issues/913
+
+
+File: setuptools.info, Node: v34 0 1, Next: v34 0 0, Prev: v34 0 2, Up: History<2>
+
+9.139 v34.0.1
+=============
+
+23 Jan 2017
+
+ * #935(1): Fix glob syntax in graft.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/935
+
+
+File: setuptools.info, Node: v34 0 0, Next: v33 1 1, Prev: v34 0 1, Up: History<2>
+
+9.140 v34.0.0
+=============
+
+23 Jan 2017
+
+ * #581(1): 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(2), 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(3).
+ The proposed workaround is to always upgrade Setuptools first prior
+ to upgrading other packages that would upgrade Setuptools.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/581
+
+ (2) https://github.com/pypa/setuptools/issues/940
+
+ (3) https://github.com/pypa/setuptools/issues/4253
+
+
+File: setuptools.info, Node: v33 1 1, Next: v33 1 0, Prev: v34 0 0, Up: History<2>
+
+9.141 v33.1.1
+=============
+
+16 Jan 2017
+
+ * #921(1): Correct issue where certifi fallback not being reached on
+ Windows.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/921
+
+
+File: setuptools.info, Node: v33 1 0, Next: v33 0 0, Prev: v33 1 1, Up: History<2>
+
+9.142 v33.1.0
+=============
+
+15 Jan 2017
+
+Installation via pip, as indicated in the Python Packaging User’s
+Guide(1), 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://packaging.python.org/installing/
+
+
+File: setuptools.info, Node: v33 0 0, Next: v32 3 1, Prev: v33 1 0, Up: History<2>
+
+9.143 v33.0.0
+=============
+
+01 Jan 2017
+
+ * #619(1): Removed support for the ‘tag_svn_revision’ distribution
+ option. If Subversion tagging support is still desired, consider
+ adding the functionality to setuptools_svn in setuptools_svn #2(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/619
+
+ (2) https://github.com/jaraco/setuptools_svn/issues/2
+
+
+File: setuptools.info, Node: v32 3 1, Next: v32 3 0, Prev: v33 0 0, Up: History<2>
+
+9.144 v32.3.1
+=============
+
+28 Dec 2016
+
+ * #866(1): Use ‘dis.Bytecode’ on Python 3.4 and later in
+ ‘setuptools.depends’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/866
+
+
+File: setuptools.info, Node: v32 3 0, Next: v32 2 0, Prev: v32 3 1, Up: History<2>
+
+9.145 v32.3.0
+=============
+
+24 Dec 2016
+
+ * #889(1): Backport proposed fix for disabling interpolation in
+ distutils.Distribution.parse_config_files.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/889
+
+
+File: setuptools.info, Node: v32 2 0, Next: v32 1 3, Prev: v32 3 0, Up: History<2>
+
+9.146 v32.2.0
+=============
+
+22 Dec 2016
+
+ * #884(1): Restore support for running the tests under
+ pytest-runner(2) by ensuring that PYTHONPATH is honored in tests
+ invoking a subprocess.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/884
+
+ (2) https://github.com/pytest-dev/pytest-runner
+
+
+File: setuptools.info, Node: v32 1 3, Next: v32 1 2, Prev: v32 2 0, Up: History<2>
+
+9.147 v32.1.3
+=============
+
+21 Dec 2016
+
+ * #706(1): Add rmtree compatibility shim for environments where
+ rmtree fails when passed a unicode string.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/706
+
+
+File: setuptools.info, Node: v32 1 2, Next: v32 1 1, Prev: v32 1 3, Up: History<2>
+
+9.148 v32.1.2
+=============
+
+18 Dec 2016
+
+ * #893(1): Only release sdist in zip format as warehouse now
+ disallows releasing two different formats.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/893
+
+
+File: setuptools.info, Node: v32 1 1, Next: v32 1 0, Prev: v32 1 2, Up: History<2>
+
+9.149 v32.1.1
+=============
+
+18 Dec 2016
+
+ * #704(1): 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(2): In ‘sandbox.run_setup’, ensure that ‘__file__’ is always a
+ ‘str’, modeling the behavior observed by the interpreter when
+ invoking scripts and modules.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/704
+
+ (2) https://github.com/pypa/setuptools/issues/712
+
+
+File: setuptools.info, Node: v32 1 0, Next: v32 0 0, Prev: v32 1 1, Up: History<2>
+
+9.150 v32.1.0
+=============
+
+16 Dec 2016
+
+ * #891(1): In ‘test’ command on test failure, raise DistutilsError,
+ suppression invocation of subsequent commands.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/891
+
+
+File: setuptools.info, Node: v32 0 0, Next: v31 0 1, Prev: v32 1 0, Up: History<2>
+
+9.151 v32.0.0
+=============
+
+14 Dec 2016
+
+ * #890(1): Revert #849(2). ‘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(3), #849(4).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/890
+
+ (2) https://github.com/pypa/setuptools/issues/849
+
+ (3) https://github.com/pypa/setuptools/issues/886
+
+ (4) https://github.com/pypa/setuptools/issues/849
+
+
+File: setuptools.info, Node: v31 0 1, Next: v31 0 0, Prev: v32 0 0, Up: History<2>
+
+9.152 v31.0.1
+=============
+
+14 Dec 2016
+
+ * #885(1): Fix regression where ‘pkg_resources._rebuild_mod_path’
+ would fail when a namespace package’s ‘__path__’ was not a list
+ with a sort attribute.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/885
+
+
+File: setuptools.info, Node: v31 0 0, Next: v30 4 0, Prev: v31 0 1, Up: History<2>
+
+9.153 v31.0.0
+=============
+
+11 Dec 2016
+
+ * #250(1): 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(2) and pip #1924(3), introduced in
+ 28.3.0 and implicated in #870(4), 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/250
+
+ (2) https://github.com/pypa/setuptools/issues/805
+
+ (3) https://github.com/pypa/setuptools/issues/1924
+
+ (4) https://github.com/pypa/setuptools/issues/870
+
+
+File: setuptools.info, Node: v30 4 0, Next: v30 3 0, Prev: v31 0 0, Up: History<2>
+
+9.154 v30.4.0
+=============
+
+10 Dec 2016
+
+ * #879(1): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/879
+
+
+File: setuptools.info, Node: v30 3 0, Next: v30 2 1, Prev: v30 4 0, Up: History<2>
+
+9.155 v30.3.0
+=============
+
+08 Dec 2016
+
+ * #394(1) via #862(2): Added support for declarative package config
+ in a setup.cfg file(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/394
+
+ (2) https://github.com/pypa/setuptools/issues/862
+
+ (3)
+https://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files
+
+
+File: setuptools.info, Node: v30 2 1, Next: v30 2 0, Prev: v30 3 0, Up: History<2>
+
+9.156 v30.2.1
+=============
+
+08 Dec 2016
+
+ * #850(1): In test command, invoke unittest.main with indication not
+ to exit the process.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/850
+
+
+File: setuptools.info, Node: v30 2 0, Next: v30 1 0, Prev: v30 2 1, Up: History<2>
+
+9.157 v30.2.0
+=============
+
+04 Dec 2016
+
+ * #854(1): Bump to vendored Packaging 16.8(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/854
+
+ (2) https://github.com/pypa/packaging/blob/16.8/CHANGELOG.rst
+
+
+File: setuptools.info, Node: v30 1 0, Next: v30 0 0, Prev: v30 2 0, Up: History<2>
+
+9.158 v30.1.0
+=============
+
+03 Dec 2016
+
+ * #846(1): Also trap ‘socket.error’ when opening URLs in
+ package_index.
+
+ * #849(2): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/846
+
+ (2) https://github.com/pypa/setuptools/issues/849
+
+
+File: setuptools.info, Node: v30 0 0, Next: v29 0 1, Prev: v30 1 0, Up: History<2>
+
+9.159 v30.0.0
+=============
+
+01 Dec 2016
+
+ * #864(1): Drop support for Python 3.2. Systems requiring Python 3.2
+ support must use ‘setuptools < 30’.
+
+ * #825(2): Suppress warnings for single files.
+
+ * #830(3) via #843(4): Once again restored inclusion of data files to
+ sdists, but now trap TypeError caused by techniques employed rjsmin
+ and similar.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/864
+
+ (2) https://github.com/pypa/setuptools/issues/825
+
+ (3) https://github.com/pypa/setuptools/issues/830
+
+ (4) https://github.com/pypa/setuptools/issues/843
+
+
+File: setuptools.info, Node: v29 0 1, Next: v29 0 0, Prev: v30 0 0, Up: History<2>
+
+9.160 v29.0.1
+=============
+
+26 Nov 2016
+
+ * #861(1): 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”.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/861
+
+
+File: setuptools.info, Node: v29 0 0, Next: v28 8 0, Prev: v29 0 1, Up: History<2>
+
+9.161 v29.0.0
+=============
+
+25 Nov 2016
+
+ * #841(1): Drop special exception for packages invoking win32com
+ during the build/install process. See Distribute #118(2) for
+ history.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/841
+
+ (2) https://bitbucket.org/tarek/distribute/issue/118
+
+
+File: setuptools.info, Node: v28 8 0, Next: v28 7 1, Prev: v29 0 0, Up: History<2>
+
+9.162 v28.8.0
+=============
+
+04 Nov 2016
+
+ * #629(1): 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(2).
+
+ * #837(3): Rely on the config var “SO” for Python 3.3.0 only when
+ determining the ext filename.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/629
+
+ (2) https://github.com/pypa/setuptools/issues/829
+
+ (3) https://github.com/pypa/setuptools/issues/837
+
+
+File: setuptools.info, Node: v28 7 1, Next: v28 7 0, Prev: v28 8 0, Up: History<2>
+
+9.163 v28.7.1
+=============
+
+29 Oct 2016
+
+ * #827(1): Update PyPI root for dependency links.
+
+ * #833(2): Backed out changes from #830(3) as the implementation
+ seems to have problems in some cases.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/827
+
+ (2) https://github.com/pypa/setuptools/issues/833
+
+ (3) https://github.com/pypa/setuptools/issues/830
+
+
+File: setuptools.info, Node: v28 7 0, Next: v28 6 1, Prev: v28 7 1, Up: History<2>
+
+9.164 v28.7.0
+=============
+
+28 Oct 2016
+
+ * #832(1): Moved much of the namespace package handling functionality
+ into a separate module for re-use in something like #789(2).
+
+ * #830(3): ‘sdist’ command no longer suppresses the inclusion of data
+ files, re-aligning with the expectation of distutils and addressing
+ #274(4) and #521(5).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/832
+
+ (2) https://github.com/pypa/setuptools/issues/789
+
+ (3) https://github.com/pypa/setuptools/issues/830
+
+ (4) https://github.com/pypa/setuptools/issues/274
+
+ (5) https://github.com/pypa/setuptools/issues/521
+
+
+File: setuptools.info, Node: v28 6 1, Next: v28 6 0, Prev: v28 7 0, Up: History<2>
+
+9.165 v28.6.1
+=============
+
+19 Oct 2016
+
+ * #816(1): Fix manifest file list order in tests.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/816
+
+
+File: setuptools.info, Node: v28 6 0, Next: v28 5 0, Prev: v28 6 1, Up: History<2>
+
+9.166 v28.6.0
+=============
+
+16 Oct 2016
+
+ * #629(1): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/629
+
+
+File: setuptools.info, Node: v28 5 0, Next: v28 4 0, Prev: v28 6 0, Up: History<2>
+
+9.167 v28.5.0
+=============
+
+14 Oct 2016
+
+ * #810(1): Tests are now invoked with tox and not setup.py test.
+
+ * #249(2) and #450(3) via #764(4): 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’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/810
+
+ (2) https://github.com/pypa/setuptools/issues/249
+
+ (3) https://github.com/pypa/setuptools/issues/450
+
+ (4) https://github.com/pypa/setuptools/issues/764
+
+
+File: setuptools.info, Node: v28 4 0, Next: v28 3 0, Prev: v28 5 0, Up: History<2>
+
+9.168 v28.4.0
+=============
+
+14 Oct 2016
+
+ * #732(1): Now extras with a hyphen are honored per PEP 426(2).
+
+ * #811(3): 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(4) for
+ rationale.
+
+ * #760(5) via #762(6): Look for certificate bundle where SUSE Linux
+ typically presents it. Use ‘certifi.where()’ to locate the bundle.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/732
+
+ (2) https://www.python.org/dev/peps/pep-0426/
+
+ (3) https://github.com/pypa/setuptools/issues/811
+
+ (4) https://github.com/pypa/setuptools/issues/750
+
+ (5) https://github.com/pypa/setuptools/issues/760
+
+ (6) https://github.com/pypa/setuptools/issues/762
+
+
+File: setuptools.info, Node: v28 3 0, Next: v28 1 0, Prev: v28 4 0, Up: History<2>
+
+9.169 v28.3.0
+=============
+
+07 Oct 2016
+
+ * #809(1): In ‘find_packages()’, restore support for excluding a
+ parent package without excluding a child package.
+
+ * #805(2): Disable ‘-nspkg.pth’ behavior on Python 3.3+ where
+ PEP-420(3) functionality is adequate. Fixes pip #1924(4).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/809
+
+ (2) https://github.com/pypa/setuptools/issues/805
+
+ (3) https://www.python.org/dev/peps/pep-0420/
+
+ (4) https://github.com/pypa/setuptools/issues/1924
+
+
+File: setuptools.info, Node: v28 1 0, Next: v28 0 0, Prev: v28 3 0, Up: History<2>
+
+9.170 v28.1.0
+=============
+
+01 Oct 2016
+
+ * #803(1): Bump certifi to 2016.9.26.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/803
+
+
+File: setuptools.info, Node: v28 0 0, Next: v27 3 1, Prev: v28 1 0, Up: History<2>
+
+9.171 v28.0.0
+=============
+
+27 Sep 2016
+
+ * #733(1): 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(2): Bump certifi.
+
+ * #719(3): Suppress decoding errors and instead log a warning when
+ metadata cannot be decoded.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/733
+
+ (2) https://github.com/pypa/setuptools/issues/795
+
+ (3) https://github.com/pypa/setuptools/issues/719
+
+
+File: setuptools.info, Node: v27 3 1, Next: v27 3 0, Prev: v28 0 0, Up: History<2>
+
+9.172 v27.3.1
+=============
+
+27 Sep 2016
+
+ * #790(1): 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).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/790
+
+
+File: setuptools.info, Node: v27 3 0, Next: v27 2 0, Prev: v27 3 1, Up: History<2>
+
+9.173 v27.3.0
+=============
+
+20 Sep 2016
+
+ * #794(1): In test command, add installed eggs to PYTHONPATH when
+ invoking tests so that subprocesses will also have the dependencies
+ available. Fixes tox 330(2).
+
+ * #795(3): Update vendored pyparsing 2.1.9.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/794
+
+ (2) https://github.com/tox-dev/tox/issues/330
+
+ (3) https://github.com/pypa/setuptools/issues/795
+
+
+File: setuptools.info, Node: v27 2 0, Next: v27 1 2, Prev: v27 3 0, Up: History<2>
+
+9.174 v27.2.0
+=============
+
+14 Sep 2016
+
+ * #520(1) and #513(2): Suppress ValueErrors in
+ fixup_namespace_packages when lookup fails.
+
+ * Nicer, more consistent interfaces for msvc monkeypatching.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/520
+
+ (2) https://github.com/pypa/setuptools/issues/513
+
+
+File: setuptools.info, Node: v27 1 2, Next: v27 1 1, Prev: v27 2 0, Up: History<2>
+
+9.175 v27.1.2
+=============
+
+09 Sep 2016
+
+ * #779(1) via #781(2): Fix circular import.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/779
+
+ (2) https://github.com/pypa/setuptools/issues/781
+
+
+File: setuptools.info, Node: v27 1 1, Next: v27 1 0, Prev: v27 1 2, Up: History<2>
+
+9.176 v27.1.1
+=============
+
+09 Sep 2016
+
+ * #778(1): Fix MSVC monkeypatching.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/778
+
+
+File: setuptools.info, Node: v27 1 0, Next: v27 0 0, Prev: v27 1 1, Up: History<2>
+
+9.177 v27.1.0
+=============
+
+09 Sep 2016
+
+ * Introduce the (private) ‘monkey’ module to encapsulate the
+ distutils monkeypatching behavior.
+
+
+File: setuptools.info, Node: v27 0 0, Next: v26 1 1, Prev: v27 1 0, Up: History<2>
+
+9.178 v27.0.0
+=============
+
+09 Sep 2016
+
+ * Now use Warehouse by default for ‘upload’, patching
+ ‘distutils.config.PyPIRCCommand’ to affect default behavior.
+
+ Any config in .pypirc should be updated to replace
+
+ ‘https://pypi.python.org/pypi/’
+
+ with
+
+ ‘https://upload.pypi.org/legacy/’
+
+ 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(1): Use EXT_SUFFIX for py_limited_api renaming.
+
+ * #774(2) and #775(3): Use LegacyVersion from packaging when
+ detecting numpy versions.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/776
+
+ (2) https://github.com/pypa/setuptools/issues/774
+
+ (3) https://github.com/pypa/setuptools/issues/775
+
+
+File: setuptools.info, Node: v26 1 1, Next: v26 1 0, Prev: v27 0 0, Up: History<2>
+
+9.179 v26.1.1
+=============
+
+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.
+
+
+File: setuptools.info, Node: v26 1 0, Next: v26 0 0, Prev: v26 1 1, Up: History<2>
+
+9.180 v26.1.0
+=============
+
+28 Aug 2016
+
+ * #763(1): ‘pkg_resources.get_default_cache’ now defers to the
+ appdirs project(2) to resolve the cache directory. Adds a vendored
+ dependency on appdirs to pkg_resources.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/763
+
+ (2) https://pypi.org/project/appdirs
+
+
+File: setuptools.info, Node: v26 0 0, Next: v25 4 0, Prev: v26 1 0, Up: History<2>
+
+9.181 v26.0.0
+=============
+
+20 Aug 2016
+
+ * #748(1): 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(2)).
+
+ * #459(3) via #736(4): 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(5) via #753(6): When indicating ‘py_limited_api’ to Extension,
+ it must be passed as a keyword argument.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/748
+
+ (2) http://bugs.python.org/issue27819
+
+ (3) https://github.com/pypa/setuptools/issues/459
+
+ (4) https://github.com/pypa/setuptools/issues/736
+
+ (5) https://github.com/pypa/setuptools/issues/752
+
+ (6) https://github.com/pypa/setuptools/issues/753
+
+
+File: setuptools.info, Node: v25 4 0, Next: v25 3 0, Prev: v26 0 0, Up: History<2>
+
+9.182 v25.4.0
+=============
+
+19 Aug 2016
+
+ * 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.
+
+
+File: setuptools.info, Node: v25 3 0, Next: v25 2 0, Prev: v25 4 0, Up: History<2>
+
+9.183 v25.3.0
+=============
+
+19 Aug 2016
+
+ * #739(1) Fix unquoted libpaths by fixing compatibility between
+ ‘numpy.distutils’ and ‘distutils._msvccompiler’ for numpy < 1.11.2
+ (Fix issue #728(2), error also fixed in Numpy).
+
+ * #731(3): Bump certifi.
+
+ * Style updates. See #740(4), #741(5), #743(6), #744(7), #742(8),
+ #747(9).
+
+ * #735(10): include license file.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/739
+
+ (2) https://github.com/pypa/setuptools/issues/728
+
+ (3) https://github.com/pypa/setuptools/issues/731
+
+ (4) https://github.com/pypa/setuptools/issues/740
+
+ (5) https://github.com/pypa/setuptools/issues/741
+
+ (6) https://github.com/pypa/setuptools/issues/743
+
+ (7) https://github.com/pypa/setuptools/issues/744
+
+ (8) https://github.com/pypa/setuptools/issues/742
+
+ (9) https://github.com/pypa/setuptools/issues/747
+
+ (10) https://github.com/pypa/setuptools/issues/735
+
+
+File: setuptools.info, Node: v25 2 0, Next: v25 1 6, Prev: v25 3 0, Up: History<2>
+
+9.184 v25.2.0
+=============
+
+12 Aug 2016
+
+ * #612(1) via #730(2): Add a LICENSE file which needs to be provided
+ by the terms of the MIT license.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/612
+
+ (2) https://github.com/pypa/setuptools/issues/730
+
+
+File: setuptools.info, Node: v25 1 6, Next: v25 1 5, Prev: v25 2 0, Up: History<2>
+
+9.185 v25.1.6
+=============
+
+05 Aug 2016
+
+ * #725(1): revert ‘library_dir_option’ patch (Error is related to
+ ‘numpy.distutils’ and make errors on non Numpy users).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/725
+
+
+File: setuptools.info, Node: v25 1 5, Next: v25 1 4, Prev: v25 1 6, Up: History<2>
+
+9.186 v25.1.5
+=============
+
+05 Aug 2016
+
+ * #720(1)
+
+ * #723(2): Improve patch for ‘library_dir_option’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/720
+
+ (2) https://github.com/pypa/setuptools/issues/723
+
+
+File: setuptools.info, Node: v25 1 4, Next: v25 1 3, Prev: v25 1 5, Up: History<2>
+
+9.187 v25.1.4
+=============
+
+04 Aug 2016
+
+ * #717(1)
+
+ * #713(2)
+
+ * #707(3): Fix Python 2 compatibility for MSVC by catching errors
+ properly.
+
+ * #715(4): Fix unquoted libpaths by patching ‘library_dir_option’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/717
+
+ (2) https://github.com/pypa/setuptools/issues/713
+
+ (3) https://github.com/pypa/setuptools/issues/707
+
+ (4) https://github.com/pypa/setuptools/issues/715
+
+
+File: setuptools.info, Node: v25 1 3, Next: v25 1 2, Prev: v25 1 4, Up: History<2>
+
+9.188 v25.1.3
+=============
+
+02 Aug 2016
+
+ * #714(1) and #704(2): Revert fix as it breaks other components
+ downstream that can’t handle unicode. See #709(3), #710(4), and
+ #712(5).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/714
+
+ (2) https://github.com/pypa/setuptools/issues/704
+
+ (3) https://github.com/pypa/setuptools/issues/709
+
+ (4) https://github.com/pypa/setuptools/issues/710
+
+ (5) https://github.com/pypa/setuptools/issues/712
+
+
+File: setuptools.info, Node: v25 1 2, Next: v25 1 1, Prev: v25 1 3, Up: History<2>
+
+9.189 v25.1.2
+=============
+
+01 Aug 2016
+
+ * #704(1): 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(2): MSVC compatibility - catch errors properly in
+ RegistryInfo.lookup.
+
+ * #702(3): Prevent UnboundLocalError when initial working_set is
+ empty.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/704
+
+ (2) https://github.com/pypa/setuptools/issues/646
+
+ (3) https://github.com/pypa/setuptools/issues/702
+
+
+File: setuptools.info, Node: v25 1 1, Next: v25 1 0, Prev: v25 1 2, Up: History<2>
+
+9.190 v25.1.1
+=============
+
+28 Jul 2016
+
+ * #686(1): Fix issue in sys.path ordering by pkg_resources when
+ rewrite technique is “raw”.
+
+ * #699(2): Fix typo in msvc support.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/686
+
+ (2) https://github.com/pypa/setuptools/issues/699
+
+
+File: setuptools.info, Node: v25 1 0, Next: v25 0 2, Prev: v25 1 1, Up: History<2>
+
+9.191 v25.1.0
+=============
+
+25 Jul 2016
+
+ * #609(1): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/609
+
+
+File: setuptools.info, Node: v25 0 2, Next: v25 0 1, Prev: v25 1 0, Up: History<2>
+
+9.192 v25.0.2
+=============
+
+25 Jul 2016
+
+ * #688(1): Fix AttributeError in setup.py when invoked not from the
+ current directory.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/688
+
+
+File: setuptools.info, Node: v25 0 1, Next: v25 0 0, Prev: v25 0 2, Up: History<2>
+
+9.193 v25.0.1
+=============
+
+25 Jul 2016
+
+ * 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(1), #678(2), #679(3), #681(4),
+ #685(5).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/677
+
+ (2) https://github.com/pypa/setuptools/issues/678
+
+ (3) https://github.com/pypa/setuptools/issues/679
+
+ (4) https://github.com/pypa/setuptools/issues/681
+
+ (5) https://github.com/pypa/setuptools/issues/685
+
+
+File: setuptools.info, Node: v25 0 0, Next: v24 3 1, Prev: v25 0 1, Up: History<2>
+
+9.194 v25.0.0
+=============
+
+23 Jul 2016
+
+ * #674(1): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/674
+
+
+File: setuptools.info, Node: v24 3 1, Next: v24 3 0, Prev: v25 0 0, Up: History<2>
+
+9.195 v24.3.1
+=============
+
+23 Jul 2016
+
+ * #398(1): 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(2).
+
+ * #663(3), #670(4): More style updates.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/398
+
+ (2) https://github.com/pypa/setuptools/issues/188
+
+ (3) https://github.com/pypa/setuptools/issues/663
+
+ (4) https://github.com/pypa/setuptools/issues/670
+
+
+File: setuptools.info, Node: v24 3 0, Next: v24 2 1, Prev: v24 3 1, Up: History<2>
+
+9.196 v24.3.0
+=============
+
+21 Jul 2016
+
+ * #516(1): 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.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/516
+
+
+File: setuptools.info, Node: v24 2 1, Next: v24 2 0, Prev: v24 3 0, Up: History<2>
+
+9.197 v24.2.1
+=============
+
+21 Jul 2016
+
+ * #667(1): Update Metadata-Version to 1.2 when ‘python_requires’ is
+ supplied.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/667
+
+
+File: setuptools.info, Node: v24 2 0, Next: v24 1 1, Prev: v24 2 1, Up: History<2>
+
+9.198 v24.2.0
+=============
+
+20 Jul 2016
+
+ * #631(1): Add support for ‘python_requires’ keyword.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/631
+
+
+File: setuptools.info, Node: v24 1 1, Next: v24 1 0, Prev: v24 2 0, Up: History<2>
+
+9.199 v24.1.1
+=============
+
+20 Jul 2016
+
+ * More style updates. See #660(1), #661(2), #641(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/660
+
+ (2) https://github.com/pypa/setuptools/issues/661
+
+ (3) https://github.com/pypa/setuptools/issues/641
+
+
+File: setuptools.info, Node: v24 1 0, Next: v24 0 3, Prev: v24 1 1, Up: History<2>
+
+9.200 v24.1.0
+=============
+
+20 Jul 2016
+
+ * #659(1): ‘setup.py’ now will fail fast and with a helpful error
+ message when the necessary metadata is missing.
+
+ * More style updates. See #656(2), #635(3), #640(4), #644(5),
+ #650(6), #652(7), and #655(8).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/659
+
+ (2) https://github.com/pypa/setuptools/issues/656
+
+ (3) https://github.com/pypa/setuptools/issues/635
+
+ (4) https://github.com/pypa/setuptools/issues/640
+
+ (5) https://github.com/pypa/setuptools/issues/644
+
+ (6) https://github.com/pypa/setuptools/issues/650
+
+ (7) https://github.com/pypa/setuptools/issues/652
+
+ (8) https://github.com/pypa/setuptools/issues/655
+
+
+File: setuptools.info, Node: v24 0 3, Next: v24 0 2, Prev: v24 1 0, Up: History<2>
+
+9.201 v24.0.3
+=============
+
+14 Jul 2016
+
+ * Updated style in much of the codebase to match community
+ expectations. See #632(1), #633(2), #634(3), #637(4), #639(5),
+ #638(6), #642(7), #648(8).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/632
+
+ (2) https://github.com/pypa/setuptools/issues/633
+
+ (3) https://github.com/pypa/setuptools/issues/634
+
+ (4) https://github.com/pypa/setuptools/issues/637
+
+ (5) https://github.com/pypa/setuptools/issues/639
+
+ (6) https://github.com/pypa/setuptools/issues/638
+
+ (7) https://github.com/pypa/setuptools/issues/642
+
+ (8) https://github.com/pypa/setuptools/issues/648
+
+
+File: setuptools.info, Node: v24 0 2, Next: v24 0 1, Prev: v24 0 3, Up: History<2>
+
+9.202 v24.0.2
+=============
+
+04 Jul 2016
+
+ * If MSVC++14 is needed ‘setuptools.msvc’ now redirect user to Visual
+ C++ Build Tools web page.
+
+
+File: setuptools.info, Node: v24 0 1, Next: v24 0 0, Prev: v24 0 2, Up: History<2>
+
+9.203 v24.0.1
+=============
+
+03 Jul 2016
+
+ * #625(1) and #626(2): Fixes on ‘setuptools.msvc’ mainly for Python 2
+ and Linux.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/625
+
+ (2) https://github.com/pypa/setuptools/issues/626
+
+
+File: setuptools.info, Node: v24 0 0, Next: v23 2 1, Prev: v24 0 1, Up: History<2>
+
+9.204 v24.0.0
+=============
+
+02 Jul 2016
+
+ * Pull Request #174(1): Add more aggressive support for standalone
+ Microsoft Visual C++ compilers in msvc9compiler patch.
+ Particularly : Windows SDK 6.1 and 7.0 (MSVC++ 9.0), Windows SDK
+ 7.1 (MSVC++ 10.0), Visual C++ Build Tools 2015 (MSVC++14)
+
+ * Renamed ‘setuptools.msvc9_support’ to ‘setuptools.msvc’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/174
+
+
+File: setuptools.info, Node: v23 2 1, Next: v23 1 0, Prev: v24 0 0, Up: History<2>
+
+9.205 v23.2.1
+=============
+
+02 Jul 2016
+
+Re-release of v23.2.0, which was missing the intended commits.
+
+ * #623(1): Remove used of deprecated ‘U’ flag when reading manifests.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/623
+
+
+File: setuptools.info, Node: v23 1 0, Next: v23 0 0, Prev: v23 2 1, Up: History<2>
+
+9.206 v23.1.0
+=============
+
+24 Jun 2016
+
+ * #619(1): Deprecated ‘tag_svn_revision’ distribution option.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/619
+
+
+File: setuptools.info, Node: v23 0 0, Next: v22 0 5, Prev: v23 1 0, Up: History<2>
+
+9.207 v23.0.0
+=============
+
+09 Jun 2016
+
+ * #611(1): Removed ARM executables for CLI and GUI script launchers
+ on Windows. If this was a feature you cared about, please comment
+ in the ticket.
+
+ * #604(2): Removed docs building support. The project now relies on
+ documentation hosted at ‘https://setuptools.readthedocs.io/’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/611
+
+ (2) https://github.com/pypa/setuptools/issues/604
+
+
+File: setuptools.info, Node: v22 0 5, Next: v22 0 4, Prev: v23 0 0, Up: History<2>
+
+9.208 v22.0.5
+=============
+
+03 Jun 2016
+
+ * #604(1): Restore repository for upload_docs command to restore
+ publishing of docs during release.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/604
+
+
+File: setuptools.info, Node: v22 0 4, Next: v22 0 3, Prev: v22 0 5, Up: History<2>
+
+9.209 v22.0.4
+=============
+
+03 Jun 2016
+
+ * #589(1): Upload releases to pypi.io using the upload hostname and
+ legacy path.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/589
+
+
+File: setuptools.info, Node: v22 0 3, Next: v22 0 2, Prev: v22 0 4, Up: History<2>
+
+9.210 v22.0.3
+=============
+
+03 Jun 2016
+
+ * #589(1): Releases are now uploaded to pypi.io (Warehouse) even when
+ releases are made on Twine via Travis.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/589
+
+
+File: setuptools.info, Node: v22 0 2, Next: v22 0 1, Prev: v22 0 3, Up: History<2>
+
+9.211 v22.0.2
+=============
+
+03 Jun 2016
+
+ * #589(1): Releases are now uploaded to pypi.io (Warehouse).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/589
+
+
+File: setuptools.info, Node: v22 0 1, Next: v22 0 0, Prev: v22 0 2, Up: History<2>
+
+9.212 v22.0.1
+=============
+
+03 Jun 2016
+
+ * #190(1): On Python 2, if unicode is passed for packages to
+ ‘build_py’ command, it will be handled just as with text on Python
+ 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/190
+
+
+File: setuptools.info, Node: v22 0 0, Next: v21 2 2, Prev: v22 0 1, Up: History<2>
+
+9.213 v22.0.0
+=============
+
+01 Jun 2016
+
+Intended to be v21.3.0, but jaraco accidentally released as a major
+bump.
+
+ * #598(1): Setuptools now lists itself first in the User-Agent for
+ web requests, better following the guidelines in RFC 7231(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/598
+
+ (2) https://tools.ietf.org/html/rfc7231#section-5.5.3
+
+
+File: setuptools.info, Node: v21 2 2, Next: v21 2 1, Prev: v22 0 0, Up: History<2>
+
+9.214 v21.2.2
+=============
+
+29 May 2016
+
+ * Minor fixes to changelog and docs.
+
+
+File: setuptools.info, Node: v21 2 1, Next: v21 2 0, Prev: v21 2 2, Up: History<2>
+
+9.215 v21.2.1
+=============
+
+22 May 2016
+
+ * #261(1): Exclude directories when resolving globs in package_data.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/261
+
+
+File: setuptools.info, Node: v21 2 0, Next: v21 1 0, Prev: v21 2 1, Up: History<2>
+
+9.216 v21.2.0
+=============
+
+21 May 2016
+
+ * #539(1): In the easy_install get_site_dirs, honor all paths found
+ in ‘site.getsitepackages’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/539
+
+
+File: setuptools.info, Node: v21 1 0, Next: v21 0 0, Prev: v21 2 0, Up: History<2>
+
+9.217 v21.1.0
+=============
+
+18 May 2016
+
+ * #572(1): In build_ext, now always import ‘_CONFIG_VARS’ from
+ ‘distutils’ rather than from ‘sysconfig’ to allow
+ ‘distutils.sysconfig.customize_compiler’ configure the OS X
+ compiler for ‘-dynamiclib’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/572
+
+
+File: setuptools.info, Node: v21 0 0, Next: v20 10 0, Prev: v21 1 0, Up: History<2>
+
+9.218 v21.0.0
+=============
+
+02 May 2016
+
+ * Removed ez_setup.py from Setuptools sdist. The bootstrap script
+ will be maintained in its own branch and should be generally be
+ retrieved from its canonical location at
+ ‘https://bootstrap.pypa.io/ez_setup.py’.
+
+
+File: setuptools.info, Node: v20 10 0, Next: v20 9 0, Prev: v21 0 0, Up: History<2>
+
+9.219 v20.10.0
+==============
+
+25 Apr 2016
+
+ * #553(1): egg_info section is now generated in a deterministic
+ order, matching the order generated by earlier versions of Python.
+ Except on Python 2.6, order is preserved when existing settings are
+ present.
+
+ * #556(2): Update to Packaging 16.7(3), restoring support for
+ deprecated ‘python_implmentation’ marker.
+
+ * #555(4): Upload command now prompts for a password when uploading
+ to PyPI (or other repository) if no password is present in .pypirc
+ or in the keyring.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/553
+
+ (2) https://github.com/pypa/setuptools/issues/556
+
+ (3) https://github.com/pypa/packaging/blob/16.7/CHANGELOG.rst
+
+ (4) https://github.com/pypa/setuptools/issues/555
+
+
+File: setuptools.info, Node: v20 9 0, Next: v20 8 1, Prev: v20 10 0, Up: History<2>
+
+9.220 v20.9.0
+=============
+
+16 Apr 2016
+
+ * #548(1): Update certify version to 2016.2.28
+
+ * #545(2): Safely handle deletion of non-zip eggs in rotate command.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/548
+
+ (2) https://github.com/pypa/setuptools/issues/545
+
+
+File: setuptools.info, Node: v20 8 1, Next: v20 8 0, Prev: v20 9 0, Up: History<2>
+
+9.221 v20.8.1
+=============
+
+15 Apr 2016
+
+ * Issue #544(1): Fix issue with extra environment marker processing
+ in WorkingSet due to refactor in v20.7.0.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/544
+
+
+File: setuptools.info, Node: v20 8 0, Next: v20 7 0, Prev: v20 8 1, Up: History<2>
+
+9.222 v20.8.0
+=============
+
+15 Apr 2016
+
+ * Issue #543(1): Re-release so that latest release doesn’t cause déjà
+ vu with distribute and setuptools 0.7 in older environments.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/543
+
+
+File: setuptools.info, Node: v20 7 0, Next: v20 6 8, Prev: v20 8 0, Up: History<2>
+
+9.223 v20.7.0
+=============
+
+10 Apr 2016
+
+ * Refactored extra environment marker processing in WorkingSet.
+
+ * Issue #533(1): Fixed intermittent test failures.
+
+ * Issue #536(2): In msvc9_support, trap additional exceptions that
+ might occur when importing ‘distutils.msvc9compiler’ in mingw
+ environments.
+
+ * Issue #537(3): Provide better context when package metadata fails
+ to decode in UTF-8.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/533
+
+ (2) https://github.com/pypa/setuptools/issues/536
+
+ (3) https://github.com/pypa/setuptools/issues/537
+
+
+File: setuptools.info, Node: v20 6 8, Next: v20 6 7, Prev: v20 7 0, Up: History<2>
+
+9.224 v20.6.8
+=============
+
+09 May 2016
+
+ * Issue #523(1): Restored support for environment markers, now
+ honoring ‘extra’ environment markers.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/523
+
+
+File: setuptools.info, Node: v20 6 7, Next: v20 6 6, Prev: v20 6 8, Up: History<2>
+
+9.225 v20.6.7
+=============
+
+31 Mar 2016
+
+ * Issue #523(1): Disabled support for environment markers introduced
+ in v20.5.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/523
+
+
+File: setuptools.info, Node: v20 6 6, Next: v20 6 0, Prev: v20 6 7, Up: History<2>
+
+9.226 v20.6.6
+=============
+
+30 Mar 2016
+
+ * Issue #503(1): Restore support for PEP 345(2) environment markers
+ by updating to Packaging 16.6(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/503
+
+ (2) https://www.python.org/dev/peps/pep-0345/
+
+ (3) https://github.com/pypa/packaging/blob/16.6/CHANGELOG.rst
+
+
+File: setuptools.info, Node: v20 6 0, Next: 20 5, Prev: v20 6 6, Up: History<2>
+
+9.227 v20.6.0
+=============
+
+29 Mar 2016
+
+ * New release process that relies on bumpversion(1) and Travis CI for
+ continuous deployment.
+
+ * Project versioning semantics now follow semver(2) precisely. The
+ ‘v’ prefix on version numbers now also allows version numbers to be
+ referenced in the changelog, e.g.
+ ‘http://setuptools.readthedocs.io/en/latest/history.html#v20-6-0’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/peritus/bumpversion
+
+ (2) https://semver.org
+
+
+File: setuptools.info, Node: 20 5, Next: 20 4, Prev: v20 6 0, Up: History<2>
+
+9.228 20.5
+==========
+
+29 Mar 2016
+
+ * BB Pull Request #185(1), #470(2): Add support for environment
+ markers in requirements in install_requires, setup_requires,
+ tests_require as well as adding a test for the existing
+ extra_requires machinery.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/185
+
+ (2) https://github.com/pypa/setuptools/issues/470
+
+
+File: setuptools.info, Node: 20 4, Next: 20 3 1, Prev: 20 5, Up: History<2>
+
+9.229 20.4
+==========
+
+29 Mar 2016
+
+ * Issue #422(1): Moved hosting to Github(2) from Bitbucket(3).
+ Issues have been migrated, though all issues and comments are
+ attributed to bb-migration. So if you have a particular issue or
+ issues to which you’ve been subscribed, you will want to “watch”
+ the equivalent issue in Github. The Bitbucket project will be
+ retained for the indefinite future, but Github now hosts the
+ canonical project repository.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/422
+
+ (2) https://github.com/pypa/setuptools
+
+ (3) https://bitbucket.org/pypa/setuptools
+
+
+File: setuptools.info, Node: 20 3 1, Next: 20 3, Prev: 20 4, Up: History<2>
+
+9.230 20.3.1
+============
+
+18 Mar 2016
+
+ * Issue #519(1): Remove import hook when reloading the
+ ‘pkg_resources’ module.
+
+ * BB Pull Request #184(2): Update documentation in ‘pkg_resources’
+ around new ‘Requirement’ implementation.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/519
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/184
+
+
+File: setuptools.info, Node: 20 3, Next: 20 2 2, Prev: 20 3 1, Up: History<2>
+
+9.231 20.3
+==========
+
+15 Mar 2016
+
+ * BB Pull Request #179(1): ‘pkg_resources.Requirement’ objects are
+ now a subclass of ‘packaging.requirements.Requirement’, allowing
+ any environment markers and url (if any) to be affiliated with the
+ requirement
+
+ * BB Pull Request #179(2): Restore use of RequirementParseError
+ exception unintentionally dropped in 20.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/179
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/179
+
+
+File: setuptools.info, Node: 20 2 2, Next: 20 2 1, Prev: 20 3, Up: History<2>
+
+9.232 20.2.2
+============
+
+27 Feb 2016
+
+ * Issue #502(1): Correct regression in parsing of multiple version
+ specifiers separated by commas and spaces.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/502
+
+
+File: setuptools.info, Node: 20 2 1, Next: 20 2, Prev: 20 2 2, Up: History<2>
+
+9.233 20.2.1
+============
+
+24 Feb 2016
+
+ * Issue #499(1): Restore compatibility for legacy versions by bumping
+ to packaging 16.4(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/499
+
+ (2) https://github.com/pypa/packaging/blob/16.4/CHANGELOG.rst
+
+
+File: setuptools.info, Node: 20 2, Next: 20 1 1, Prev: 20 2 1, Up: History<2>
+
+9.234 20.2
+==========
+
+19 Feb 2016
+
+ * Changelog now includes release dates and links to PEPs.
+
+ * BB Pull Request #173(1): Replace dual PEP 345(2) _markerlib
+ implementation and PEP 426(3) implementation of environment marker
+ support from packaging 16.1(4) and PEP 508(5). Fixes Issue
+ #122(6). See also BB Pull Request #175(7), BB Pull Request
+ #168(8), and BB Pull Request #164(9). Additionally:
+
+ - ‘Requirement.parse’ no longer retains the order of
+ extras.
+
+ - ‘parse_requirements’ now requires that all versions be
+ PEP-440(10) compliant, as revealed in #499(11). Packages
+ released with invalid local versions should be
+ re-released using the proper local version syntax, e.g.
+ ‘mypkg-1.0+myorg.1’.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/173
+
+ (2) https://www.python.org/dev/peps/pep-0345/
+
+ (3) https://www.python.org/dev/peps/pep-0426/
+
+ (4) https://github.com/pypa/packaging/blob/16.1/CHANGELOG.rst
+
+ (5) https://www.python.org/dev/peps/pep-0508/
+
+ (6) https://github.com/pypa/setuptools/issues/122
+
+ (7) https://bitbucket.org/pypa/setuptools/pull-request/175
+
+ (8) https://bitbucket.org/pypa/setuptools/pull-request/168
+
+ (9) https://bitbucket.org/pypa/setuptools/pull-request/164
+
+ (10) https://www.python.org/dev/peps/pep-0440/
+
+ (11) https://github.com/pypa/setuptools/issues/499
+
+
+File: setuptools.info, Node: 20 1 1, Next: 20 1, Prev: 20 2, Up: History<2>
+
+9.235 20.1.1
+============
+
+12 Feb 2016
+
+ * Update ‘upload_docs’ command to also honor keyring for password
+ resolution.
+
+
+File: setuptools.info, Node: 20 1, Next: 20 0, Prev: 20 1 1, Up: History<2>
+
+9.236 20.1
+==========
+
+11 Feb 2016
+
+ * Added support for using passwords from keyring in the upload
+ command. See the upload docs(1) for details.
+
+ ---------- Footnotes ----------
+
+ (1)
+https://setuptools.readthedocs.io/en/latest/setuptools.html#upload-upload-source-and-or-egg-distributions-to-pypi
+
+
+File: setuptools.info, Node: 20 0, Next: 19 7, Prev: 20 1, Up: History<2>
+
+9.237 20.0
+==========
+
+07 Feb 2016
+
+ * Issue #118(1): Once again omit the package metadata (egg-info) from
+ the list of outputs in ‘--record’. This version of setuptools can
+ no longer be used to upgrade pip earlier than 6.0.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/118
+
+
+File: setuptools.info, Node: 19 7, Next: 19 6 2, Prev: 20 0, Up: History<2>
+
+9.238 19.7
+==========
+
+03 Feb 2016
+
+ * Off-project PR: 0dcee79(1) and f9bd9b9(2) For FreeBSD, also honor
+ root certificates from ca_root_nss(3).
+
+ ---------- Footnotes ----------
+
+ (1)
+https://github.com/pypa/setuptools/commit/0dcee791dfdcfacddaaec79b29f30a347a147413
+
+ (2)
+https://github.com/pypa/setuptools/commit/f9bd9b9f5df54ef5a0bf8d16c3a889ab8c640580
+
+ (3)
+https://github.com/pypa/setuptools/commit/3ae46c30225eb46e1f5aada1a19e88b79f04dc72
+
+
+File: setuptools.info, Node: 19 6 2, Next: 19 6 1, Prev: 19 7, Up: History<2>
+
+9.239 19.6.2
+============
+
+31 Jan 2016
+
+ * Issue #491(1): Correct regression incurred in 19.4 where a
+ double-namespace package installed using pip would cause a
+ TypeError.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/491
+
+
+File: setuptools.info, Node: 19 6 1, Next: 19 6, Prev: 19 6 2, Up: History<2>
+
+9.240 19.6.1
+============
+
+29 Jan 2016
+
+ * Restore compatibility for PyPy 3 compatibility lost in 19.4.1
+ addressing Issue #487(1).
+
+ * ‘setuptools.launch’ shim now loads scripts in a new namespace,
+ avoiding getting relative imports from the setuptools package on
+ Python 2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/487
+
+
+File: setuptools.info, Node: 19 6, Next: 19 5, Prev: 19 6 1, Up: History<2>
+
+9.241 19.6
+==========
+
+24 Jan 2016
+
+ * Added a new entry script ‘setuptools.launch’, implementing the shim
+ found in ‘pip.util.setuptools_build’. Use this command to launch
+ distutils-only packages under setuptools in the same way that pip
+ does, causing the setuptools monkeypatching of distutils to be
+ invoked prior to invoking a script. Useful for debugging or
+ otherwise installing a distutils-only package under setuptools when
+ pip isn’t available or otherwise does not expose the desired
+ functionality. For example:
+
+ $ python -m setuptools.launch setup.py develop
+
+ * Issue #488(1): Fix dual manifestation of Extension class in
+ extension packages installed as dependencies when Cython is
+ present.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/488
+
+
+File: setuptools.info, Node: 19 5, Next: 19 4 1, Prev: 19 6, Up: History<2>
+
+9.242 19.5
+==========
+
+23 Jan 2016
+
+ * Issue #486(1): Correct TypeError when getfilesystemencoding returns
+ None.
+
+ * Issue #139(2): Clarified the license as MIT.
+
+ * BB Pull Request #169(3): Removed special handling of command spec
+ in scripts for Jython.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/486
+
+ (2) https://github.com/pypa/setuptools/issues/139
+
+ (3) https://bitbucket.org/pypa/setuptools/pull-request/169
+
+
+File: setuptools.info, Node: 19 4 1, Next: 19 4, Prev: 19 5, Up: History<2>
+
+9.243 19.4.1
+============
+
+23 Jan 2016
+
+ * Issue #487(1): Use direct invocation of ‘importlib.machinery’ in
+ ‘pkg_resources’ to avoid missing detection on relevant platforms.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/487
+
+
+File: setuptools.info, Node: 19 4, Next: 19 3, Prev: 19 4 1, Up: History<2>
+
+9.244 19.4
+==========
+
+16 Jan 2016
+
+ * Issue #341(1): Correct error in path handling of package data files
+ in ‘build_py’ command when package is empty.
+
+ * Distribute #323(2), Issue #141(3), Issue #207(4), and BB Pull
+ Request #167(5): Another implementation of
+ ‘pkg_resources.WorkingSet’ and ‘pkg_resources.Distribution’ that
+ supports replacing an extant package with a new one, allowing for
+ setup_requires dependencies to supersede installed packages for the
+ session.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/341
+
+ (2) https://bitbucket.org/tarek/distribute/issue/323
+
+ (3) https://github.com/pypa/setuptools/issues/141
+
+ (4) https://github.com/pypa/setuptools/issues/207
+
+ (5) https://bitbucket.org/pypa/setuptools/pull-request/167
+
+
+File: setuptools.info, Node: 19 3, Next: 19 2, Prev: 19 4, Up: History<2>
+
+9.245 19.3
+==========
+
+06 Jan 2016
+
+ * Issue #229(1): Implement new technique for readily incorporating
+ dependencies conditionally from vendored copies or primary
+ locations. Adds a new dependency on six.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/229
+
+
+File: setuptools.info, Node: 19 2, Next: 19 1 1, Prev: 19 3, Up: History<2>
+
+9.246 19.2
+==========
+
+25 Dec 2015
+
+ * BB Pull Request #163(1): Add get_command_list method to
+ Distribution.
+
+ * BB Pull Request #162(2): Add missing whitespace to multiline string
+ literals.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/163
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/162
+
+
+File: setuptools.info, Node: 19 1 1, Next: 19 1, Prev: 19 2, Up: History<2>
+
+9.247 19.1.1
+============
+
+16 Dec 2015
+
+ * Issue #476(1): Cast version to string (using default encoding) to
+ avoid creating Unicode types on Python 2 clients.
+
+ * Issue #477(2): In Powershell downloader, use explicit rendering of
+ strings, rather than rely on ‘repr’, which can be incorrect
+ (especially on Python 2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/476
+
+ (2) https://github.com/pypa/setuptools/issues/477
+
+
+File: setuptools.info, Node: 19 1, Next: 19 0, Prev: 19 1 1, Up: History<2>
+
+9.248 19.1
+==========
+
+16 Dec 2015
+
+ * Issue #215(1): The bootstrap script ‘ez_setup.py’ now automatically
+ detects the latest version of setuptools (using PyPI JSON API)
+ rather than hard-coding a particular value.
+
+ * Issue #475(2): Fix incorrect usage in _translate_metadata2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/215
+
+ (2) https://github.com/pypa/setuptools/issues/475
+
+
+File: setuptools.info, Node: 19 0, Next: 18 8 1, Prev: 19 1, Up: History<2>
+
+9.249 19.0
+==========
+
+15 Dec 2015
+
+ * Issue #442(1): Use RawConfigParser for parsing .pypirc file.
+ Interpolated values are no longer honored in .pypirc files.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/442
+
+
+File: setuptools.info, Node: 18 8 1, Next: 18 8, Prev: 19 0, Up: History<2>
+
+9.250 18.8.1
+============
+
+13 Dec 2015
+
+ * Issue #440(1): Prevent infinite recursion when a SandboxViolation
+ or other UnpickleableException occurs in a sandbox context with
+ setuptools hidden. Fixes regression introduced in Setuptools 12.0.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/440
+
+
+File: setuptools.info, Node: 18 8, Next: 18 7 1, Prev: 18 8 1, Up: History<2>
+
+9.251 18.8
+==========
+
+11 Dec 2015
+
+ * Deprecated ‘egg_info.get_pkg_info_revision’.
+
+ * Issue #471(1): Don’t rely on repr for an HTML attribute value in
+ package_index.
+
+ * Issue #419(2): Avoid errors in FileMetadata when the metadata
+ directory is broken.
+
+ * Issue #472(3): Remove deprecated use of ‘U’ in mode parameter when
+ opening files.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/471
+
+ (2) https://github.com/pypa/setuptools/issues/419
+
+ (3) https://github.com/pypa/setuptools/issues/472
+
+
+File: setuptools.info, Node: 18 7 1, Next: 18 7, Prev: 18 8, Up: History<2>
+
+9.252 18.7.1
+============
+
+01 Dec 2015
+
+ * Issue #469(1): Refactored logic for Issue #419(2) fix to re-use
+ metadata loading from Provider.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/469
+
+ (2) https://github.com/pypa/setuptools/issues/419
+
+
+File: setuptools.info, Node: 18 7, Next: 18 6 1, Prev: 18 7 1, Up: History<2>
+
+9.253 18.7
+==========
+
+28 Nov 2015
+
+ * Update dependency on certify.
+
+ * BB Pull Request #160(1): Improve detection of gui script in
+ ‘easy_install._adjust_header’.
+
+ * Made ‘test.test_args’ a non-data property; alternate fix for the
+ issue reported in BB Pull Request #155(2).
+
+ * Issue #453(3): In ‘ez_setup’ bootstrap module, unload all
+ ‘pkg_resources’ modules following download.
+
+ * BB Pull Request #158(4): Honor PEP-488(5) when excluding files for
+ namespace packages.
+
+ * Issue #419(6) and BB Pull Request #144(7): Add experimental support
+ for reading the version info from distutils-installed metadata
+ rather than using the version in the filename.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/160
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/155
+
+ (3) https://github.com/pypa/setuptools/issues/453
+
+ (4) https://bitbucket.org/pypa/setuptools/pull-request/158
+
+ (5) https://www.python.org/dev/peps/pep-0488/
+
+ (6) https://github.com/pypa/setuptools/issues/419
+
+ (7) https://bitbucket.org/pypa/setuptools/pull-request/144
+
+
+File: setuptools.info, Node: 18 6 1, Next: 18 6, Prev: 18 7, Up: History<2>
+
+9.254 18.6.1
+============
+
+24 Nov 2015
+
+ * Issue #464(1): Correct regression in invocation of superclass on
+ old-style class on Python 2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/464
+
+
+File: setuptools.info, Node: 18 6, Next: 18 5, Prev: 18 6 1, Up: History<2>
+
+9.255 18.6
+==========
+
+24 Nov 2015
+
+ * Issue #439(1): When installing entry_point scripts under
+ development, omit the version number of the package, allowing any
+ version of the package to be used.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/439
+
+
+File: setuptools.info, Node: 18 5, Next: 18 4, Prev: 18 6, Up: History<2>
+
+9.256 18.5
+==========
+
+01 Nov 2015
+
+ * In preparation for dropping support for Python 3.2, a warning is
+ now logged when pkg_resources is imported on Python 3.2 or earlier
+ Python 3 versions.
+
+ * Add support for python_platform_implementation environment
+ marker(1).
+
+ * Fix dictionary mutation during iteration(2).
+
+ ---------- Footnotes ----------
+
+ (1)
+https://github.com/pypa/setuptools/commit/94416707fd59a65f4a8f7f70541d6b3fc018b626
+
+ (2)
+https://github.com/pypa/setuptools/commit/57ebfa41e0f96b97e599ecd931b7ae8a143e096e
+
+
+File: setuptools.info, Node: 18 4, Next: 18 3 2, Prev: 18 5, Up: History<2>
+
+9.257 18.4
+==========
+
+10 Oct 2015
+
+ * Issue #446(1): Test command now always invokes unittest, even if no
+ test suite is supplied.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/446
+
+
+File: setuptools.info, Node: 18 3 2, Next: 18 3 1, Prev: 18 4, Up: History<2>
+
+9.258 18.3.2
+============
+
+19 Sep 2015
+
+ * Correct another regression in setuptools.findall where the fix for
+ Python #12885(1) was lost.
+
+ ---------- Footnotes ----------
+
+ (1) http://bugs.python.org/issue12885
+
+
+File: setuptools.info, Node: 18 3 1, Next: 18 3, Prev: 18 3 2, Up: History<2>
+
+9.259 18.3.1
+============
+
+07 Sep 2015
+
+ * Issue #425(1): Correct regression in setuptools.findall.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/425
+
+
+File: setuptools.info, Node: 18 3, Next: 18 2, Prev: 18 3 1, Up: History<2>
+
+9.260 18.3
+==========
+
+06 Sep 2015
+
+ * BB Pull Request #135(1): Setuptools now allows disabling of the
+ manipulation of the sys.path during the processing of the
+ easy-install.pth file. To do so, set the environment variable
+ ‘SETUPTOOLS_SYS_PATH_TECHNIQUE’ to anything but “rewrite” (consider
+ “raw”). During any install operation with manipulation disabled,
+ setuptools packages will be appended to sys.path naturally.
+
+ Future versions may change the default behavior to disable
+ manipulation. If so, the default behavior can be retained by
+ setting the variable to “rewrite”.
+
+ * Issue #257(2): ‘easy_install --version’ now shows more detail about
+ the installation location and Python version.
+
+ * Refactor setuptools.findall in preparation for re-submission back
+ to distutils.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/135
+
+ (2) https://github.com/pypa/setuptools/issues/257
+
+
+File: setuptools.info, Node: 18 2, Next: 18 1, Prev: 18 3, Up: History<2>
+
+9.261 18.2
+==========
+
+19 Aug 2015
+
+ * Issue #412(1): More efficient directory search in ‘find_packages’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/412
+
+
+File: setuptools.info, Node: 18 1, Next: 18 0 1, Prev: 18 2, Up: History<2>
+
+9.262 18.1
+==========
+
+02 Aug 2015
+
+ * Upgrade to vendored packaging 15.3(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/packaging/blob/15.3/CHANGELOG.rst
+
+
+File: setuptools.info, Node: 18 0 1, Next: 18 0, Prev: 18 1, Up: History<2>
+
+9.263 18.0.1
+============
+
+24 Jun 2015
+
+ * Issue #401(1): Fix failure in test suite.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/401
+
+
+File: setuptools.info, Node: 18 0, Next: 17 1 1, Prev: 18 0 1, Up: History<2>
+
+9.264 18.0
+==========
+
+13 Jun 2015
+
+ * Dropped support for builds with Pyrex. Only Cython is supported.
+
+ * Issue #288(1): Detect Cython later in the build process, after
+ ‘setup_requires’ dependencies are resolved. Projects backed by
+ Cython can now be readily built with a ‘setup_requires’ dependency.
+ For example:
+
+ ext = setuptools.Extension('mylib', ['src/CythonStuff.pyx', 'src/CStuff.c'])
+ setuptools.setup(
+ ...
+ ext_modules=[ext],
+ setup_requires=['cython'],
+ )
+
+ For compatibility with older versions of setuptools, packagers
+ should still include ‘src/CythonMod.c’ in the source distributions
+ or require that Cython be present before building source
+ distributions. However, for systems with this build of setuptools,
+ Cython will be downloaded on demand.
+
+ * Issue #396(2): Fixed test failure on OS X.
+
+ * BB Pull Request #136(3): Remove excessive quoting from shebang
+ headers for Jython.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/288
+
+ (2) https://github.com/pypa/setuptools/issues/396
+
+ (3) https://bitbucket.org/pypa/setuptools/pull-request/136
+
+
+File: setuptools.info, Node: 17 1 1, Next: 17 1, Prev: 18 0, Up: History<2>
+
+9.265 17.1.1
+============
+
+08 Jun 2015
+
+ * Backed out unintended changes to pkg_resources, restoring removal
+ of deprecated imp module (ref(1)).
+
+ ---------- Footnotes ----------
+
+ (1)
+https://bitbucket.org/pypa/setuptools/commits/f572ec9563d647fa8d4ffc534f2af8070ea07a8b#comment-1881283
+
+
+File: setuptools.info, Node: 17 1, Next: 17 0, Prev: 17 1 1, Up: History<2>
+
+9.266 17.1
+==========
+
+07 Jun 2015
+
+ * Issue #380(1): Add support for range operators on environment
+ marker evaluation.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/380
+
+
+File: setuptools.info, Node: 17 0, Next: 16 0, Prev: 17 1, Up: History<2>
+
+9.267 17.0
+==========
+
+28 May 2015
+
+ * Issue #378(1): Do not use internal importlib._bootstrap module.
+
+ * Issue #390(2): Disallow console scripts with path separators in the
+ name. Removes unintended functionality and brings behavior into
+ parity with pip.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/378
+
+ (2) https://github.com/pypa/setuptools/issues/390
+
+
+File: setuptools.info, Node: 16 0, Next: 15 2, Prev: 17 0, Up: History<2>
+
+9.268 16.0
+==========
+
+18 May 2015
+
+ * BB Pull Request #130(1): Better error messages for errors in parsed
+ requirements.
+
+ * BB Pull Request #133(2): Removed ‘setuptools.tests’ from the
+ installed packages.
+
+ * BB Pull Request #129(3): Address deprecation warning due to usage
+ of imp module.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/130
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/133
+
+ (3) https://bitbucket.org/pypa/setuptools/pull-request/129
+
+
+File: setuptools.info, Node: 15 2, Next: 15 1, Prev: 16 0, Up: History<2>
+
+9.269 15.2
+==========
+
+26 Apr 2015
+
+ * Issue #373(1): Provisionally expose
+ ‘pkg_resources._initialize_master_working_set’, allowing for
+ imperative re-initialization of the master working set.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/373
+
+
+File: setuptools.info, Node: 15 1, Next: 15 0, Prev: 15 2, Up: History<2>
+
+9.270 15.1
+==========
+
+15 Apr 2015
+
+ * Updated to Packaging 15.1(1) to address Packaging #28(2).
+
+ * Fix ‘setuptools.sandbox._execfile()’ with Python 3.1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/packaging/blob/15.1/CHANGELOG.rst
+
+ (2) https://github.com/pypa/packaging/issues/28
+
+
+File: setuptools.info, Node: 15 0, Next: 14 3 1, Prev: 15 1, Up: History<2>
+
+9.271 15.0
+==========
+
+03 Apr 2015
+
+ * BB Pull Request #126(1): DistributionNotFound message now lists the
+ package or packages that required it. E.g.:
+
+ pkg_resources.DistributionNotFound: The 'colorama>=0.3.1' distribution was not found and is required by smlib.log.
+
+ Note that zc.buildout once dependended on the string rendering of
+ this message to determine the package that was not found. This
+ expectation has since been changed, but older versions of buildout
+ may experience problems. See Buildout #242(2) for details.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/126
+
+ (2) https://github.com/buildout/buildout/issues/242
+
+
+File: setuptools.info, Node: 14 3 1, Next: 14 3, Prev: 15 0, Up: History<2>
+
+9.272 14.3.1
+============
+
+20 Mar 2015
+
+ * Issue #307(1): Removed PEP-440(2) warning during parsing of
+ versions in ‘pkg_resources.Distribution’.
+
+ * Issue #364(3): Replace deprecated usage with recommended usage of
+ ‘EntryPoint.load’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/307
+
+ (2) https://www.python.org/dev/peps/pep-0440/
+
+ (3) https://github.com/pypa/setuptools/issues/364
+
+
+File: setuptools.info, Node: 14 3, Next: 14 2, Prev: 14 3 1, Up: History<2>
+
+9.273 14.3
+==========
+
+15 Mar 2015
+
+ * Issue #254(1): When creating temporary egg cache on Unix, use mode
+ 755 for creating the directory to avoid the subsequent warning if
+ the directory is group writable.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/254
+
+
+File: setuptools.info, Node: 14 2, Next: 14 1 1, Prev: 14 3, Up: History<2>
+
+9.274 14.2
+==========
+
+15 Mar 2015
+
+ * Issue #137(1): Update ‘Distribution.hashcmp’ so that Distributions
+ with None for pyversion or platform can be compared against
+ Distributions defining those attributes.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/137
+
+
+File: setuptools.info, Node: 14 1 1, Next: 14 1, Prev: 14 2, Up: History<2>
+
+9.275 14.1.1
+============
+
+14 Mar 2015
+
+ * Issue #360(1): Removed undesirable behavior from test runs,
+ preventing write tests and installation to system site packages.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/360
+
+
+File: setuptools.info, Node: 14 1, Next: 14 0, Prev: 14 1 1, Up: History<2>
+
+9.276 14.1
+==========
+
+14 Mar 2015
+
+ * BB Pull Request #125(1): Add ‘__ne__’ to Requirement class.
+
+ * Various refactoring of easy_install.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/125
+
+
+File: setuptools.info, Node: 14 0, Next: 13 0 2, Prev: 14 1, Up: History<2>
+
+9.277 14.0
+==========
+
+06 Mar 2015
+
+ * Bootstrap script now accepts ‘--to-dir’ to customize save directory
+ or allow for re-use of existing repository of setuptools versions.
+ See BB Pull Request #112(1) for background.
+
+ * Issue #285(2): ‘easy_install’ no longer will default to installing
+ packages to the “user site packages” directory if it is itself
+ installed there. Instead, the user must pass ‘--user’ in all cases
+ to install packages to the user site packages. This behavior now
+ matches that of “pip install”. To configure an environment to
+ always install to the user site packages, consider using the
+ “install-dir” and “scripts-dir” parameters to easy_install through
+ an appropriate distutils config file.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/112
+
+ (2) https://github.com/pypa/setuptools/issues/285
+
+
+File: setuptools.info, Node: 13 0 2, Next: 13 0 1, Prev: 14 0, Up: History<2>
+
+9.278 13.0.2
+============
+
+06 Mar 2015
+
+ * Issue #359(1): Include pytest.ini in the sdist so invocation of
+ py.test on the sdist honors the pytest configuration.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/359
+
+
+File: setuptools.info, Node: 13 0 1, Next: 13 0, Prev: 13 0 2, Up: History<2>
+
+9.279 13.0.1
+============
+
+05 Mar 2015
+
+Re-release of 13.0. Intermittent connectivity issues caused the release
+process to fail and PyPI uploads no longer accept files for 13.0.
+
+
+File: setuptools.info, Node: 13 0, Next: 12 4, Prev: 13 0 1, Up: History<2>
+
+9.280 13.0
+==========
+
+05 Mar 2015
+
+ * Issue #356(1): Back out BB Pull Request #119(2) as it requires
+ Setuptools 10 or later as the source during an upgrade.
+
+ * Removed build_py class from setup.py. According to 892f439d216e,
+ this functionality was added to support upgrades from old
+ Distribute versions, 0.6.5 and 0.6.6.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/356
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/119
+
+
+File: setuptools.info, Node: 12 4, Next: 12 3, Prev: 13 0, Up: History<2>
+
+9.281 12.4
+==========
+
+04 Mar 2015
+
+ * BB Pull Request #119(1): Restore writing of ‘setup_requires’ to
+ metadata (previously added in 8.4 and removed in 9.0).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/119
+
+
+File: setuptools.info, Node: 12 3, Next: 12 2, Prev: 12 4, Up: History<2>
+
+9.282 12.3
+==========
+
+26 Feb 2015
+
+ * Documentation is now linked using the rst.linker package.
+
+ * Fix ‘setuptools.command.easy_install.extract_wininst_cfg()’ with
+ Python 2.6 and 2.7.
+
+ * Issue #354(1). Added documentation on building setuptools
+ documentation.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/354
+
+
+File: setuptools.info, Node: 12 2, Next: 12 1, Prev: 12 3, Up: History<2>
+
+9.283 12.2
+==========
+
+16 Feb 2015
+
+ * Issue #345(1): Unload all modules under pkg_resources during
+ ‘ez_setup.use_setuptools()’.
+
+ * Issue #336(2): Removed deprecation from ‘ez_setup.use_setuptools’,
+ as it is clearly still used by buildout’s bootstrap. ‘ez_setup’
+ remains deprecated for use by individual packages.
+
+ * Simplified implementation of ‘ez_setup.use_setuptools’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/345
+
+ (2) https://github.com/pypa/setuptools/issues/336
+
+
+File: setuptools.info, Node: 12 1, Next: 12 0 5, Prev: 12 2, Up: History<2>
+
+9.284 12.1
+==========
+
+10 Feb 2015
+
+ * BB Pull Request #118(1): Soften warning for non-normalized versions
+ in Distribution.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/118
+
+
+File: setuptools.info, Node: 12 0 5, Next: 12 0 4, Prev: 12 1, Up: History<2>
+
+9.285 12.0.5
+============
+
+26 Jan 2015
+
+ * Issue #339(1): Correct Attribute reference in
+ ‘cant_write_to_target’.
+
+ * Issue #336(2): Deprecated ‘ez_setup.use_setuptools’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/339
+
+ (2) https://github.com/pypa/setuptools/issues/336
+
+
+File: setuptools.info, Node: 12 0 4, Next: 12 0 3, Prev: 12 0 5, Up: History<2>
+
+9.286 12.0.4
+============
+
+20 Jan 2015
+
+ * Issue #335(1): Fix script header generation on Windows.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/335
+
+
+File: setuptools.info, Node: 12 0 3, Next: 12 0 2, Prev: 12 0 4, Up: History<2>
+
+9.287 12.0.3
+============
+
+18 Jan 2015
+
+ * Fixed incorrect class attribute in ‘install_scripts’. Tests would
+ be nice.
+
+
+File: setuptools.info, Node: 12 0 2, Next: 12 0 1, Prev: 12 0 3, Up: History<2>
+
+9.288 12.0.2
+============
+
+18 Jan 2015
+
+ * Issue #331(1): Fixed ‘install_scripts’ command on Windows systems
+ corrupting the header.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/331
+
+
+File: setuptools.info, Node: 12 0 1, Next: 12 0, Prev: 12 0 2, Up: History<2>
+
+9.289 12.0.1
+============
+
+16 Jan 2015
+
+ * Restore ‘setuptools.command.easy_install.sys_executable’ for pbr
+ compatibility. For the future, tools should construct a
+ CommandSpec explicitly.
+
+
+File: setuptools.info, Node: 12 0, Next: 11 3 1, Prev: 12 0 1, Up: History<2>
+
+9.290 12.0
+==========
+
+16 Jan 2015
+
+ * Issue #188(1): Setuptools now support multiple entities in the
+ value for ‘build.executable’, such that an executable of
+ “/usr/bin/env my-python” may be specified. This means that systems
+ with a specified executable whose name has spaces in the path must
+ be updated to escape or quote that value.
+
+ * Deprecated ‘easy_install.ScriptWriter.get_writer’, replaced by
+ ‘.best()’ with slightly different semantics (no force_windows
+ flag).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/188
+
+
+File: setuptools.info, Node: 11 3 1, Next: 11 3, Prev: 12 0, Up: History<2>
+
+9.291 11.3.1
+============
+
+06 Jan 2015
+
+ * Issue #327(1): Formalize and restore support for any printable
+ character in an entry point name.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/327
+
+
+File: setuptools.info, Node: 11 3, Next: 11 2, Prev: 11 3 1, Up: History<2>
+
+9.292 11.3
+==========
+
+05 Jan 2015
+
+ * Expose ‘EntryPoint.resolve’ in place of EntryPoint._load,
+ implementing the simple, non-requiring load. Deprecated all uses
+ of ‘EntryPoint._load’ except for calling with no parameters, which
+ is just a shortcut for ‘ep.require(); ep.resolve();’.
+
+ Apps currently invoking ‘ep.load(require=False)’ should instead do
+ the following if wanting to avoid the deprecating warning:
+
+ getattr(ep, "resolve", lambda: ep.load(require=False))()
+
+
+File: setuptools.info, Node: 11 2, Next: 11 1, Prev: 11 3, Up: History<2>
+
+9.293 11.2
+==========
+
+05 Jan 2015
+
+ * Pip #2326(1): Report deprecation warning at stacklevel 2 for easier
+ diagnosis.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/pip/issues/2326
+
+
+File: setuptools.info, Node: 11 1, Next: 11 0, Prev: 11 2, Up: History<2>
+
+9.294 11.1
+==========
+
+04 Jan 2015
+
+ * Issue #281(1): Since Setuptools 6.1 (Issue #268(2)), a ValueError
+ would be raised in certain cases where VersionConflict was raised
+ with two arguments, which occurred in
+ ‘pkg_resources.WorkingSet.find’. This release adds support for
+ indicating the dependent packages while maintaining support for a
+ VersionConflict when no dependent package context is known. New
+ unit tests now capture the expected interface.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/281
+
+ (2) https://github.com/pypa/setuptools/issues/268
+
+
+File: setuptools.info, Node: 11 0, Next: 10 2 1, Prev: 11 1, Up: History<2>
+
+9.295 11.0
+==========
+
+02 Jan 2015
+
+ * Interop #3(1): Upgrade to Packaging 15.0(2); updates to PEP 440(3)
+ so that >1.7 does not exclude 1.7.1 but does exclude 1.7.0 and
+ 1.7.0.post1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/interoperability-peps/issues/3
+
+ (2) https://github.com/pypa/packaging/blob/15.0/CHANGELOG.rst
+
+ (3) https://www.python.org/dev/peps/pep-0440/
+
+
+File: setuptools.info, Node: 10 2 1, Next: 10 2, Prev: 11 0, Up: History<2>
+
+9.296 10.2.1
+============
+
+02 Jan 2015
+
+ * Issue #323(1): Fix regression in entry point name parsing.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/323
+
+
+File: setuptools.info, Node: 10 2, Next: 10 1, Prev: 10 2 1, Up: History<2>
+
+9.297 10.2
+==========
+
+02 Jan 2015
+
+ * Deprecated use of EntryPoint.load(require=False). Passing a
+ boolean to a function to select behavior is an anti-pattern.
+ Instead use ‘Entrypoint._load()’.
+
+ * Substantial refactoring of all unit tests. Tests are now much
+ leaner and re-use a lot of fixtures and contexts for better clarity
+ of purpose.
+
+
+File: setuptools.info, Node: 10 1, Next: 10 0 1, Prev: 10 2, Up: History<2>
+
+9.298 10.1
+==========
+
+31 Dec 2014
+
+ * Issue #320(1): Added a compatibility implementation of
+ ‘sdist._default_revctrl’ so that systems relying on that interface
+ do not fail (namely, Ubuntu 12.04 and similar Debian releases).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/320
+
+
+File: setuptools.info, Node: 10 0 1, Next: 10 0, Prev: 10 1, Up: History<2>
+
+9.299 10.0.1
+============
+
+30 Dec 2014
+
+ * Issue #319(1): Fixed issue installing pure distutils packages.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/319
+
+
+File: setuptools.info, Node: 10 0, Next: 9 1, Prev: 10 0 1, Up: History<2>
+
+9.300 10.0
+==========
+
+30 Dec 2014
+
+ * Issue #313(1): Removed built-in support for subversion. Projects
+ wishing to retain support for subversion will need to use a third
+ party library. The extant implementation is being ported to
+ setuptools_svn(2).
+
+ * Issue #315(3): Updated setuptools to hide its own loaded modules
+ during installation of another package. This change will enable
+ setuptools to upgrade (or downgrade) itself even when its own
+ metadata and implementation change.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/313
+
+ (2) https://pypi.org/project/setuptools_svn/
+
+ (3) https://github.com/pypa/setuptools/issues/315
+
+
+File: setuptools.info, Node: 9 1, Next: 9 0 1, Prev: 10 0, Up: History<2>
+
+9.301 9.1
+=========
+
+29 Dec 2014
+
+ * Prefer vendored packaging library as recommended(1).
+
+ ---------- Footnotes ----------
+
+ (1)
+https://github.com/pypa/setuptools/commit/170657b68f4b92e7e1bf82f5e19a831f5744af67
+
+
+File: setuptools.info, Node: 9 0 1, Next: 9 0, Prev: 9 1, Up: History<2>
+
+9.302 9.0.1
+===========
+
+29 Dec 2014
+
+ * Issue #312(1): Restored presence of pkg_resources API tests
+ (doctest) to sdist.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/312
+
+
+File: setuptools.info, Node: 9 0, Next: 8 4, Prev: 9 0 1, Up: History<2>
+
+9.303 9.0
+=========
+
+28 Dec 2014
+
+ * Issue #314(1): Disabled support for ‘setup_requires’ metadata to
+ avoid issue where Setuptools was unable to upgrade over earlier
+ versions.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/314
+
+
+File: setuptools.info, Node: 8 4, Next: 8 3, Prev: 9 0, Up: History<2>
+
+9.304 8.4
+=========
+
+26 Dec 2014
+
+ * BB Pull Request #106(1): Now write ‘setup_requires’ metadata.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/106
+
+
+File: setuptools.info, Node: 8 3, Next: 8 2 1, Prev: 8 4, Up: History<2>
+
+9.305 8.3
+=========
+
+24 Dec 2014
+
+ * Issue #311(1): Decoupled pkg_resources from setuptools once again.
+ ‘pkg_resources’ is now a package instead of a module.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/311
+
+
+File: setuptools.info, Node: 8 2 1, Next: 8 2, Prev: 8 3, Up: History<2>
+
+9.306 8.2.1
+===========
+
+18 Dec 2014
+
+ * Issue #306(1): Suppress warnings about Version format except in
+ select scenarios (such as installation).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/306
+
+
+File: setuptools.info, Node: 8 2, Next: 8 1, Prev: 8 2 1, Up: History<2>
+
+9.307 8.2
+=========
+
+18 Dec 2014
+
+ * BB Pull Request #85(1): Search egg-base when adding egg-info to
+ manifest.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/85
+
+
+File: setuptools.info, Node: 8 1, Next: 8 0 4, Prev: 8 2, Up: History<2>
+
+9.308 8.1
+=========
+
+18 Dec 2014
+
+ * Upgrade ‘packaging’ to 14.5, giving preference to “rc” as
+ designator for release candidates over “c”.
+
+ * PEP-440(1) warnings are now raised as their own class,
+ ‘pkg_resources.PEP440Warning’, instead of RuntimeWarning.
+
+ * Disabled warnings on empty versions.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0440/
+
+
+File: setuptools.info, Node: 8 0 4, Next: 8 0 3, Prev: 8 1, Up: History<2>
+
+9.309 8.0.4
+===========
+
+15 Dec 2014
+
+ * Upgrade ‘packaging’ to 14.4, fixing an error where there is a
+ different result for if 2.0.5 is contained within >2.0dev and
+ >2.0.dev even though normalization rules should have made them
+ equal.
+
+ * Issue #296(1): Add warning when a version is parsed as legacy.
+ This warning will make it easier for developers to recognize
+ deprecated version numbers.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/296
+
+
+File: setuptools.info, Node: 8 0 3, Next: 8 0 2, Prev: 8 0 4, Up: History<2>
+
+9.310 8.0.3
+===========
+
+15 Dec 2014
+
+ * Issue #296(1): Restored support for ‘__hash__’ on parse_version
+ results.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/296
+
+
+File: setuptools.info, Node: 8 0 2, Next: 8 0 1, Prev: 8 0 3, Up: History<2>
+
+9.311 8.0.2
+===========
+
+14 Dec 2014
+
+ * Issue #296(1): Restored support for ‘__getitem__’ and sort
+ operations on parse_version result.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/296
+
+
+File: setuptools.info, Node: 8 0 1, Next: 8 0, Prev: 8 0 2, Up: History<2>
+
+9.312 8.0.1
+===========
+
+13 Dec 2014
+
+ * Issue #296(1): Restore support for iteration over parse_version
+ result, but deprecated that usage with a warning. Fixes failure
+ with buildout.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/296
+
+
+File: setuptools.info, Node: 8 0, Next: 7 0, Prev: 8 0 1, Up: History<2>
+
+9.313 8.0
+=========
+
+13 Dec 2014
+
+ * Implement PEP 440(1) within pkg_resources and setuptools. This
+ change deprecates some version numbers such that they will no
+ longer be installable without using the ‘===’ escape hatch. See
+ the changes to test_resources(2) for specific examples of version
+ numbers and specifiers that are no longer supported. Setuptools
+ now “vendors” the packaging(3) library.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0440/
+
+ (2)
+https://bitbucket.org/pypa/setuptools/commits/dcd552da643c4448056de84c73d56da6d70769d5#chg-setuptools/tests/test_resources.py
+
+ (3) https://github.com/pypa/packaging
+
+
+File: setuptools.info, Node: 7 0, Next: 6 1, Prev: 8 0, Up: History<2>
+
+9.314 7.0
+=========
+
+19 Oct 2014
+
+ * Issue #80(1), Issue #209(2): Eggs that are downloaded for
+ ‘setup_requires’, ‘test_requires’, etc. are now placed in a
+ ‘./.eggs’ directory instead of directly in the current directory.
+ This choice of location means the files can be readily managed
+ (removed, ignored). Additionally, later phases or invocations of
+ setuptools will not detect the package as already installed and
+ ignore it for permanent install (See #209(3)).
+
+ This change is indicated as backward-incompatible as installations
+ that depend on the installation in the current directory will need
+ to account for the new location. Systems that ignore ‘*.egg’ will
+ probably need to be adapted to ignore ‘.eggs’. The files will need
+ to be manually moved or will be retrieved again. Most use cases
+ will require no attention.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/80
+
+ (2) https://github.com/pypa/setuptools/issues/209
+
+ (3) https://github.com/pypa/setuptools/issues/209
+
+
+File: setuptools.info, Node: 6 1, Next: 6 0 2, Prev: 7 0, Up: History<2>
+
+9.315 6.1
+=========
+
+11 Oct 2014
+
+ * Issue #268(1): When resolving package versions, a VersionConflict
+ now reports which package previously required the conflicting
+ version.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/268
+
+
+File: setuptools.info, Node: 6 0 2, Next: 6 0 1, Prev: 6 1, Up: History<2>
+
+9.316 6.0.2
+===========
+
+29 Sep 2014
+
+ * Issue #262(1): Fixed regression in pip install due to egg-info
+ directories being omitted. Re-opens Issue #118(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/262
+
+ (2) https://github.com/pypa/setuptools/issues/118
+
+
+File: setuptools.info, Node: 6 0 1, Next: 6 0, Prev: 6 0 2, Up: History<2>
+
+9.317 6.0.1
+===========
+
+27 Sep 2014
+
+ * Issue #259(1): Fixed regression with namespace package handling on
+ ‘single version, externally managed’ installs.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/259
+
+
+File: setuptools.info, Node: 6 0, Next: 5 8, Prev: 6 0 1, Up: History<2>
+
+9.318 6.0
+=========
+
+27 Sep 2014
+
+ * Issue #100(1): When building a distribution, Setuptools will no
+ longer match default files using platform-dependent case
+ sensitivity, but rather will only match the files if their case
+ matches exactly. As a result, on Windows and other
+ case-insensitive file systems, files with names such as
+ ‘readme.txt’ or ‘README.TXT’ will be omitted from the distribution
+ and a warning will be issued indicating that ‘README.txt’ was not
+ found. Other filenames affected are:
+
+ - README.rst
+
+ - README
+
+ - setup.cfg
+
+ - setup.py (or the script name)
+
+ - test/test*.py
+
+ Any users producing distributions with filenames that match those
+ above case-insensitively, but not case-sensitively, should rename
+ those files in their repository for better portability.
+
+ * BB Pull Request #72(2): When using
+ ‘single_version_externally_managed’, the exclusion list now
+ includes Python 3.2 ‘__pycache__’ entries.
+
+ * BB Pull Request #76(3) and BB Pull Request #78(4): lines in
+ top_level.txt are now ordered deterministically.
+
+ * Issue #118(5): The egg-info directory is now no longer included in
+ the list of outputs.
+
+ * Issue #258(6): Setuptools now patches distutils msvc9compiler to
+ recognize the specially-packaged compiler package for easy
+ extension module support on Python 2.6, 2.7, and 3.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/100
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/72
+
+ (3) https://bitbucket.org/pypa/setuptools/pull-request/76
+
+ (4) https://bitbucket.org/pypa/setuptools/pull-request/78
+
+ (5) https://github.com/pypa/setuptools/issues/118
+
+ (6) https://github.com/pypa/setuptools/issues/258
+
+
+File: setuptools.info, Node: 5 8, Next: 5 7, Prev: 6 0, Up: History<2>
+
+9.319 5.8
+=========
+
+18 Sep 2014
+
+ * Issue #237(1): ‘pkg_resources’ now uses explicit detection of
+ Python 2 vs. Python 3, supporting environments where builtins have
+ been patched to make Python 3 look more like Python 2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/237
+
+
+File: setuptools.info, Node: 5 7, Next: 5 6, Prev: 5 8, Up: History<2>
+
+9.320 5.7
+=========
+
+15 Aug 2014
+
+ * Issue #240(1): Based on real-world performance measures against
+ 5.4, zip manifests are now cached in all circumstances. The
+ ‘PKG_RESOURCES_CACHE_ZIP_MANIFESTS’ environment variable is no
+ longer relevant. The observed “memory increase” referenced in the
+ 5.4 release notes and detailed in Issue #154(2) was likely not an
+ increase over the status quo, but rather only an increase over not
+ storing the zip info at all.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/240
+
+ (2) https://github.com/pypa/setuptools/issues/154
+
+
+File: setuptools.info, Node: 5 6, Next: 5 5 1, Prev: 5 7, Up: History<2>
+
+9.321 5.6
+=========
+
+14 Aug 2014
+
+ * Issue #242(1): Use absolute imports in svn_utils to avoid issues if
+ the installing package adds an xml module to the path.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/242
+
+
+File: setuptools.info, Node: 5 5 1, Next: 5 5, Prev: 5 6, Up: History<2>
+
+9.322 5.5.1
+===========
+
+10 Aug 2014
+
+ * Issue #239(1): Fix typo in 5.5 such that fix did not take.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/239
+
+
+File: setuptools.info, Node: 5 5, Next: 5 4 2, Prev: 5 5 1, Up: History<2>
+
+9.323 5.5
+=========
+
+10 Aug 2014
+
+ * Issue #239(1): Setuptools now includes the setup_requires directive
+ on Distribution objects and validates the syntax just like
+ install_requires and tests_require directives.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/239
+
+
+File: setuptools.info, Node: 5 4 2, Next: 5 4 1, Prev: 5 5, Up: History<2>
+
+9.324 5.4.2
+===========
+
+01 Aug 2014
+
+ * Issue #236(1): Corrected regression in execfile implementation for
+ Python 2.6.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/236
+
+
+File: setuptools.info, Node: 5 4 1, Next: 5 4, Prev: 5 4 2, Up: History<2>
+
+9.325 5.4.1
+===========
+
+06 Jul 2014
+
+ * Python #7776(1): (ssl_support) Correct usage of host for validation
+ when tunneling for HTTPS.
+
+ ---------- Footnotes ----------
+
+ (1) http://bugs.python.org/issue7776
+
+
+File: setuptools.info, Node: 5 4, Next: 5 3, Prev: 5 4 1, Up: History<2>
+
+9.326 5.4
+=========
+
+05 Jul 2014
+
+ * Issue #154(1): ‘pkg_resources’ will now cache the zip manifests
+ rather than re-processing the same file from disk multiple times,
+ but only if the environment variable
+ ‘PKG_RESOURCES_CACHE_ZIP_MANIFESTS’ is set. Clients that package
+ many modules in the same zip file will see some improvement in
+ startup time by enabling this feature. This feature is not enabled
+ by default because it causes a substantial increase in memory
+ usage.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/154
+
+
+File: setuptools.info, Node: 5 3, Next: 5 2, Prev: 5 4, Up: History<2>
+
+9.327 5.3
+=========
+
+28 Jun 2014
+
+ * Issue #185(1): Make svn tagging work on the new style SVN metadata.
+ Thanks cazabon!
+
+ * Prune revision control directories (e.g .svn) from base path as
+ well as sub-directories.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/185
+
+
+File: setuptools.info, Node: 5 2, Next: 5 1, Prev: 5 3, Up: History<2>
+
+9.328 5.2
+=========
+
+22 Jun 2014
+
+ * Added a Developer Guide(1) to the official documentation.
+
+ * Some code refactoring and cleanup was done with no intended
+ behavioral changes.
+
+ * During install_egg_info, the generated lines for namespace package
+ .pth files are now processed even during a dry run.
+
+ ---------- Footnotes ----------
+
+ (1) https://setuptools.readthedocs.io/en/latest/developer-guide.html
+
+
+File: setuptools.info, Node: 5 1, Next: 5 0 2, Prev: 5 2, Up: History<2>
+
+9.329 5.1
+=========
+
+15 Jun 2014
+
+ * Issue #202(1): Implemented more robust cache invalidation for the
+ ZipImporter, building on the work in Issue #168(2). Special thanks
+ to Jurko Gospodnetic and PJE.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/202
+
+ (2) https://github.com/pypa/setuptools/issues/168
+
+
+File: setuptools.info, Node: 5 0 2, Next: 5 0 1, Prev: 5 1, Up: History<2>
+
+9.330 5.0.2
+===========
+
+15 Jun 2014
+
+ * Issue #220(1): Restored script templates.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/220
+
+
+File: setuptools.info, Node: 5 0 1, Next: 5 0, Prev: 5 0 2, Up: History<2>
+
+9.331 5.0.1
+===========
+
+14 Jun 2014
+
+ * Renamed script templates to end with .tmpl now that they no longer
+ need to be processed by 2to3. Fixes spurious syntax errors during
+ build/install.
+
+
+File: setuptools.info, Node: 5 0, Next: 3 7 1 and 3 8 1 and 4 0 1, Prev: 5 0 1, Up: History<2>
+
+9.332 5.0
+=========
+
+14 Jun 2014
+
+ * Issue #218(1): Re-release of 3.8.1 to signal that it supersedes
+ 4.x.
+
+ * Incidentally, script templates were updated not to include the
+ triple-quote escaping.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/218
+
+
+File: setuptools.info, Node: 3 7 1 and 3 8 1 and 4 0 1, Next: 4 0, Prev: 5 0, Up: History<2>
+
+9.333 3.7.1 and 3.8.1 and 4.0.1
+===============================
+
+ * Issue #213(1): Use legacy StringIO behavior for compatibility under
+ pbr.
+
+ * Issue #218(2): Setuptools 3.8.1 superseded 4.0.1, and 4.x was
+ removed from the available versions to install.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/213
+
+ (2) https://github.com/pypa/setuptools/issues/218
+
+
+File: setuptools.info, Node: 4 0, Next: 3 8, Prev: 3 7 1 and 3 8 1 and 4 0 1, Up: History<2>
+
+9.334 4.0
+=========
+
+01 Jun 2014
+
+ * Issue #210(1): ‘setup.py develop’ now copies scripts in binary mode
+ rather than text mode, matching the behavior of the ‘install’
+ command.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/210
+
+
+File: setuptools.info, Node: 3 8, Next: 3 7, Prev: 4 0, Up: History<2>
+
+9.335 3.8
+=========
+
+01 Jun 2014
+
+ * Extend Issue #197(1) workaround to include all Python 3 versions
+ prior to 3.2.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/197
+
+
+File: setuptools.info, Node: 3 7, Next: 3 6, Prev: 3 8, Up: History<2>
+
+9.336 3.7
+=========
+
+28 May 2014
+
+ * Issue #193(1): Improved handling of Unicode filenames when building
+ manifests.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/193
+
+
+File: setuptools.info, Node: 3 6, Next: 3 5 2, Prev: 3 7, Up: History<2>
+
+9.337 3.6
+=========
+
+07 May 2014
+
+ * Issue #203(1): Honor proxy settings for Powershell downloader in
+ the bootstrap routine.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/203
+
+
+File: setuptools.info, Node: 3 5 2, Next: 3 5 1, Prev: 3 6, Up: History<2>
+
+9.338 3.5.2
+===========
+
+07 May 2014
+
+ * Issue #168(1): More robust handling of replaced zip files and stale
+ caches. Fixes ZipImportError complaining about a ‘bad local
+ header’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/168
+
+
+File: setuptools.info, Node: 3 5 1, Next: 3 5, Prev: 3 5 2, Up: History<2>
+
+9.339 3.5.1
+===========
+
+04 May 2014
+
+ * Issue #199(1): Restored ‘install._install’ for compatibility with
+ earlier NumPy versions.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/199
+
+
+File: setuptools.info, Node: 3 5, Next: 3 4 4, Prev: 3 5 1, Up: History<2>
+
+9.340 3.5
+=========
+
+03 May 2014
+
+ * Issue #195(1): Follow symbolic links in find_packages (restoring
+ behavior broken in 3.4).
+
+ * Issue #197(2): On Python 3.1, PKG-INFO is now saved in a UTF-8
+ encoding instead of ‘sys.getpreferredencoding’ to match the
+ behavior on Python 2.6-3.4.
+
+ * Issue #192(3): Preferred bootstrap location is now
+ ‘https://bootstrap.pypa.io/ez_setup.py’ (mirrored from former
+ location).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/195
+
+ (2) https://github.com/pypa/setuptools/issues/197
+
+ (3) https://github.com/pypa/setuptools/issues/192
+
+
+File: setuptools.info, Node: 3 4 4, Next: 3 4 3, Prev: 3 5, Up: History<2>
+
+9.341 3.4.4
+===========
+
+11 Apr 2014
+
+ * Issue #184(1): Correct failure where find_package over-matched
+ packages when directory traversal isn’t short-circuited.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/184
+
+
+File: setuptools.info, Node: 3 4 3, Next: 3 4 2, Prev: 3 4 4, Up: History<2>
+
+9.342 3.4.3
+===========
+
+07 Apr 2014
+
+ * Issue #183(1): Really fix test command with Python 3.1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/183
+
+
+File: setuptools.info, Node: 3 4 2, Next: 3 4 1, Prev: 3 4 3, Up: History<2>
+
+9.343 3.4.2
+===========
+
+06 Apr 2014
+
+ * Issue #183(1): Fix additional regression in test command on Python
+ 3.1.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/183
+
+
+File: setuptools.info, Node: 3 4 1, Next: 3 4, Prev: 3 4 2, Up: History<2>
+
+9.344 3.4.1
+===========
+
+30 Mar 2014
+
+ * Issue #180(1): Fix regression in test command not caught by
+ py.test-run tests.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/180
+
+
+File: setuptools.info, Node: 3 4, Next: 3 3, Prev: 3 4 1, Up: History<2>
+
+9.345 3.4
+=========
+
+30 Mar 2014
+
+ * Issue #176(1): Add parameter to the test command to support a
+ custom test runner: –test-runner or -r.
+
+ * Issue #177(2): Now assume most common invocation to install command
+ on platforms/environments without stack support (issuing a
+ warning). Setuptools now installs naturally on IronPython.
+ Behavior on CPython should be unchanged.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/176
+
+ (2) https://github.com/pypa/setuptools/issues/177
+
+
+File: setuptools.info, Node: 3 3, Next: 3 2, Prev: 3 4, Up: History<2>
+
+9.346 3.3
+=========
+
+16 Mar 2014
+
+ * Add ‘include’ parameter to ‘setuptools.find_packages()’.
+
+
+File: setuptools.info, Node: 3 2, Next: 3 1, Prev: 3 3, Up: History<2>
+
+9.347 3.2
+=========
+
+14 Mar 2014
+
+ * BB Pull Request #39(1): Add support for C++ targets from Cython
+ ‘.pyx’ files.
+
+ * Issue #162(2): Update dependency on certifi to 1.0.1.
+
+ * Issue #164(3): Update dependency on wincertstore to 0.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/39
+
+ (2) https://github.com/pypa/setuptools/issues/162
+
+ (3) https://github.com/pypa/setuptools/issues/164
+
+
+File: setuptools.info, Node: 3 1, Next: 3 0 2, Prev: 3 2, Up: History<2>
+
+9.348 3.1
+=========
+
+08 Mar 2014
+
+ * Issue #161(1): Restore Features functionality to allow backward
+ compatibility (for Features) until the uses of that functionality
+ is sufficiently removed.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/161
+
+
+File: setuptools.info, Node: 3 0 2, Next: 3 0 1, Prev: 3 1, Up: History<2>
+
+9.349 3.0.2
+===========
+
+06 Mar 2014
+
+ * Correct typo in previous bugfix.
+
+
+File: setuptools.info, Node: 3 0 1, Next: 3 0, Prev: 3 0 2, Up: History<2>
+
+9.350 3.0.1
+===========
+
+06 Mar 2014
+
+ * Issue #157(1): Restore support for Python 2.6 in bootstrap script
+ where ‘zipfile.ZipFile’ does not yet have support for context
+ managers.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/157
+
+
+File: setuptools.info, Node: 3 0, Next: 2 2, Prev: 3 0 1, Up: History<2>
+
+9.351 3.0
+=========
+
+04 Mar 2014
+
+ * Issue #125(1): Prevent Subversion support from creating a
+ ~/.subversion directory just for checking the presence of a
+ Subversion repository.
+
+ * Issue #12(2): Namespace packages are now imported lazily. That is,
+ the mere declaration of a namespace package in an egg on ‘sys.path’
+ no longer causes it to be imported when ‘pkg_resources’ is
+ imported. Note that this change means that all of a namespace
+ package’s ‘__init__.py’ files must include a ‘declare_namespace()’
+ call in order to ensure that they will be handled properly at
+ runtime. In 2.x it was possible to get away without including the
+ declaration, but only at the cost of forcing namespace packages to
+ be imported early, which 3.0 no longer does.
+
+ * Issue #148(3): When building (bdist_egg), setuptools no longer adds
+ ‘__init__.py’ files to namespace packages. Any packages that rely
+ on this behavior will need to create ‘__init__.py’ files and
+ include the ‘declare_namespace()’.
+
+ * Issue #7(4): Setuptools itself is now distributed as a zip archive
+ in addition to tar archive. ez_setup.py now uses zip archive.
+ This approach avoids the potential security vulnerabilities
+ presented by use of tar archives in ez_setup.py. It also leverages
+ the security features added to ZipFile.extract in Python 2.7.4.
+
+ * Issue #65(5): Removed deprecated Features functionality.
+
+ * BB Pull Request #28(6): Remove backport of ‘_bytecode_filenames’
+ which is available in Python 2.6 and later, but also has better
+ compatibility with Python 3 environments.
+
+ * Issue #156(7): Fix spelling of __PYVENV_LAUNCHER__ variable.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/125
+
+ (2) https://github.com/pypa/setuptools/issues/12
+
+ (3) https://github.com/pypa/setuptools/issues/148
+
+ (4) https://github.com/pypa/setuptools/issues/7
+
+ (5) https://github.com/pypa/setuptools/issues/65
+
+ (6) https://bitbucket.org/pypa/setuptools/pull-request/28
+
+ (7) https://github.com/pypa/setuptools/issues/156
+
+
+File: setuptools.info, Node: 2 2, Next: 2 1 2, Prev: 3 0, Up: History<2>
+
+9.352 2.2
+=========
+
+07 Feb 2014
+
+ * Issue #141(1): Restored fix for allowing setup_requires
+ dependencies to override installed dependencies during setup.
+
+ * Issue #128(2): Fixed issue where only the first dependency link was
+ honored in a distribution where multiple dependency links were
+ supplied.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/141
+
+ (2) https://github.com/pypa/setuptools/issues/128
+
+
+File: setuptools.info, Node: 2 1 2, Next: 2 1 1, Prev: 2 2, Up: History<2>
+
+9.353 2.1.2
+===========
+
+05 Feb 2014
+
+ * Issue #144(1): Read long_description using codecs module to avoid
+ errors installing on systems where LANG=C.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/144
+
+
+File: setuptools.info, Node: 2 1 1, Next: 2 1, Prev: 2 1 2, Up: History<2>
+
+9.354 2.1.1
+===========
+
+05 Feb 2014
+
+ * Issue #139(1): Fix regression in re_finder for CVS repos (and maybe
+ Git repos as well).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/139
+
+
+File: setuptools.info, Node: 2 1, Next: 2 0 2, Prev: 2 1 1, Up: History<2>
+
+9.355 2.1
+=========
+
+07 Jan 2014
+
+ * Issue #129(1): Suppress inspection of ‘*.whl’ files when searching
+ for files in a zip-imported file.
+
+ * Issue #131(2): Fix RuntimeError when constructing an egg fetcher.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/129
+
+ (2) https://github.com/pypa/setuptools/issues/131
+
+
+File: setuptools.info, Node: 2 0 2, Next: 2 0 1, Prev: 2 1, Up: History<2>
+
+9.356 2.0.2
+===========
+
+29 Dec 2013
+
+ * Fix NameError during installation with Python implementations (e.g.
+ Jython) not containing parser module.
+
+ * Fix NameError in ‘sdist:re_finder’.
+
+
+File: setuptools.info, Node: 2 0 1, Next: 2 0, Prev: 2 0 2, Up: History<2>
+
+9.357 2.0.1
+===========
+
+15 Dec 2013
+
+ * Issue #124(1): Fixed error in list detection in upload_docs.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/124
+
+
+File: setuptools.info, Node: 2 0, Next: 1 4 2, Prev: 2 0 1, Up: History<2>
+
+9.358 2.0
+=========
+
+07 Dec 2013
+
+ * Issue #121(1): Exempt lib2to3 pickled grammars from
+ DirectorySandbox.
+
+ * Issue #41(2): Dropped support for Python 2.4 and Python 2.5.
+ Clients requiring setuptools for those versions of Python should
+ use setuptools 1.x.
+
+ * Removed ‘setuptools.command.easy_install.HAS_USER_SITE’. Clients
+ expecting this boolean variable should use ‘site.ENABLE_USER_SITE’
+ instead.
+
+ * Removed ‘pkg_resources.ImpWrapper’. Clients that expected this
+ class should use ‘pkgutil.ImpImporter’ instead.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/121
+
+ (2) https://github.com/pypa/setuptools/issues/41
+
+
+File: setuptools.info, Node: 1 4 2, Next: 1 4 1, Prev: 2 0, Up: History<2>
+
+9.359 1.4.2
+===========
+
+01 Dec 2013
+
+ * Issue #116(1): Correct TypeError when reading a local package index
+ on Python 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/116
+
+
+File: setuptools.info, Node: 1 4 1, Next: 1 4, Prev: 1 4 2, Up: History<2>
+
+9.360 1.4.1
+===========
+
+23 Nov 2013
+
+ * Issue #114(1): Use ‘sys.getfilesystemencoding’ for decoding config
+ in ‘bdist_wininst’ distributions.
+
+ * Issue #105(2) and Issue #113(3): Establish a more robust technique
+ for determining the terminal encoding:
+
+ 1. Try ``getpreferredencoding``
+ 2. If that returns US_ASCII or None, try the encoding from
+ ``getdefaultlocale``. If that encoding was a "fallback" because Python
+ could not figure it out from the environment or OS, encoding remains
+ unresolved.
+ 3. If the encoding is resolved, then make sure Python actually implements
+ the encoding.
+ 4. On the event of an error or unknown codec, revert to fallbacks
+ (UTF-8 on Darwin, ASCII on everything else).
+ 5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was
+ a bug on older Python releases.
+
+ On a side note, it would seem that the encoding only matters for when SVN
+ does not yet support ``--xml`` and when getting repository and svn version
+ numbers. The ``--xml`` technique should yield UTF-8 according to some
+ messages on the SVN mailing lists. So if the version numbers are always
+ 7-bit ASCII clean, it may be best to only support the file parsing methods
+ for legacy SVN releases and support for SVN without the subprocess command
+ would simple go away as support for the older SVNs does.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/114
+
+ (2) https://github.com/pypa/setuptools/issues/105
+
+ (3) https://github.com/pypa/setuptools/issues/113
+
+
+File: setuptools.info, Node: 1 4, Next: 1 3 2, Prev: 1 4 1, Up: History<2>
+
+9.361 1.4
+=========
+
+17 Nov 2013
+
+ * Issue #27(1): ‘easy_install’ will now use credentials from .pypirc
+ if present for connecting to the package index.
+
+ * BB Pull Request #21(2): Omit unwanted newlines in
+ ‘package_index._encode_auth’ when the username/password pair length
+ indicates wrapping.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/27
+
+ (2) https://bitbucket.org/pypa/setuptools/pull-request/21
+
+
+File: setuptools.info, Node: 1 3 2, Next: 1 3 1, Prev: 1 4, Up: History<2>
+
+9.362 1.3.2
+===========
+
+09 Nov 2013
+
+ * Issue #99(1): Fix filename encoding issues in SVN support.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/99
+
+
+File: setuptools.info, Node: 1 3 1, Next: 1 3, Prev: 1 3 2, Up: History<2>
+
+9.363 1.3.1
+===========
+
+07 Nov 2013
+
+ * Remove exuberant warning in SVN support when SVN is not used.
+
+
+File: setuptools.info, Node: 1 3, Next: 1 2, Prev: 1 3 1, Up: History<2>
+
+9.364 1.3
+=========
+
+03 Nov 2013
+
+ * Address security vulnerability in SSL match_hostname check as
+ reported in Python #17997(1).
+
+ * Prefer backports.ssl_match_hostname(2) for backport implementation
+ if present.
+
+ * Correct NameError in ‘ssl_support’ module (‘socket.error’).
+
+ ---------- Footnotes ----------
+
+ (1) http://bugs.python.org/issue17997
+
+ (2) https://pypi.org/project/backports.ssl_match_hostname/
+
+
+File: setuptools.info, Node: 1 2, Next: 1 1 7, Prev: 1 3, Up: History<2>
+
+9.365 1.2
+=========
+
+02 Nov 2013
+
+ * Issue #26(1): Add support for SVN 1.7. Special thanks to Philip
+ Thiem for the contribution.
+
+ * Issue #93(2): Wheels are now distributed with every release. Note
+ that as reported in Issue #108(3), as of Pip 1.4, scripts aren’t
+ installed properly from wheels. Therefore, if using Pip to install
+ setuptools from a wheel, the ‘easy_install’ command will not be
+ available.
+
+ * Setuptools “natural” launcher support, introduced in 1.0, is now
+ officially supported.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/26
+
+ (2) https://github.com/pypa/setuptools/issues/93
+
+ (3) https://github.com/pypa/setuptools/issues/108
+
+
+File: setuptools.info, Node: 1 1 7, Next: 1 1 6, Prev: 1 2, Up: History<2>
+
+9.366 1.1.7
+===========
+
+11 Apr 2013
+
+ * Fixed behavior of NameError handling in ‘script template (dev).py’
+ (script launcher for ‘develop’ installs).
+
+ * ‘ez_setup.py’ now ensures partial downloads are cleaned up
+ following a failed download.
+
+ * Distribute #363(1) and Issue #55(2): Skip an sdist test that fails
+ on locales other than UTF-8.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/363
+
+ (2) https://github.com/pypa/setuptools/issues/55
+
+
+File: setuptools.info, Node: 1 1 6, Next: 1 1 5, Prev: 1 1 7, Up: History<2>
+
+9.367 1.1.6
+===========
+
+18 Sep 2013
+
+ * Distribute #349(1): ‘sandbox.execfile’ now opens the target file in
+ binary mode, thus honoring a BOM in the file when compiled.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/349
+
+
+File: setuptools.info, Node: 1 1 5, Next: 1 1 4, Prev: 1 1 6, Up: History<2>
+
+9.368 1.1.5
+===========
+
+12 Sep 2013
+
+ * Issue #69(1): Second attempt at fix (logic was reversed).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/69
+
+
+File: setuptools.info, Node: 1 1 4, Next: 1 1 3, Prev: 1 1 5, Up: History<2>
+
+9.369 1.1.4
+===========
+
+07 Sep 2013
+
+ * Issue #77(1): Fix error in upload command (Python 2.4).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/77
+
+
+File: setuptools.info, Node: 1 1 3, Next: 1 1 2, Prev: 1 1 4, Up: History<2>
+
+9.370 1.1.3
+===========
+
+06 Sep 2013
+
+ * Fix NameError in previous patch.
+
+
+File: setuptools.info, Node: 1 1 2, Next: 1 1 1, Prev: 1 1 3, Up: History<2>
+
+9.371 1.1.2
+===========
+
+06 Sep 2013
+
+ * Issue #69(1): Correct issue where 404 errors are returned for URLs
+ with fragments in them (such as #egg=).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/69
+
+
+File: setuptools.info, Node: 1 1 1, Next: 1 1, Prev: 1 1 2, Up: History<2>
+
+9.372 1.1.1
+===========
+
+03 Sep 2013
+
+ * Issue #75(1): Add ‘--insecure’ option to ez_setup.py to accommodate
+ environments where a trusted SSL connection cannot be validated.
+
+ * Issue #76(2): Fix AttributeError in upload command with Python 2.4.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/75
+
+ (2) https://github.com/pypa/setuptools/issues/76
+
+
+File: setuptools.info, Node: 1 1, Next: 1 0, Prev: 1 1 1, Up: History<2>
+
+9.373 1.1
+=========
+
+26 Aug 2013
+
+ * Issue #71(1) (Distribute #333(2)): EasyInstall now puts less
+ emphasis on the condition when a host is blocked via
+ ‘--allow-hosts’.
+
+ * Issue #72(3): Restored Python 2.4 compatibility in ‘ez_setup.py’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/71
+
+ (2) https://bitbucket.org/tarek/distribute/issue/333
+
+ (3) https://github.com/pypa/setuptools/issues/72
+
+
+File: setuptools.info, Node: 1 0, Next: 0 9 8, Prev: 1 1, Up: History<2>
+
+9.374 1.0
+=========
+
+17 Aug 2013
+
+ * Issue #60(1): On Windows, Setuptools supports deferring to another
+ launcher, such as Vinay Sajip’s pylauncher(2) (included with Python
+ 3.3) to launch console and GUI scripts and not install its own
+ launcher executables. This experimental functionality is currently
+ only enabled if the ‘SETUPTOOLS_LAUNCHER’ environment variable is
+ set to “natural”. In the future, this behavior may become default,
+ but only after it has matured and seen substantial adoption. The
+ ‘SETUPTOOLS_LAUNCHER’ also accepts “executable” to force the
+ default behavior of creating launcher executables.
+
+ * Issue #63(3): Bootstrap script (ez_setup.py) now prefers
+ Powershell, curl, or wget for retrieving the Setuptools tarball for
+ improved security of the install. The script will still fall back
+ to a simple ‘urlopen’ on platforms that do not have these tools.
+
+ * Issue #65(4): Deprecated the ‘Features’ functionality.
+
+ * Issue #52(5): In ‘VerifyingHTTPSConn’, handle a tunnelled (proxied)
+ connection.
+
+* Menu:
+
+* Backward-Incompatible Changes::
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/60
+
+ (2) https://bitbucket.org/pypa/pylauncher
+
+ (3) https://github.com/pypa/setuptools/issues/63
+
+ (4) https://github.com/pypa/setuptools/issues/65
+
+ (5) https://github.com/pypa/setuptools/issues/52
+
+
+File: setuptools.info, Node: Backward-Incompatible Changes, Up: 1 0
+
+9.374.1 Backward-Incompatible Changes
+-------------------------------------
+
+This release includes a couple of backward-incompatible changes, but
+most if not all users will find 1.0 a drop-in replacement for 0.9.
+
+ * Issue #50(1): Normalized API of environment marker support.
+ Specifically, removed line number and filename from SyntaxErrors
+ when returned from ‘pkg_resources.invalid_marker’. Any clients
+ depending on the specific string representation of exceptions
+ returned by that function may need to be updated to account for
+ this change.
+
+ * Issue #50(2): SyntaxErrors generated by
+ ‘pkg_resources.invalid_marker’ are normalized for
+ cross-implementation consistency.
+
+ * Removed ‘--ignore-conflicts-at-my-risk’ and ‘--delete-conflicting’
+ options to easy_install. These options have been deprecated since
+ 0.6a11.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/50
+
+ (2) https://github.com/pypa/setuptools/issues/50
+
+
+File: setuptools.info, Node: 0 9 8, Next: 0 9 7, Prev: 1 0, Up: History<2>
+
+9.375 0.9.8
+===========
+
+25 Jul 2013
+
+ * Issue #53(1): Fix NameErrors in ‘_vcs_split_rev_from_url’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/53
+
+
+File: setuptools.info, Node: 0 9 7, Next: 0 9 6, Prev: 0 9 8, Up: History<2>
+
+9.376 0.9.7
+===========
+
+22 Jul 2013
+
+ * Issue #49(1): Correct AttributeError on PyPy where a hashlib.HASH
+ object does not have a ‘.name’ attribute.
+
+ * Issue #34(2): Documentation now refers to bootstrap script in code
+ repository referenced by bookmark.
+
+ * Add underscore-separated keys to environment markers (markerlib).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/49
+
+ (2) https://github.com/pypa/setuptools/issues/34
+
+
+File: setuptools.info, Node: 0 9 6, Next: 0 9 5, Prev: 0 9 7, Up: History<2>
+
+9.377 0.9.6
+===========
+
+17 Jul 2013
+
+ * Issue #44(1): Test failure on Python 2.4 when MD5 hash doesn’t have
+ a ‘.name’ attribute.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/44
+
+
+File: setuptools.info, Node: 0 9 5, Next: 0 9 4, Prev: 0 9 6, Up: History<2>
+
+9.378 0.9.5
+===========
+
+15 Jul 2013
+
+ * Python #17980(1): Fix security vulnerability in SSL certificate
+ validation.
+
+ ---------- Footnotes ----------
+
+ (1) http://bugs.python.org/issue17980
+
+
+File: setuptools.info, Node: 0 9 4, Next: 0 9 3, Prev: 0 9 5, Up: History<2>
+
+9.379 0.9.4
+===========
+
+15 Jul 2013
+
+ * Issue #43(1): Fix issue (introduced in 0.9.1) with version
+ resolution when upgrading over other releases of Setuptools.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/43
+
+
+File: setuptools.info, Node: 0 9 3, Next: 0 9 2, Prev: 0 9 4, Up: History<2>
+
+9.380 0.9.3
+===========
+
+15 Jul 2013
+
+ * Issue #42(1): Fix new ‘AttributeError’ introduced in last fix.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/42
+
+
+File: setuptools.info, Node: 0 9 2, Next: 0 9 1, Prev: 0 9 3, Up: History<2>
+
+9.381 0.9.2
+===========
+
+15 Jul 2013
+
+ * Issue #42(1): Fix regression where blank checksums would trigger an
+ ‘AttributeError’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/42
+
+
+File: setuptools.info, Node: 0 9 1, Next: 0 9, Prev: 0 9 2, Up: History<2>
+
+9.382 0.9.1
+===========
+
+13 Jul 2013
+
+ * Distribute #386(1): Allow other positional and keyword arguments to
+ os.open.
+
+ * Corrected dependency on certifi mis-referenced in 0.9.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/386
+
+
+File: setuptools.info, Node: 0 9, Next: 0 8, Prev: 0 9 1, Up: History<2>
+
+9.383 0.9
+=========
+
+13 Jul 2013
+
+ * ‘package_index’ now validates hashes other than MD5 in download
+ links.
+
+
+File: setuptools.info, Node: 0 8, Next: 0 7 8, Prev: 0 9, Up: History<2>
+
+9.384 0.8
+=========
+
+05 Jul 2013
+
+ * Code base now runs on Python 2.4 - Python 3.3 without Python 2to3
+ conversion.
+
+
+File: setuptools.info, Node: 0 7 8, Next: 0 7 7, Prev: 0 8, Up: History<2>
+
+9.385 0.7.8
+===========
+
+04 Jul 2013
+
+ * Distribute #375(1): Yet another fix for yet another regression.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 7 7, Next: 0 7 6, Prev: 0 7 8, Up: History<2>
+
+9.386 0.7.7
+===========
+
+02 Jul 2013
+
+ * Distribute #375(1): Repair AttributeError created in last release
+ (redo).
+
+ * Issue #30(2): Added test for get_cache_path.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+ (2) https://github.com/pypa/setuptools/issues/30
+
+
+File: setuptools.info, Node: 0 7 6, Next: 0 7 5, Prev: 0 7 7, Up: History<2>
+
+9.387 0.7.6
+===========
+
+02 Jul 2013
+
+ * Distribute #375(1): Repair AttributeError created in last release.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 7 5, Next: 0 7 4, Prev: 0 7 6, Up: History<2>
+
+9.388 0.7.5
+===========
+
+29 Jun 2013
+
+ * Issue #21(1): Restore Python 2.4 compatibility in
+ ‘test_easy_install’.
+
+ * Distribute #375(2): Merged additional warning from Distribute
+ 0.6.46.
+
+ * Now honor the environment variable
+ ‘SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’ in addition to
+ the now deprecated
+ ‘DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/21
+
+ (2) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 7 4, Next: 0 7 3, Prev: 0 7 5, Up: History<2>
+
+9.389 0.7.4
+===========
+
+19 Jun 2013
+
+ * Issue #20(1): Fix comparison of parsed SVN version on Python 3.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/20
+
+
+File: setuptools.info, Node: 0 7 3, Next: 0 7 2, Prev: 0 7 4, Up: History<2>
+
+9.390 0.7.3
+===========
+
+18 Jun 2013
+
+ * Issue #1(1): Disable installation of Windows-specific files on
+ non-Windows systems.
+
+ * Use new sysconfig module with Python 2.7 or >=3.2.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/1
+
+
+File: setuptools.info, Node: 0 7 2, Next: 0 7 1, Prev: 0 7 3, Up: History<2>
+
+9.391 0.7.2
+===========
+
+09 Jun 2013
+
+ * Issue #14(1): Use markerlib when the ‘parser’ module is not
+ available.
+
+ * Issue #10(2): ‘ez_setup.py’ now uses HTTPS to download setuptools
+ from PyPI.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/14
+
+ (2) https://github.com/pypa/setuptools/issues/10
+
+
+File: setuptools.info, Node: 0 7 1, Next: 0 7, Prev: 0 7 2, Up: History<2>
+
+9.392 0.7.1
+===========
+
+03 Jun 2013
+
+ * Fix NameError (Issue #3(1)) again - broken in bad merge.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/3
+
+
+File: setuptools.info, Node: 0 7, Next: 0 7b4, Prev: 0 7 1, Up: History<2>
+
+9.393 0.7
+=========
+
+02 Jun 2013
+
+ * Merged Setuptools and Distribute. See docs/merge.txt for details.
+
+Added several features that were slated for setuptools 0.6c12:
+
+ * Index URL now defaults to HTTPS.
+
+ * Added experimental environment marker support. Now clients may
+ designate a PEP-426(1) environment marker for “extra” dependencies.
+ Setuptools uses this feature in ‘setup.py’ for optional SSL and
+ certificate validation support on older platforms. Based on
+ Distutils-SIG discussions, the syntax is somewhat tentative. There
+ should probably be a PEP with a firmer spec before the feature
+ should be considered suitable for use.
+
+ * Added support for SSL certificate validation when installing
+ packages from an HTTPS service.
+
+ ---------- Footnotes ----------
+
+ (1) https://www.python.org/dev/peps/pep-0426/
+
+
+File: setuptools.info, Node: 0 7b4, Next: 0 6 49, Prev: 0 7, Up: History<2>
+
+9.394 0.7b4
+===========
+
+ * Issue #3(1): Fixed NameError in SSL support.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/3
+
+
+File: setuptools.info, Node: 0 6 49, Next: 0 6 48, Prev: 0 7b4, Up: History<2>
+
+9.395 0.6.49
+============
+
+04 Jul 2013
+
+ * Move warning check in ‘get_cache_path’ to follow the directory
+ creation to avoid errors when the cache path does not yet exist.
+ Fixes the error reported in Distribute #375(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 6 48, Next: 0 6 47, Prev: 0 6 49, Up: History<2>
+
+9.396 0.6.48
+============
+
+02 Jul 2013
+
+ * Correct AttributeError in ‘ResourceManager.get_cache_path’
+ introduced in 0.6.46 (redo).
+
+
+File: setuptools.info, Node: 0 6 47, Next: 0 6 46, Prev: 0 6 48, Up: History<2>
+
+9.397 0.6.47
+============
+
+02 Jul 2013
+
+ * Correct AttributeError in ‘ResourceManager.get_cache_path’
+ introduced in 0.6.46.
+
+
+File: setuptools.info, Node: 0 6 46, Next: 0 6 45, Prev: 0 6 47, Up: History<2>
+
+9.398 0.6.46
+============
+
+29 Jun 2013
+
+ * Distribute #375(1): Issue a warning if the PYTHON_EGG_CACHE or
+ otherwise customized egg cache location specifies a directory
+ that’s group- or world-writable.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 6 45, Next: 0 6 44, Prev: 0 6 46, Up: History<2>
+
+9.399 0.6.45
+============
+
+29 May 2013
+
+ * Distribute #379(1): ‘distribute_setup.py’ now traps VersionConflict
+ as well, restoring ability to upgrade from an older setuptools
+ version.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/379
+
+
+File: setuptools.info, Node: 0 6 44, Next: 0 6 43, Prev: 0 6 45, Up: History<2>
+
+9.400 0.6.44
+============
+
+28 May 2013
+
+ * ‘distribute_setup.py’ has been updated to allow Setuptools 0.7 to
+ satisfy use_setuptools.
+
+
+File: setuptools.info, Node: 0 6 43, Next: 0 6 42, Prev: 0 6 44, Up: History<2>
+
+9.401 0.6.43
+============
+
+24 May 2013
+
+ * Distribute #378(1): Restore support for Python 2.4 Syntax
+ (regression in 0.6.42).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/378
+
+
+File: setuptools.info, Node: 0 6 42, Next: 0 6 41, Prev: 0 6 43, Up: History<2>
+
+9.402 0.6.42
+============
+
+24 May 2013
+
+ * External links finder no longer yields duplicate links.
+
+ * Distribute #337(1): Moved site.py to setuptools/site-patch.py
+ (graft of very old patch from setuptools trunk which inspired PR
+ #31(2)).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/337
+
+ (2) https://github.com/pypa/setuptools/issues/31
+
+
+File: setuptools.info, Node: 0 6 41, Next: 0 6 40, Prev: 0 6 42, Up: History<2>
+
+9.403 0.6.41
+============
+
+24 May 2013
+
+ * Distribute #27(1): Use public api for loading resources from zip
+ files rather than the private method ‘_zip_directory_cache’.
+
+ * Added a new function ‘easy_install.get_win_launcher’ which may be
+ used by third-party libraries such as buildout to get a suitable
+ script launcher.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/27
+
+
+File: setuptools.info, Node: 0 6 40, Next: 0 6 39, Prev: 0 6 41, Up: History<2>
+
+9.404 0.6.40
+============
+
+14 May 2013
+
+ * Distribute #376(1): brought back cli.exe and gui.exe that were
+ deleted in the previous release.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/376
+
+
+File: setuptools.info, Node: 0 6 39, Next: 0 6 38, Prev: 0 6 40, Up: History<2>
+
+9.405 0.6.39
+============
+
+12 May 2013
+
+ * Add support for console launchers on ARM platforms.
+
+ * Fix possible issue in GUI launchers where the subsystem was not
+ supplied to the linker.
+
+ * Launcher build script now refactored for robustness.
+
+ * Distribute #375(1): Resources extracted from a zip egg to the file
+ system now also check the contents of the file against the zip
+ contents during each invocation of get_resource_filename.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/375
+
+
+File: setuptools.info, Node: 0 6 38, Next: 0 6 37, Prev: 0 6 39, Up: History<2>
+
+9.406 0.6.38
+============
+
+05 May 2013
+
+ * Distribute #371(1): The launcher manifest file is now installed
+ properly.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/371
+
+
+File: setuptools.info, Node: 0 6 37, Next: 0 6 36, Prev: 0 6 38, Up: History<2>
+
+9.407 0.6.37
+============
+
+04 May 2013
+
+ * Distribute #143(1): Launcher scripts, including easy_install
+ itself, are now accompanied by a manifest on 32-bit Windows
+ environments to avoid the Installer Detection Technology and thus
+ undesirable UAC elevation described in this Microsoft article(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/143
+
+ (2)
+http://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx
+
+
+File: setuptools.info, Node: 0 6 36, Next: 0 6 35, Prev: 0 6 37, Up: History<2>
+
+9.408 0.6.36
+============
+
+05 Apr 2013
+
+ * BB Pull Request #35(1): In Buildout #64(2), it was reported that
+ under Python 3, installation of distutils scripts could attempt to
+ copy the ‘__pycache__’ directory as a file, causing an error,
+ apparently only under Windows. Easy_install now skips all
+ directories when processing metadata scripts.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/35
+
+ (2) https://github.com/buildout/buildout/issues/64
+
+
+File: setuptools.info, Node: 0 6 35, Next: 0 6 34, Prev: 0 6 36, Up: History<2>
+
+9.409 0.6.35
+============
+
+16 Feb 2013
+
+Note this release is backward-incompatible with distribute 0.6.23-0.6.34
+in how it parses version numbers.
+
+ * Distribute #278(1): Restored compatibility with distribute 0.6.22
+ and setuptools 0.6. Updated the documentation to match more
+ closely with the version parsing as intended in setuptools 0.6.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/278
+
+
+File: setuptools.info, Node: 0 6 34, Next: 0 6 33, Prev: 0 6 35, Up: History<2>
+
+9.410 0.6.34
+============
+
+30 Dec 2012
+
+ * Distribute #341(1): 0.6.33 fails to build under Python 2.4.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/341
+
+
+File: setuptools.info, Node: 0 6 33, Next: 0 6 32, Prev: 0 6 34, Up: History<2>
+
+9.411 0.6.33
+============
+
+29 Dec 2012
+
+ * Fix 2 errors with Jython 2.5.
+
+ * Fix 1 failure with Jython 2.5 and 2.7.
+
+ * Disable workaround for Jython scripts on Linux systems.
+
+ * Distribute #336(1): ‘setup.py’ no longer masks failure exit code
+ when tests fail.
+
+ * Fix issue in pkg_resources where try/except around a
+ platform-dependent import would trigger hook load failures on
+ Mercurial. See pull request 32 for details.
+
+ * Distribute #341(2): Fix a ResourceWarning.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/336
+
+ (2) https://bitbucket.org/tarek/distribute/issue/341
+
+
+File: setuptools.info, Node: 0 6 32, Next: 0 6 31, Prev: 0 6 33, Up: History<2>
+
+9.412 0.6.32
+============
+
+26 Nov 2012
+
+ * Fix test suite with Python 2.6.
+
+ * Fix some DeprecationWarnings and ResourceWarnings.
+
+ * Distribute #335(1): Backed out ‘setup_requires’ superceding
+ installed requirements until regression can be addressed.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/335
+
+
+File: setuptools.info, Node: 0 6 31, Next: 0 6 30, Prev: 0 6 32, Up: History<2>
+
+9.413 0.6.31
+============
+
+24 Nov 2012
+
+ * Distribute #303(1): Make sure the manifest only ever contains UTF-8
+ in Python 3.
+
+ * Distribute #329(2): Properly close files created by tests for
+ compatibility with Jython.
+
+ * Work around Jython #1980(3) and Jython #1981(4).
+
+ * Distribute #334(5): Provide workaround for packages that reference
+ ‘sys.__stdout__’ such as numpy does. This change should address
+ virtualenv ‘#359(6)
+ <‘https://github.com/pypa/virtualenv/issues/359’>‘_ as long as the
+ system encoding is UTF-8 or the IO encoding is specified in the
+ environment, i.e.:
+
+ PYTHONIOENCODING=utf8 pip install numpy
+
+ * Fix for encoding issue when installing from Windows executable on
+ Python 3.
+
+ * Distribute #323(7): Allow ‘setup_requires’ requirements to
+ supercede installed requirements. Added some new keyword arguments
+ to existing pkg_resources methods. Also had to updated how
+ __path__ is handled for namespace packages to ensure that when a
+ new egg distribution containing a namespace package is placed on
+ sys.path, the entries in __path__ are found in the same order they
+ would have been in had that egg been on the path when pkg_resources
+ was first imported.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/303
+
+ (2) https://bitbucket.org/tarek/distribute/issue/329
+
+ (3) http://bugs.jython.org/issue1980
+
+ (4) http://bugs.jython.org/issue1981
+
+ (5) https://bitbucket.org/tarek/distribute/issue/334
+
+ (6) https://github.com/pypa/setuptools/issues/359
+
+ (7) https://bitbucket.org/tarek/distribute/issue/323
+
+
+File: setuptools.info, Node: 0 6 30, Next: 0 6 29, Prev: 0 6 31, Up: History<2>
+
+9.414 0.6.30
+============
+
+22 Oct 2012
+
+ * Distribute #328(1): Clean up temporary directories in
+ distribute_setup.py.
+
+ * Fix fatal bug in distribute_setup.py.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/328
+
+
+File: setuptools.info, Node: 0 6 29, Next: 0 6 28, Prev: 0 6 30, Up: History<2>
+
+9.415 0.6.29
+============
+
+21 Oct 2012
+
+ * BB Pull Request #14(1): Honor file permissions in zip files.
+
+ * Distribute #327(2): Merged pull request #24(3) to fix a dependency
+ problem with pip.
+
+ * Merged pull request #23(4) to fix
+ ‘https://github.com/pypa/virtualenv/issues/301’.
+
+ * If Sphinx is installed, the ‘upload_docs’ command now runs
+ ‘build_sphinx’ to produce uploadable documentation.
+
+ * Distribute #326(5): ‘upload_docs’ provided mangled auth credentials
+ under Python 3.
+
+ * Distribute #320(6): Fix check for “createable” in
+ distribute_setup.py.
+
+ * Distribute #305(7): Remove a warning that was triggered during
+ normal operations.
+
+ * Distribute #311(8): Print metadata in UTF-8 independent of
+ platform.
+
+ * Distribute #303(9): Read manifest file with UTF-8 encoding under
+ Python 3.
+
+ * Distribute #301(10): Allow to run tests of namespace packages when
+ using 2to3.
+
+ * Distribute #304(11): Prevent import loop in site.py under Python
+ 3.3.
+
+ * Distribute #283(12): Reenable scanning of ‘*.pyc’ / ‘*.pyo’ files
+ on Python 3.3.
+
+ * Distribute #299(13): The develop command didn’t work on Python 3,
+ when using 2to3, as the egg link would go to the Python 2 source.
+ Linking to the 2to3’d code in build/lib makes it work, although you
+ will have to rebuild the module before testing it.
+
+ * Distribute #306(14): Even if 2to3 is used, we build in-place under
+ Python 2.
+
+ * Distribute #307(15): Prints the full path when .svn/entries is
+ broken.
+
+ * Distribute #313(16): Support for sdist subcommands (Python 2.7)
+
+ * Distribute #314(17): test_local_index() would fail an OS X.
+
+ * Distribute #310(18): Non-ascii characters in a namespace
+ __init__.py causes errors.
+
+ * Distribute #218(19): Improved documentation on behavior of
+ ‘package_data’ and ‘include_package_data’. Files indicated by
+ ‘package_data’ are now included in the manifest.
+
+ * ‘distribute_setup.py’ now allows a ‘--download-base’ argument for
+ retrieving distribute from a specified location.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/pypa/setuptools/pull-request/14
+
+ (2) https://bitbucket.org/tarek/distribute/issue/327
+
+ (3) https://github.com/pypa/setuptools/issues/24
+
+ (4) https://github.com/pypa/setuptools/issues/23
+
+ (5) https://bitbucket.org/tarek/distribute/issue/326
+
+ (6) https://bitbucket.org/tarek/distribute/issue/320
+
+ (7) https://bitbucket.org/tarek/distribute/issue/305
+
+ (8) https://bitbucket.org/tarek/distribute/issue/311
+
+ (9) https://bitbucket.org/tarek/distribute/issue/303
+
+ (10) https://bitbucket.org/tarek/distribute/issue/301
+
+ (11) https://bitbucket.org/tarek/distribute/issue/304
+
+ (12) https://bitbucket.org/tarek/distribute/issue/283
+
+ (13) https://bitbucket.org/tarek/distribute/issue/299
+
+ (14) https://bitbucket.org/tarek/distribute/issue/306
+
+ (15) https://bitbucket.org/tarek/distribute/issue/307
+
+ (16) https://bitbucket.org/tarek/distribute/issue/313
+
+ (17) https://bitbucket.org/tarek/distribute/issue/314
+
+ (18) https://bitbucket.org/tarek/distribute/issue/310
+
+ (19) https://bitbucket.org/tarek/distribute/issue/218
+
+
+File: setuptools.info, Node: 0 6 28, Next: 0 6 27, Prev: 0 6 29, Up: History<2>
+
+9.416 0.6.28
+============
+
+22 Jul 2012
+
+ * Distribute #294(1): setup.py can now be invoked from any directory.
+
+ * Scripts are now installed honoring the umask.
+
+ * Added support for .dist-info directories.
+
+ * Distribute #283(2): Fix and disable scanning of ‘*.pyc’ / ‘*.pyo’
+ files on Python 3.3.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/294
+
+ (2) https://bitbucket.org/tarek/distribute/issue/283
+
+
+File: setuptools.info, Node: 0 6 27, Next: 0 6 26, Prev: 0 6 28, Up: History<2>
+
+9.417 0.6.27
+============
+
+18 May 2012
+
+ * Support current snapshots of CPython 3.3.
+
+ * Distribute now recognizes README.rst as a standard, default readme
+ file.
+
+ * Exclude ‘encodings’ modules when removing modules from sys.modules.
+ Workaround for #285(1).
+
+ * Distribute #231(2): Don’t fiddle with system python when used with
+ buildout (bootstrap.py)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/285
+
+ (2) https://bitbucket.org/tarek/distribute/issue/231
+
+
+File: setuptools.info, Node: 0 6 26, Next: 0 6 25, Prev: 0 6 27, Up: History<2>
+
+9.418 0.6.26
+============
+
+08 Apr 2012
+
+ * Distribute #183(1): Symlinked files are now extracted from source
+ distributions.
+
+ * Distribute #227(2): Easy_install fetch parameters are now passed
+ during the installation of a source distribution; now fulfillment
+ of setup_requires dependencies will honor the parameters passed to
+ easy_install.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/183
+
+ (2) https://bitbucket.org/tarek/distribute/issue/227
+
+
+File: setuptools.info, Node: 0 6 25, Next: 0 6 24, Prev: 0 6 26, Up: History<2>
+
+9.419 0.6.25
+============
+
+08 Feb 2012
+
+ * Distribute #258(1): Workaround a cache issue
+
+ * Distribute #260(2): distribute_setup.py now accepts the –user
+ parameter for Python 2.6 and later.
+
+ * Distribute #262(3): package_index.open_with_auth no longer throws
+ LookupError on Python 3.
+
+ * Distribute #269(4): AttributeError when an exception occurs reading
+ Manifest.in on late releases of Python.
+
+ * Distribute #272(5): Prevent TypeError when namespace package names
+ are unicode and single-install-externally-managed is used. Also
+ fixes PIP issue 449.
+
+ * Distribute #273(6): Legacy script launchers now install with
+ Python2/3 support.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/258
+
+ (2) https://bitbucket.org/tarek/distribute/issue/260
+
+ (3) https://bitbucket.org/tarek/distribute/issue/262
+
+ (4) https://bitbucket.org/tarek/distribute/issue/269
+
+ (5) https://bitbucket.org/tarek/distribute/issue/272
+
+ (6) https://bitbucket.org/tarek/distribute/issue/273
+
+
+File: setuptools.info, Node: 0 6 24, Next: 0 6 23, Prev: 0 6 25, Up: History<2>
+
+9.420 0.6.24
+============
+
+14 Oct 2011
+
+ * Distribute #249(1): Added options to exclude 2to3 fixers
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/249
+
+
+File: setuptools.info, Node: 0 6 23, Next: 0 6 21, Prev: 0 6 24, Up: History<2>
+
+9.421 0.6.23
+============
+
+22 Sep 2011
+
+ * Distribute #244(1): Fixed a test
+
+ * Distribute #243(2): Fixed a test
+
+ * Distribute #239(3): Fixed a test
+
+ * Distribute #240(4): Fixed a test
+
+ * Distribute #241(5): Fixed a test
+
+ * Distribute #237(6): Fixed a test
+
+ * Distribute #238(7): easy_install now uses 64bit executable wrappers
+ on 64bit Python
+
+ * Distribute #208(8): Fixed parsed_versions, it now honors
+ post-releases as noted in the documentation
+
+ * Distribute #207(9): Windows cli and gui wrappers pass CTRL-C to
+ child python process
+
+ * Distribute #227(10): easy_install now passes its arguments to
+ setup.py bdist_egg
+
+ * Distribute #225(11): Fixed a NameError on Python 2.5, 2.4
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/244
+
+ (2) https://bitbucket.org/tarek/distribute/issue/243
+
+ (3) https://bitbucket.org/tarek/distribute/issue/239
+
+ (4) https://bitbucket.org/tarek/distribute/issue/240
+
+ (5) https://bitbucket.org/tarek/distribute/issue/241
+
+ (6) https://bitbucket.org/tarek/distribute/issue/237
+
+ (7) https://bitbucket.org/tarek/distribute/issue/238
+
+ (8) https://bitbucket.org/tarek/distribute/issue/208
+
+ (9) https://bitbucket.org/tarek/distribute/issue/207
+
+ (10) https://bitbucket.org/tarek/distribute/issue/227
+
+ (11) https://bitbucket.org/tarek/distribute/issue/225
+
+
+File: setuptools.info, Node: 0 6 21, Next: 0 6 20, Prev: 0 6 23, Up: History<2>
+
+9.422 0.6.21
+============
+
+20 Aug 2011
+
+ * Distribute #225(1): FIxed a regression on py2.4
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/225
+
+
+File: setuptools.info, Node: 0 6 20, Next: 0 6 19, Prev: 0 6 21, Up: History<2>
+
+9.423 0.6.20
+============
+
+18 Aug 2011
+
+ * Distribute #135(1): Include url in warning when processing URLs in
+ package_index.
+
+ * Distribute #212(2): Fix issue where easy_instal fails on Python 3
+ on windows installer.
+
+ * Distribute #213(3): Fix typo in documentation.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/135
+
+ (2) https://bitbucket.org/tarek/distribute/issue/212
+
+ (3) https://bitbucket.org/tarek/distribute/issue/213
+
+
+File: setuptools.info, Node: 0 6 19, Next: 0 6 18, Prev: 0 6 20, Up: History<2>
+
+9.424 0.6.19
+============
+
+02 Jun 2011
+
+ * Distribute #206(1): AttributeError: ‘HTTPMessage’ object has no
+ attribute ‘getheaders’
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/206
+
+
+File: setuptools.info, Node: 0 6 18, Next: 0 6 17, Prev: 0 6 19, Up: History<2>
+
+9.425 0.6.18
+============
+
+01 Jun 2011
+
+ * Distribute #210(1): Fixed a regression introduced by Distribute
+ #204(2) fix.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/210
+
+ (2) https://bitbucket.org/tarek/distribute/issue/204
+
+
+File: setuptools.info, Node: 0 6 17, Next: 0 6 16, Prev: 0 6 18, Up: History<2>
+
+9.426 0.6.17
+============
+
+30 May 2011
+
+ * Support ‘DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’
+ environment variable to allow to disable installation of
+ easy_install-${version} script.
+
+ * Support Python >=3.1.4 and >=3.2.1.
+
+ * Distribute #204(1): Don’t try to import the parent of a namespace
+ package in declare_namespace
+
+ * Distribute #196(2): Tolerate responses with multiple Content-Length
+ headers
+
+ * Distribute #205(3): Sandboxing doesn’t preserve working_set. Leads
+ to setup_requires problems.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/204
+
+ (2) https://bitbucket.org/tarek/distribute/issue/196
+
+ (3) https://bitbucket.org/tarek/distribute/issue/205
+
+
+File: setuptools.info, Node: 0 6 16, Next: 0 6 15, Prev: 0 6 17, Up: History<2>
+
+9.427 0.6.16
+============
+
+28 Apr 2011
+
+ * Builds sdist gztar even on Windows (avoiding Distribute #193(1)).
+
+ * Distribute #192(2): Fixed metadata omitted on Windows when
+ package_dir specified with forward-slash.
+
+ * Distribute #195(3): Cython build support.
+
+ * Distribute #200(4): Issues with recognizing 64-bit packages on
+ Windows.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/193
+
+ (2) https://bitbucket.org/tarek/distribute/issue/192
+
+ (3) https://bitbucket.org/tarek/distribute/issue/195
+
+ (4) https://bitbucket.org/tarek/distribute/issue/200
+
+
+File: setuptools.info, Node: 0 6 15, Next: 0 6 14, Prev: 0 6 16, Up: History<2>
+
+9.428 0.6.15
+============
+
+12 Mar 2011
+
+ * Fixed typo in bdist_egg
+
+ * Several issues under Python 3 has been solved.
+
+ * Distribute #146(1): Fixed missing DLL files after easy_install of
+ windows exe package.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/146
+
+
+File: setuptools.info, Node: 0 6 14, Next: 0 6 13, Prev: 0 6 15, Up: History<2>
+
+9.429 0.6.14
+============
+
+15 Jul 2010
+
+ * Distribute #170(1): Fixed unittest failure. Thanks to Toshio.
+
+ * Distribute #171(2): Fixed race condition in unittests cause
+ deadlocks in test suite.
+
+ * Distribute #143(3): Fixed a lookup issue with easy_install. Thanks
+ to David and Zooko.
+
+ * Distribute #174(4): Fixed the edit mode when its used with
+ setuptools itself
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/170
+
+ (2) https://bitbucket.org/tarek/distribute/issue/171
+
+ (3) https://bitbucket.org/tarek/distribute/issue/143
+
+ (4) https://bitbucket.org/tarek/distribute/issue/174
+
+
+File: setuptools.info, Node: 0 6 13, Next: 0 6 12, Prev: 0 6 14, Up: History<2>
+
+9.430 0.6.13
+============
+
+31 May 2010
+
+ * Distribute #160(1): 2.7 gives ValueError(“Invalid IPv6 URL”)
+
+ * Distribute #150(2): Fixed using ~/.local even in a
+ –no-site-packages virtualenv
+
+ * Distribute #163(3): scan index links before external links, and
+ don’t use the md5 when comparing two distributions
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/160
+
+ (2) https://bitbucket.org/tarek/distribute/issue/150
+
+ (3) https://bitbucket.org/tarek/distribute/issue/163
+
+
+File: setuptools.info, Node: 0 6 12, Next: 0 6 11, Prev: 0 6 13, Up: History<2>
+
+9.431 0.6.12
+============
+
+06 May 2010
+
+ * Distribute #149(1): Fixed various failures on 2.3/2.4
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/149
+
+
+File: setuptools.info, Node: 0 6 11, Next: 0 6 10, Prev: 0 6 12, Up: History<2>
+
+9.432 0.6.11
+============
+
+06 May 2010
+
+ * Found another case of SandboxViolation - fixed
+
+ * Distribute #15(1) and Distribute #48(2): Introduced a socket
+ timeout of 15 seconds on url openings
+
+ * Added indexsidebar.html into MANIFEST.in
+
+ * Distribute #108(3): Fixed TypeError with Python3.1
+
+ * Distribute #121(4): Fixed –help install command trying to actually
+ install.
+
+ * Distribute #112(5): Added an os.makedirs so that Tarek’s solution
+ will work.
+
+ * Distribute #133(6): Added –no-find-links to easy_install
+
+ * Added easy_install –user
+
+ * Distribute #100(7): Fixed develop –user not taking ‘.’ in
+ PYTHONPATH into account
+
+ * Distribute #134(8): removed spurious UserWarnings. Patch by
+ VanLindberg
+
+ * Distribute #138(9): cant_write_to_target error when setup_requires
+ is used.
+
+ * Distribute #147(10): respect the sys.dont_write_bytecode flag
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/15
+
+ (2) https://bitbucket.org/tarek/distribute/issue/48
+
+ (3) https://bitbucket.org/tarek/distribute/issue/108
+
+ (4) https://bitbucket.org/tarek/distribute/issue/121
+
+ (5) https://bitbucket.org/tarek/distribute/issue/112
+
+ (6) https://bitbucket.org/tarek/distribute/issue/133
+
+ (7) https://bitbucket.org/tarek/distribute/issue/100
+
+ (8) https://bitbucket.org/tarek/distribute/issue/134
+
+ (9) https://bitbucket.org/tarek/distribute/issue/138
+
+ (10) https://bitbucket.org/tarek/distribute/issue/147
+
+
+File: setuptools.info, Node: 0 6 10, Next: 0 6 9, Prev: 0 6 11, Up: History<2>
+
+9.433 0.6.10
+============
+
+12 Dec 2009
+
+ * Reverted change made for the DistributionNotFound exception because
+ zc.buildout uses the exception message to get the name of the
+ distribution.
+
+
+File: setuptools.info, Node: 0 6 9, Next: 0 6 8, Prev: 0 6 10, Up: History<2>
+
+9.434 0.6.9
+===========
+
+12 Dec 2009
+
+ * Distribute #90(1): unknown setuptools version can be added in the
+ working set
+
+ * Distribute #87(2): setupt.py doesn’t try to convert
+ distribute_setup.py anymore Initial Patch by arfrever.
+
+ * Distribute #89(3): added a side bar with a download link to the
+ doc.
+
+ * Distribute #86(4): fixed missing sentence in pkg_resources doc.
+
+ * Added a nicer error message when a DistributionNotFound is raised.
+
+ * Distribute #80(5): test_develop now works with Python 3.1
+
+ * Distribute #93(6): upload_docs now works if there is an empty
+ sub-directory.
+
+ * Distribute #70(7): exec bit on non-exec files
+
+ * Distribute #99(8): now the standalone easy_install command doesn’t
+ uses a “setup.cfg” if any exists in the working directory. It will
+ use it only if triggered by ‘install_requires’ from a setup.py call
+ (install, develop, etc).
+
+ * Distribute #101(9): Allowing ‘os.devnull’ in Sandbox
+
+ * Distribute #92(10): Fixed the “no eggs” found error with MacPort
+ (platform.mac_ver() fails)
+
+ * Distribute #103(11): test_get_script_header_jython_workaround not
+ run anymore under py3 with C or POSIX local. Contributed by
+ Arfrever.
+
+ * Distribute #104(12): remvoved the assertion when the installation
+ fails, with a nicer message for the end user.
+
+ * Distribute #100(13): making sure there’s no SandboxViolation when
+ the setup script patches setuptools.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/90
+
+ (2) https://bitbucket.org/tarek/distribute/issue/87
+
+ (3) https://bitbucket.org/tarek/distribute/issue/89
+
+ (4) https://bitbucket.org/tarek/distribute/issue/86
+
+ (5) https://bitbucket.org/tarek/distribute/issue/80
+
+ (6) https://bitbucket.org/tarek/distribute/issue/93
+
+ (7) https://bitbucket.org/tarek/distribute/issue/70
+
+ (8) https://bitbucket.org/tarek/distribute/issue/99
+
+ (9) https://bitbucket.org/tarek/distribute/issue/101
+
+ (10) https://bitbucket.org/tarek/distribute/issue/92
+
+ (11) https://bitbucket.org/tarek/distribute/issue/103
+
+ (12) https://bitbucket.org/tarek/distribute/issue/104
+
+ (13) https://bitbucket.org/tarek/distribute/issue/100
+
+
+File: setuptools.info, Node: 0 6 8, Next: 0 6 7, Prev: 0 6 9, Up: History<2>
+
+9.435 0.6.8
+===========
+
+01 Nov 2009
+
+ * Added “check_packages” in dist. (added in Setuptools 0.6c11)
+
+ * Fixed the DONT_PATCH_SETUPTOOLS state.
+
+
+File: setuptools.info, Node: 0 6 7, Next: 0 6 6, Prev: 0 6 8, Up: History<2>
+
+9.436 0.6.7
+===========
+
+01 Nov 2009
+
+ * Distribute #58(1): Added –user support to the develop command
+
+ * Distribute #11(2): Generated scripts now wrap their call to the
+ script entry point in the standard “if name == ‘main’”
+
+ * Added the ‘DONT_PATCH_SETUPTOOLS’ environment variable, so
+ virtualenv can drive an installation that doesn’t patch a global
+ setuptools.
+
+ * Reviewed unladen-swallow specific change from
+ ‘http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719’
+ and determined that it no longer applies. Distribute should work
+ fine with Unladen Swallow 2009Q3.
+
+ * Distribute #21(3): Allow PackageIndex.open_url to gracefully handle
+ all cases of a httplib.HTTPException instead of just InvalidURL and
+ BadStatusLine.
+
+ * Removed virtual-python.py from this distribution and updated
+ documentation to point to the actively maintained virtualenv
+ instead.
+
+ * Distribute #64(4): use_setuptools no longer rebuilds the distribute
+ egg every time it is run
+
+ * use_setuptools now properly respects the requested version
+
+ * use_setuptools will no longer try to import a distribute egg for
+ the wrong Python version
+
+ * Distribute #74(5): no_fake should be True by default.
+
+ * Distribute #72(6): avoid a bootstrapping issue with easy_install -U
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/58
+
+ (2) https://bitbucket.org/tarek/distribute/issue/11
+
+ (3) https://bitbucket.org/tarek/distribute/issue/21
+
+ (4) https://bitbucket.org/tarek/distribute/issue/64
+
+ (5) https://bitbucket.org/tarek/distribute/issue/74
+
+ (6) https://bitbucket.org/tarek/distribute/issue/72
+
+
+File: setuptools.info, Node: 0 6 6, Next: 0 6 5, Prev: 0 6 7, Up: History<2>
+
+9.437 0.6.6
+===========
+
+15 Oct 2009
+
+ * Unified the bootstrap file so it works on both py2.x and py3k
+ without 2to3 (patch by Holger Krekel)
+
+
+File: setuptools.info, Node: 0 6 5, Next: 0 6 4, Prev: 0 6 6, Up: History<2>
+
+9.438 0.6.5
+===========
+
+15 Oct 2009
+
+ * Distribute #65(1): cli.exe and gui.exe are now generated at build
+ time, depending on the platform in use.
+
+ * Distribute #67(2): Fixed doc typo (PEP 381(3)/PEP 382(4)).
+
+ * Distribute no longer shadows setuptools if we require a 0.7-series
+ setuptools. And an error is raised when installing a 0.7
+ setuptools with distribute.
+
+ * When run from within buildout, no attempt is made to modify an
+ existing setuptools egg, whether in a shared egg directory or a
+ system setuptools.
+
+ * Fixed a hole in sandboxing allowing builtin file to write outside
+ of the sandbox.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/65
+
+ (2) https://bitbucket.org/tarek/distribute/issue/67
+
+ (3) https://www.python.org/dev/peps/pep-0381/
+
+ (4) https://www.python.org/dev/peps/pep-0382/
+
+
+File: setuptools.info, Node: 0 6 4, Next: 0 6 3, Prev: 0 6 5, Up: History<2>
+
+9.439 0.6.4
+===========
+
+10 Oct 2009
+
+ * Added the generation of ‘distribute_setup_3k.py’ during the
+ release. This closes Distribute #52(1).
+
+ * Added an upload_docs command to easily upload project documentation
+ to PyPI’s ‘https://pythonhosted.org’. This close issue Distribute
+ #56(2).
+
+ * Fixed a bootstrap bug on the use_setuptools() API.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/52
+
+ (2) https://bitbucket.org/tarek/distribute/issue/56
+
+
+File: setuptools.info, Node: 0 6 3, Next: 0 6 2, Prev: 0 6 4, Up: History<2>
+
+9.440 0.6.3
+===========
+
+27 Sep 2009
+
+* Menu:
+
+* setuptools::
+* bootstrapping::
+
+
+File: setuptools.info, Node: setuptools, Next: bootstrapping, Up: 0 6 3
+
+9.440.1 setuptools
+------------------
+
+ * Fixed a bunch of calls to file() that caused crashes on Python 3.
+
+
+File: setuptools.info, Node: bootstrapping, Prev: setuptools, Up: 0 6 3
+
+9.440.2 bootstrapping
+---------------------
+
+ * Fixed a bug in sorting that caused bootstrap to fail on Python 3.
+
+
+File: setuptools.info, Node: 0 6 2, Next: 0 6 1, Prev: 0 6 3, Up: History<2>
+
+9.441 0.6.2
+===========
+
+26 Sep 2009
+
+* Menu:
+
+* setuptools: setuptools<2>.
+* bootstrapping: bootstrapping<2>.
+
+
+File: setuptools.info, Node: setuptools<2>, Next: bootstrapping<2>, Up: 0 6 2
+
+9.441.1 setuptools
+------------------
+
+ * Added Python 3 support; see docs/python3.txt. This closes Old
+ Setuptools #39(1).
+
+ * Added option to run 2to3 automatically when installing on Python 3.
+ This closes issue Distribute #31(2).
+
+ * Fixed invalid usage of requirement.parse, that broke develop -d.
+ This closes Old Setuptools #44(3).
+
+ * Fixed script launcher for 64-bit Windows. This closes Old
+ Setuptools #2(4).
+
+ * KeyError when compiling extensions. This closes Old Setuptools
+ #41(5).
+
+ ---------- Footnotes ----------
+
+ (1) http://bugs.python.org/setuptools/issue39
+
+ (2) https://bitbucket.org/tarek/distribute/issue/31
+
+ (3) http://bugs.python.org/setuptools/issue44
+
+ (4) http://bugs.python.org/setuptools/issue2
+
+ (5) http://bugs.python.org/setuptools/issue41
+
+
+File: setuptools.info, Node: bootstrapping<2>, Prev: setuptools<2>, Up: 0 6 2
+
+9.441.2 bootstrapping
+---------------------
+
+ * Fixed bootstrap not working on Windows. This closes issue
+ Distribute #49(1).
+
+ * Fixed 2.6 dependencies. This closes issue Distribute #50(2).
+
+ * Make sure setuptools is patched when running through easy_install
+ This closes Old Setuptools #40(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/49
+
+ (2) https://bitbucket.org/tarek/distribute/issue/50
+
+ (3) http://bugs.python.org/setuptools/issue40
+
+
+File: setuptools.info, Node: 0 6 1, Next: 0 6, Prev: 0 6 2, Up: History<2>
+
+9.442 0.6.1
+===========
+
+08 Sep 2009
+
+* Menu:
+
+* setuptools: setuptools<3>.
+* bootstrapping: bootstrapping<3>.
+
+
+File: setuptools.info, Node: setuptools<3>, Next: bootstrapping<3>, Up: 0 6 1
+
+9.442.1 setuptools
+------------------
+
+ * package_index.urlopen now catches BadStatusLine and malformed url
+ errors. This closes Distribute #16(1) and Distribute #18(2).
+
+ * zip_ok is now False by default. This closes Old Setuptools #33(3).
+
+ * Fixed invalid URL error catching. Old Setuptools #20(4).
+
+ * Fixed invalid bootstraping with easy_install installation
+ (Distribute #40(5)). Thanks to Florian Schulze for the help.
+
+ * Removed buildout/bootstrap.py. A new repository will create a
+ specific bootstrap.py script.
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/16
+
+ (2) https://bitbucket.org/tarek/distribute/issue/18
+
+ (3) http://bugs.python.org/setuptools/issue33
+
+ (4) http://bugs.python.org/setuptools/issue20
+
+ (5) https://bitbucket.org/tarek/distribute/issue/40
+
+
+File: setuptools.info, Node: bootstrapping<3>, Prev: setuptools<3>, Up: 0 6 1
+
+9.442.2 bootstrapping
+---------------------
+
+ * The boostrap process leave setuptools alone if detected in the
+ system and –root or –prefix is provided, but is not in the same
+ location. This closes Distribute #10(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/10
+
+
+File: setuptools.info, Node: 0 6, Next: 0 6c9, Prev: 0 6 1, Up: History<2>
+
+9.443 0.6
+=========
+
+09 Aug 2009
+
+* Menu:
+
+* setuptools: setuptools<4>.
+* pkg_resources::
+* easy_install::
+
+
+File: setuptools.info, Node: setuptools<4>, Next: pkg_resources, Up: 0 6
+
+9.443.1 setuptools
+------------------
+
+ * Packages required at build time where not fully present at install
+ time. This closes Distribute #12(1).
+
+ * Protected against failures in tarfile extraction. This closes
+ Distribute #10(2).
+
+ * Made Jython api_tests.txt doctest compatible. This closes
+ Distribute #7(3).
+
+ * sandbox.py replaced builtin type file with builtin function open.
+ This closes Distribute #6(4).
+
+ * Immediately close all file handles. This closes Distribute #3(5).
+
+ * Added compatibility with Subversion 1.6. This references
+ Distribute #1(6).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/12
+
+ (2) https://bitbucket.org/tarek/distribute/issue/10
+
+ (3) https://bitbucket.org/tarek/distribute/issue/7
+
+ (4) https://bitbucket.org/tarek/distribute/issue/6
+
+ (5) https://bitbucket.org/tarek/distribute/issue/3
+
+ (6) https://bitbucket.org/tarek/distribute/issue/1
+
+
+File: setuptools.info, Node: pkg_resources, Next: easy_install, Prev: setuptools<4>, Up: 0 6
+
+9.443.2 pkg_resources
+---------------------
+
+ * Avoid a call to /usr/bin/sw_vers on OSX and use the official
+ platform API instead. Based on a patch from ronaldoussoren. This
+ closes issue #5(1).
+
+ * Fixed a SandboxViolation for mkdir that could occur in certain
+ cases. This closes Distribute #13(2).
+
+ * Allow to find_on_path on systems with tight permissions to fail
+ gracefully. This closes Distribute #9(3).
+
+ * Corrected inconsistency between documentation and code of
+ add_entry. This closes Distribute #8(4).
+
+ * Immediately close all file handles. This closes Distribute #3(5).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/pypa/setuptools/issues/5
+
+ (2) https://bitbucket.org/tarek/distribute/issue/13
+
+ (3) https://bitbucket.org/tarek/distribute/issue/9
+
+ (4) https://bitbucket.org/tarek/distribute/issue/8
+
+ (5) https://bitbucket.org/tarek/distribute/issue/3
+
+
+File: setuptools.info, Node: easy_install, Prev: pkg_resources, Up: 0 6
+
+9.443.3 easy_install
+--------------------
+
+ * Immediately close all file handles. This closes Distribute #3(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://bitbucket.org/tarek/distribute/issue/3
+
+
+File: setuptools.info, Node: 0 6c9, Next: 0 6c7, Prev: 0 6, Up: History<2>
+
+9.444 0.6c9
+===========
+
+ * Fixed a missing files problem when using Windows source
+ distributions on non-Windows platforms, due to distutils not
+ handling manifest file line endings correctly.
+
+ * Updated Pyrex support to work with Pyrex 0.9.6 and higher.
+
+ * Minor changes for Jython compatibility, including skipping
+ tests that can’t work on Jython.
+
+ * Fixed not installing eggs in ‘install_requires’ if they were
+ also used for ‘setup_requires’ or ‘tests_require’.
+
+ * Fixed not fetching eggs in ‘install_requires’ when running
+ tests.
+
+ * Allow ‘ez_setup.use_setuptools()’ to upgrade existing
+ setuptools installations when called from a standalone
+ ‘setup.py’.
+
+ * Added a warning if a namespace package is declared, but its
+ parent package is not also declared as a namespace.
+
+ * Support Subversion 1.5
+
+ * Removed use of deprecated ‘md5’ module if ‘hashlib’ is
+ available
+
+ * Fixed ‘bdist_wininst upload’ trying to upload the ‘.exe’ twice
+
+ * Fixed ‘bdist_egg’ putting a ‘native_libs.txt’ in the source
+ package’s ‘.egg-info’, when it should only be in the built
+ egg’s ‘EGG-INFO’.
+
+ * Ensure that _full_name is set on all shared libs before
+ extensions are checked for shared lib usage. (Fixes a bug in
+ the experimental shared library build support.)
+
+ * Fix to allow unpacked eggs containing native libraries to fail
+ more gracefully under Google App Engine (with an ‘ImportError’
+ loading the C-based module, instead of getting a ‘NameError’).
+
+ * Fixed ‘win32.exe’ support for .pth files, so unnecessary
+ directory nesting is flattened out in the resulting egg.
+ (There was a case-sensitivity problem that affected some
+ distributions, notably ‘pywin32’.)
+
+ * Prevent ‘--help-commands’ and other junk from showing under
+ Python 2.5 when running ‘easy_install --help’.
+
+ * Fixed GUI scripts sometimes not executing on Windows
+
+ * Fixed not picking up dependency links from recursive
+ dependencies.
+
+ * Only make ‘.py’, ‘.dll’ and ‘.so’ files executable when
+ unpacking eggs
+
+ * Changes for Jython compatibility
+
+ * Improved error message when a requirement is also a directory
+ name, but the specified directory is not a source package.
+
+ * Fixed ‘--allow-hosts’ option blocking ‘file:’ URLs
+
+ * Fixed HTTP SVN detection failing when the page title included
+ a project name (e.g. on SourceForge-hosted SVN)
+
+ * Fix Jython script installation to handle ‘#!’ lines better
+ when ‘sys.executable’ is a script.
+
+ * Removed use of deprecated ‘md5’ module if ‘hashlib’ is
+ available
+
+ * Keep site directories (e.g. ‘site-packages’) from being
+ included in ‘.pth’ files.
+
+
+File: setuptools.info, Node: 0 6c7, Next: 0 6c6, Prev: 0 6c9, Up: History<2>
+
+9.445 0.6c7
+===========
+
+ * Fixed ‘distutils.filelist.findall()’ crashing on broken
+ symlinks, and ‘egg_info’ command failing on new, uncommitted
+ SVN directories.
+
+ * Fix import problems with nested namespace packages installed
+ via ‘--root’ or ‘--single-version-externally-managed’, due to
+ the parent package not having the child package as an
+ attribute.
+
+ * ‘ftp:’ download URLs now work correctly.
+
+ * The default ‘--index-url’ is now
+ ‘https://pypi.python.org/simple’, to use the Python Package
+ Index’s new simpler (and faster!) REST API.
+
+
+File: setuptools.info, Node: 0 6c6, Next: 0 6c5, Prev: 0 6c7, Up: History<2>
+
+9.446 0.6c6
+===========
+
+ * Added ‘--egg-path’ option to ‘develop’ command, allowing you
+ to force ‘.egg-link’ files to use relative paths (allowing
+ them to be shared across platforms on a networked drive).
+
+ * Fix not building binary RPMs correctly.
+
+ * Fix “eggsecutables” (such as setuptools’ own egg) only being
+ runnable with bash-compatible shells.
+
+ * Fix ‘#!’ parsing problems in Windows ‘.exe’ script wrappers,
+ when there was whitespace inside a quoted argument or at the
+ end of the ‘#!’ line (a regression introduced in 0.6c4).
+
+ * Fix ‘test’ command possibly failing if an older version of the
+ project being tested was installed on ‘sys.path’ ahead of the
+ test source directory.
+
+ * Fix ‘find_packages()’ treating ‘ez_setup’ and directories with
+ ‘.’ in their names as packages.
+
+ * EasyInstall no longer aborts the installation process if a URL
+ it wants to retrieve can’t be downloaded, unless the URL is an
+ actual package download. Instead, it issues a warning and
+ tries to keep going.
+
+ * Fixed distutils-style scripts originally built on Windows
+ having their line endings doubled when installed on any
+ platform.
+
+ * Added ‘--local-snapshots-ok’ flag, to allow building eggs from
+ projects installed using ‘setup.py develop’.
+
+ * Fixed not HTML-decoding URLs scraped from web pages
+
+
+File: setuptools.info, Node: 0 6c5, Next: 0 6c4, Prev: 0 6c6, Up: History<2>
+
+9.447 0.6c5
+===========
+
+ * Fix uploaded ‘bdist_rpm’ packages being described as
+ ‘bdist_egg’ packages under Python versions less than 2.5.
+
+ * Fix uploaded ‘bdist_wininst’ packages being described as
+ suitable for “any” version by Python 2.5, even if a
+ ‘--target-version’ was specified.
+
+ * Fixed ‘.dll’ files on Cygwin not having executable permissions
+ when an egg is installed unzipped.
+
+
+File: setuptools.info, Node: 0 6c4, Next: 0 6c3, Prev: 0 6c5, Up: History<2>
+
+9.448 0.6c4
+===========
+
+ * Overhauled Windows script wrapping to support ‘bdist_wininst’
+ better. Scripts installed with ‘bdist_wininst’ will always
+ use ‘#!python.exe’ or ‘#!pythonw.exe’ as the executable name
+ (even when built on non-Windows platforms!), and the wrappers
+ will look for the executable in the script’s parent directory
+ (which should find the right version of Python).
+
+ * Fix ‘upload’ command not uploading files built by ‘bdist_rpm’
+ or ‘bdist_wininst’ under Python 2.3 and 2.4.
+
+ * Add support for “eggsecutable” headers: a ‘#!/bin/sh’ script
+ that is prepended to an ‘.egg’ file to allow it to be run as a
+ script on Unix-ish platforms. (This is mainly so that
+ setuptools itself can have a single-file installer on Unix,
+ without doing multiple downloads, dealing with firewalls,
+ etc.)
+
+ * Fix problem with empty revision numbers in Subversion 1.4
+ ‘entries’ files
+
+ * Use cross-platform relative paths in ‘easy-install.pth’ when
+ doing ‘develop’ and the source directory is a subdirectory of
+ the installation target directory.
+
+ * Fix a problem installing eggs with a system packaging tool if
+ the project contained an implicit namespace package; for
+ example if the ‘setup()’ listed a namespace package ‘foo.bar’
+ without explicitly listing ‘foo’ as a namespace package.
+
+ * Added support for HTTP “Basic” authentication using
+ ‘http://user:pass@host’ URLs. If a password-protected page
+ contains links to the same host (and protocol), those links
+ will inherit the credentials used to access the original page.
+
+ * Removed all special support for Sourceforge mirrors, as
+ Sourceforge’s mirror system now works well for non-browser
+ downloads.
+
+ * Fixed not recognizing ‘win32.exe’ installers that included a
+ custom bitmap.
+
+ * Fixed not allowing ‘os.open()’ of paths outside the sandbox,
+ even if they are opened read-only (e.g. reading
+ ‘/dev/urandom’ for random numbers, as is done by
+ ‘os.urandom()’ on some platforms).
+
+ * Fixed a problem with ‘.pth’ testing on Windows when
+ ‘sys.executable’ has a space in it (e.g., the user installed
+ Python to a ‘Program Files’ directory).
+
+
+File: setuptools.info, Node: 0 6c3, Next: 0 6c2, Prev: 0 6c4, Up: History<2>
+
+9.449 0.6c3
+===========
+
+ * Fixed breakages caused by Subversion 1.4’s new “working copy”
+ format
+
+ * You can once again use “python -m easy_install” with Python
+ 2.4 and above.
+
+ * Python 2.5 compatibility fixes added.
+
+
+File: setuptools.info, Node: 0 6c2, Next: 0 6c1, Prev: 0 6c3, Up: History<2>
+
+9.450 0.6c2
+===========
+
+ * The ‘ez_setup’ module displays the conflicting version of
+ setuptools (and its installation location) when a script
+ requests a version that’s not available.
+
+ * Running ‘setup.py develop’ on a setuptools-using project will
+ now install setuptools if needed, instead of only downloading
+ the egg.
+
+ * Windows script wrappers now support quoted arguments and
+ arguments containing spaces. (Patch contributed by Jim
+ Fulton.)
+
+ * The ‘ez_setup.py’ script now actually works when you put a
+ setuptools ‘.egg’ alongside it for bootstrapping an offline
+ machine.
+
+ * A writable installation directory on ‘sys.path’ is no longer
+ required to download and extract a source distribution using
+ ‘--editable’.
+
+ * Generated scripts now use ‘-x’ on the ‘#!’ line when
+ ‘sys.executable’ contains non-ASCII characters, to prevent
+ deprecation warnings about an unspecified encoding when the
+ script is run.
+
+
+File: setuptools.info, Node: 0 6c1, Next: 0 6b4, Prev: 0 6c2, Up: History<2>
+
+9.451 0.6c1
+===========
+
+ * Fixed ‘AttributeError’ when trying to download a
+ ‘setup_requires’ dependency when a distribution lacks a
+ ‘dependency_links’ setting.
+
+ * Made ‘zip-safe’ and ‘not-zip-safe’ flag files contain a single
+ byte, so as to play better with packaging tools that complain
+ about zero-length files.
+
+ * Made ‘setup.py develop’ respect the ‘--no-deps’ option, which
+ it previously was ignoring.
+
+ * Support ‘extra_path’ option to ‘setup()’ when ‘install’ is run
+ in backward-compatibility mode.
+
+ * Source distributions now always include a ‘setup.cfg’ file
+ that explicitly sets ‘egg_info’ options such that they produce
+ an identical version number to the source distribution’s
+ version number. (Previously, the default version number could
+ be different due to the use of ‘--tag-date’, or if the version
+ was overridden on the command line that built the source
+ distribution.)
+
+ * EasyInstall now includes setuptools version information in the
+ ‘User-Agent’ string sent to websites it visits.
+
+
+File: setuptools.info, Node: 0 6b4, Next: 0 6b3, Prev: 0 6c1, Up: History<2>
+
+9.452 0.6b4
+===========
+
+ * Fix ‘register’ not obeying name/version set by ‘egg_info’
+ command, if ‘egg_info’ wasn’t explicitly run first on the same
+ command line.
+
+ * Added ‘--no-date’ and ‘--no-svn-revision’ options to
+ ‘egg_info’ command, to allow suppressing tags configured in
+ ‘setup.cfg’.
+
+ * Fixed redundant warnings about missing ‘README’ file(s); it
+ should now appear only if you are actually a source
+ distribution.
+
+ * Fix creating Python wrappers for non-Python scripts
+
+ * Fix ‘ftp://’ directory listing URLs from causing a crash when
+ used in the “Home page” or “Download URL” slots on PyPI.
+
+ * Fix ‘sys.path_importer_cache’ not being updated when an
+ existing zipfile or directory is deleted/overwritten.
+
+ * Fix not recognizing HTML 404 pages from package indexes.
+
+ * Allow ‘file://’ URLs to be used as a package index. URLs that
+ refer to directories will use an internally-generated
+ directory listing if there is no ‘index.html’ file in the
+ directory.
+
+ * Allow external links in a package index to be specified using
+ ‘rel="homepage"’ or ‘rel="download"’, without needing the old
+ PyPI-specific visible markup.
+
+ * Suppressed warning message about possibly-misspelled project
+ name, if an egg or link for that project name has already been
+ seen.
+
+
+File: setuptools.info, Node: 0 6b3, Next: 0 6b2, Prev: 0 6b4, Up: History<2>
+
+9.453 0.6b3
+===========
+
+ * Fix ‘bdist_egg’ not including files in subdirectories of
+ ‘.egg-info’.
+
+ * Allow ‘.py’ files found by the ‘include_package_data’ option
+ to be automatically included. Remove duplicate data file
+ matches if both ‘include_package_data’ and ‘package_data’ are
+ used to refer to the same files.
+
+ * Fix local ‘--find-links’ eggs not being copied except with
+ ‘--always-copy’.
+
+ * Fix sometimes not detecting local packages installed outside
+ of “site” directories.
+
+ * Fix mysterious errors during initial ‘setuptools’ install,
+ caused by ‘ez_setup’ trying to run ‘easy_install’ twice, due
+ to a code fallthru after deleting the egg from which it’s
+ running.
+
+
+File: setuptools.info, Node: 0 6b2, Next: 0 6b1, Prev: 0 6b3, Up: History<2>
+
+9.454 0.6b2
+===========
+
+ * Don’t install or update a ‘site.py’ patch when installing to a
+ ‘PYTHONPATH’ directory with ‘--multi-version’, unless an
+ ‘easy-install.pth’ file is already in use there.
+
+ * Construct ‘.pth’ file paths in such a way that installing an
+ egg whose name begins with ‘import’ doesn’t cause a syntax
+ error.
+
+ * Fixed a bogus warning message that wasn’t updated since the
+ 0.5 versions.
+
+
+File: setuptools.info, Node: 0 6b1, Next: 0 6a11, Prev: 0 6b2, Up: History<2>
+
+9.455 0.6b1
+===========
+
+ * Strip ‘module’ from the end of compiled extension modules when
+ computing the name of a ‘.py’ loader/wrapper. (Python’s
+ import machinery ignores this suffix when searching for an
+ extension module.)
+
+ * Better ambiguity management: accept ‘#egg’ name/version even
+ if processing what appears to be a correctly-named distutils
+ file, and ignore ‘.egg’ files with no ‘-’, since valid Python
+ ‘.egg’ files always have a version number (but Scheme eggs
+ often don’t).
+
+ * Support ‘file://’ links to directories in ‘--find-links’, so
+ that easy_install can build packages from local source
+ checkouts.
+
+ * Added automatic retry for Sourceforge mirrors. The new
+ download process is to first just try dl.sourceforge.net, then
+ randomly select mirror IPs and remove ones that fail, until
+ something works. The removed IPs stay removed for the
+ remainder of the run.
+
+ * Ignore bdist_dumb distributions when looking at download URLs.
+
+
+File: setuptools.info, Node: 0 6a11, Next: 0 6a10, Prev: 0 6b1, Up: History<2>
+
+9.456 0.6a11
+============
+
+ * Added ‘test_loader’ keyword to support custom test loaders
+
+ * Added ‘setuptools.file_finders’ entry point group to allow
+ implementing revision control plugins.
+
+ * Added ‘--identity’ option to ‘upload’ command.
+
+ * Added ‘dependency_links’ to allow specifying URLs for
+ ‘--find-links’.
+
+ * Enhanced test loader to scan packages as well as modules, and
+ call ‘additional_tests()’ if present to get non-unittest
+ tests.
+
+ * Support namespace packages in conjunction with system
+ packagers, by omitting the installation of any ‘__init__.py’
+ files for namespace packages, and adding a special ‘.pth’ file
+ to create a working package in ‘sys.modules’.
+
+ * Made ‘--single-version-externally-managed’ automatic when
+ ‘--root’ is used, so that most system packagers won’t require
+ special support for setuptools.
+
+ * Fixed ‘setup_requires’, ‘tests_require’, etc. not using
+ ‘setup.cfg’ or other configuration files for their option
+ defaults when installing, and also made the install use
+ ‘--multi-version’ mode so that the project directory doesn’t
+ need to support .pth files.
+
+ * ‘MANIFEST.in’ is now forcibly closed when any errors occur
+ while reading it. Previously, the file could be left open and
+ the actual error would be masked by problems trying to remove
+ the open file on Windows systems.
+
+ * Process ‘dependency_links.txt’ if found in a distribution, by
+ adding the URLs to the list for scanning.
+
+ * Use relative paths in ‘.pth’ files when eggs are being
+ installed to the same directory as the ‘.pth’ file. This
+ maximizes portability of the target directory when building
+ applications that contain eggs.
+
+ * Added ‘easy_install-N.N’ script(s) for convenience when using
+ multiple Python versions.
+
+ * Added automatic handling of installation conflicts. Eggs are
+ now shifted to the front of sys.path, in an order consistent
+ with where they came from, making EasyInstall seamlessly
+ co-operate with system package managers.
+
+ The ‘--delete-conflicting’ and ‘--ignore-conflicts-at-my-risk’
+ options are now no longer necessary, and will generate
+ warnings at the end of a run if you use them.
+
+ * Don’t recursively traverse subdirectories given to
+ ‘--find-links’.
+
+
+File: setuptools.info, Node: 0 6a10, Next: 0 6a9, Prev: 0 6a11, Up: History<2>
+
+9.457 0.6a10
+============
+
+ * Fixed the ‘develop’ command ignoring ‘--find-links’.
+
+ * Added exhaustive testing of the install directory, including a
+ spawn test for ‘.pth’ file support, and directory
+ writability/existence checks. This should virtually eliminate
+ the need to set or configure ‘--site-dirs’.
+
+ * Added ‘--prefix’ option for more do-what-I-mean-ishness in the
+ absence of RTFM-ing. :)
+
+ * Enhanced ‘PYTHONPATH’ support so that you don’t have to put
+ any eggs on it manually to make it work. ‘--multi-version’ is
+ no longer a silent default; you must explicitly use it if
+ installing to a non-PYTHONPATH, non-“site” directory.
+
+ * Expand ‘$variables’ used in the ‘--site-dirs’,
+ ‘--build-directory’, ‘--install-dir’, and ‘--script-dir’
+ options, whether on the command line or in configuration
+ files.
+
+ * Improved SourceForge mirror processing to work faster and be
+ less affected by transient HTML changes made by SourceForge.
+
+ * PyPI searches now use the exact spelling of requirements
+ specified on the command line or in a project’s
+ ‘install_requires’. Previously, a normalized form of the name
+ was used, which could lead to unnecessary full-index searches
+ when a project’s name had an underscore (‘_’) in it.
+
+ * EasyInstall can now download bare ‘.py’ files and wrap them in
+ an egg, as long as you include an ‘#egg=name-version’ suffix
+ on the URL, or if the ‘.py’ file is listed as the “Download
+ URL” on the project’s PyPI page. This allows third parties to
+ “package” trivial Python modules just by linking to them (e.g.
+ from within their own PyPI page or download links page).
+
+ * The ‘--always-copy’ option now skips “system” and
+ “development” eggs since they can’t be reliably copied. Note
+ that this may cause EasyInstall to choose an older version of
+ a package than what you expected, or it may cause downloading
+ and installation of a fresh version of what’s already
+ installed.
+
+ * The ‘--find-links’ option previously scanned all supplied URLs
+ and directories as early as possible, but now only directories
+ and direct archive links are scanned immediately. URLs are
+ not retrieved unless a package search was already going to go
+ online due to a package not being available locally, or due to
+ the use of the ‘--update’ or ‘-U’ option.
+
+ * Fixed the annoying ‘--help-commands’ wart.
+
+
+File: setuptools.info, Node: 0 6a9, Next: 0 6a8, Prev: 0 6a10, Up: History<2>
+
+9.458 0.6a9
+===========
+
+ * The ‘sdist’ command no longer uses the traditional ‘MANIFEST’
+ file to create source distributions. ‘MANIFEST.in’ is still
+ read and processed, as are the standard defaults and pruning.
+ But the manifest is built inside the project’s ‘.egg-info’
+ directory as ‘SOURCES.txt’, and it is rebuilt every time the
+ ‘egg_info’ command is run.
+
+ * Added the ‘include_package_data’ keyword to ‘setup()’,
+ allowing you to automatically include any package data listed
+ in revision control or ‘MANIFEST.in’
+
+ * Added the ‘exclude_package_data’ keyword to ‘setup()’,
+ allowing you to trim back files included via the
+ ‘package_data’ and ‘include_package_data’ options.
+
+ * Fixed ‘--tag-svn-revision’ not working when run from a source
+ distribution.
+
+ * Added warning for namespace packages with missing
+ ‘declare_namespace()’
+
+ * Added ‘tests_require’ keyword to ‘setup()’, so that e.g.
+ packages requiring ‘nose’ to run unit tests can make this
+ dependency optional unless the ‘test’ command is run.
+
+ * Made all commands that use ‘easy_install’ respect its
+ configuration options, as this was causing some problems with
+ ‘setup.py install’.
+
+ * Added an ‘unpack_directory()’ driver to
+ ‘setuptools.archive_util’, so that you can process a directory
+ tree through a processing filter as if it were a zipfile or
+ tarfile.
+
+ * Added an internal ‘install_egg_info’ command to use as part of
+ old-style ‘install’ operations, that installs an ‘.egg-info’
+ directory with the package.
+
+ * Added a ‘--single-version-externally-managed’ option to the
+ ‘install’ command so that you can more easily wrap a “flat”
+ egg in a system package.
+
+ * Enhanced ‘bdist_rpm’ so that it installs single-version eggs
+ that don’t rely on a ‘.pth’ file. The ‘--no-egg’ option has
+ been removed, since all RPMs are now built in a more
+ backwards-compatible format.
+
+ * Support full roundtrip translation of eggs to and from
+ ‘bdist_wininst’ format. Running ‘bdist_wininst’ on a
+ setuptools-based package wraps the egg in an .exe that will
+ safely install it as an egg (i.e., with metadata and
+ entry-point wrapper scripts), and ‘easy_install’ can turn the
+ .exe back into an ‘.egg’ file or directory and install it as
+ such.
+
+ * Fixed ‘.pth’ file processing picking up nested eggs (i.e.
+ ones inside “baskets”) when they weren’t explicitly listed in
+ the ‘.pth’ file.
+
+ * If more than one URL appears to describe the exact same
+ distribution, prefer the shortest one. This helps to avoid
+ “table of contents” CGI URLs like the ones on effbot.org.
+
+ * Quote arguments to python.exe (including python’s path) to
+ avoid problems when Python (or a script) is installed in a
+ directory whose name contains spaces on Windows.
+
+ * Support full roundtrip translation of eggs to and from
+ ‘bdist_wininst’ format. Running ‘bdist_wininst’ on a
+ setuptools-based package wraps the egg in an .exe that will
+ safely install it as an egg (i.e., with metadata and
+ entry-point wrapper scripts), and ‘easy_install’ can turn the
+ .exe back into an ‘.egg’ file or directory and install it as
+ such.
+
+
+File: setuptools.info, Node: 0 6a8, Next: 0 6a7, Prev: 0 6a9, Up: History<2>
+
+9.459 0.6a8
+===========
+
+ * Fixed some problems building extensions when Pyrex was
+ installed, especially with Python 2.4 and/or packages using
+ SWIG.
+
+ * Made ‘develop’ command accept all the same options as
+ ‘easy_install’, and use the ‘easy_install’ command’s
+ configuration settings as defaults.
+
+ * Made ‘egg_info --tag-svn-revision’ fall back to extracting the
+ revision number from ‘PKG-INFO’ in case it is being run on a
+ source distribution of a snapshot taken from a
+ Subversion-based project.
+
+ * Automatically detect ‘.dll’, ‘.so’ and ‘.dylib’ files that are
+ being installed as data, adding them to ‘native_libs.txt’
+ automatically.
+
+ * Fixed some problems with fresh checkouts of projects that
+ don’t include ‘.egg-info/PKG-INFO’ under revision control and
+ put the project’s source code directly in the project
+ directory. If such a package had any requirements that get
+ processed before the ‘egg_info’ command can be run, the setup
+ scripts would fail with a “Missing ‘Version:’ header and/or
+ PKG-INFO file” error, because the egg runtime interpreted the
+ unbuilt metadata in a directory on ‘sys.path’ (i.e. the
+ current directory) as being a corrupted egg. Setuptools now
+ monkeypatches the distribution metadata cache to pretend that
+ the egg has valid version information, until it has a chance
+ to make it actually be so (via the ‘egg_info’ command).
+
+ * Update for changed SourceForge mirror format
+
+ * Fixed not installing dependencies for some packages fetched
+ via Subversion
+
+ * Fixed dependency installation with ‘--always-copy’ not using
+ the same dependency resolution procedure as other operations.
+
+ * Fixed not fully removing temporary directories on Windows, if
+ a Subversion checkout left read-only files behind
+
+ * Fixed some problems building extensions when Pyrex was
+ installed, especially with Python 2.4 and/or packages using
+ SWIG.
+
+
+File: setuptools.info, Node: 0 6a7, Next: 0 6a6, Prev: 0 6a8, Up: History<2>
+
+9.460 0.6a7
+===========
+
+ * Fixed not being able to install Windows script wrappers using
+ Python 2.3
+
+
+File: setuptools.info, Node: 0 6a6, Next: 0 6a5, Prev: 0 6a7, Up: History<2>
+
+9.461 0.6a6
+===========
+
+ * Added support for “traditional” PYTHONPATH-based non-root
+ installation, and also the convenient ‘virtual-python.py’
+ script, based on a contribution by Ian Bicking. The
+ setuptools egg now contains a hacked ‘site’ module that makes
+ the PYTHONPATH-based approach work with .pth files, so that
+ you can get the full EasyInstall feature set on such
+ installations.
+
+ * Added ‘--no-deps’ and ‘--allow-hosts’ options.
+
+ * Improved Windows ‘.exe’ script wrappers so that the script can
+ have the same name as a module without confusing Python.
+
+ * Changed dependency processing so that it’s breadth-first,
+ allowing a depender’s preferences to override those of a
+ dependee, to prevent conflicts when a lower version is
+ acceptable to the dependee, but not the depender. Also,
+ ensure that currently installed/selected packages aren’t given
+ precedence over ones desired by a package being installed,
+ which could cause conflict errors.
+
+
+File: setuptools.info, Node: 0 6a5, Next: 0 6a3, Prev: 0 6a6, Up: History<2>
+
+9.462 0.6a5
+===========
+
+ * Fixed missing gui/cli .exe files in distribution. Fixed bugs
+ in tests.
+
+
+File: setuptools.info, Node: 0 6a3, Next: 0 6a2, Prev: 0 6a5, Up: History<2>
+
+9.463 0.6a3
+===========
+
+ * Added ‘gui_scripts’ entry point group to allow installing GUI
+ scripts on Windows and other platforms. (The special handling
+ is only for Windows; other platforms are treated the same as
+ for ‘console_scripts’.)
+
+ * Improved error message when trying to use old ways of running
+ ‘easy_install’. Removed the ability to run via ‘python -m’ or
+ by running ‘easy_install.py’; ‘easy_install’ is the command to
+ run on all supported platforms.
+
+ * Improved wrapper script generation and runtime initialization
+ so that a VersionConflict doesn’t occur if you later install a
+ competing version of a needed package as the default version
+ of that package.
+
+ * Fixed a problem parsing version numbers in ‘#egg=’ links.
+
+
+File: setuptools.info, Node: 0 6a2, Next: 0 6a1, Prev: 0 6a3, Up: History<2>
+
+9.464 0.6a2
+===========
+
+ * Added ‘console_scripts’ entry point group to allow installing
+ scripts without the need to create separate script files. On
+ Windows, console scripts get an ‘.exe’ wrapper so you can just
+ type their name. On other platforms, the scripts are written
+ without a file extension.
+
+ * EasyInstall can now install “console_scripts” defined by
+ packages that use ‘setuptools’ and define appropriate entry
+ points. On Windows, console scripts get an ‘.exe’ wrapper so
+ you can just type their name. On other platforms, the scripts
+ are installed without a file extension.
+
+ * Using ‘python -m easy_install’ or running ‘easy_install.py’ is
+ now DEPRECATED, since an ‘easy_install’ wrapper is now
+ available on all platforms.
+
+
+File: setuptools.info, Node: 0 6a1, Next: 0 5a12, Prev: 0 6a2, Up: History<2>
+
+9.465 0.6a1
+===========
+
+ * Added support for building “old-style” RPMs that don’t install
+ an egg for the target package, using a ‘--no-egg’ option.
+
+ * The ‘build_ext’ command now works better when using the
+ ‘--inplace’ option and multiple Python versions. It now makes
+ sure that all extensions match the current Python version,
+ even if newer copies were built for a different Python
+ version.
+
+ * The ‘upload’ command no longer attaches an extra ‘.zip’ when
+ uploading eggs, as PyPI now supports egg uploads without
+ trickery.
+
+ * The ‘ez_setup’ script/module now displays a warning before
+ downloading the setuptools egg, and attempts to check the
+ downloaded egg against an internal MD5 checksum table.
+
+ * Fixed the ‘--tag-svn-revision’ option of ‘egg_info’ not
+ finding the latest revision number; it was using the revision
+ number of the directory containing ‘setup.py’, not the highest
+ revision number in the project.
+
+ * Added ‘eager_resources’ setup argument
+
+ * The ‘sdist’ command now recognizes Subversion “deleted file”
+ entries and does not include them in source distributions.
+
+ * ‘setuptools’ now embeds itself more thoroughly into the
+ distutils, so that other distutils extensions (e.g. py2exe,
+ py2app) will subclass setuptools’ versions of things, rather
+ than the native distutils ones.
+
+ * Added ‘entry_points’ and ‘setup_requires’ arguments to
+ ‘setup()’; ‘setup_requires’ allows you to automatically find
+ and download packages that are needed in order to `build' your
+ project (as opposed to running it).
+
+ * ‘setuptools’ now finds its commands, ‘setup()’ argument
+ validators, and metadata writers using entry points, so that
+ they can be extended by third-party packages. See Creating
+ distutils Extensions(1) for more details.
+
+ * The vestigial ‘depends’ command has been removed. It was
+ never finished or documented, and never would have worked
+ without EasyInstall - which it pre-dated and was never
+ compatible with.
+
+ * EasyInstall now does MD5 validation of downloads from PyPI, or
+ from any link that has an “#md5=…” trailer with a 32-digit
+ lowercase hex md5 digest.
+
+ * EasyInstall now handles symlinks in target directories by
+ removing the link, rather than attempting to overwrite the
+ link’s destination. This makes it easier to set up an
+ alternate Python “home” directory (as described in the
+ Non-Root Installation section of the docs).
+
+ * Added support for handling MacOS platform information in
+ ‘.egg’ filenames, based on a contribution by Kevin Dangoor.
+ You may wish to delete and reinstall any eggs whose filename
+ includes “darwin” and “Power_Macintosh”, because the format
+ for this platform information has changed so that minor OS X
+ upgrades (such as 10.4.1 to 10.4.2) do not cause eggs built
+ with a previous OS version to become obsolete.
+
+ * easy_install’s dependency processing algorithms have changed.
+ When using ‘--always-copy’, it now ensures that dependencies
+ are copied too. When not using ‘--always-copy’, it tries to
+ use a single resolution loop, rather than recursing.
+
+ * Fixed installing extra ‘.pyc’ or ‘.pyo’ files for scripts with
+ ‘.py’ extensions.
+
+ * Added ‘--site-dirs’ option to allow adding custom “site”
+ directories. Made ‘easy-install.pth’ work in
+ platform-specific alternate site directories (e.g.
+ ‘~/Library/Python/2.x/site-packages’ on Mac OS X).
+
+ * If you manually delete the current version of a package, the
+ next run of EasyInstall against the target directory will now
+ remove the stray entry from the ‘easy-install.pth’ file.
+
+ * EasyInstall now recognizes URLs with a ‘#egg=project_name’
+ fragment ID as pointing to the named project’s source
+ checkout. Such URLs have a lower match precedence than any
+ other kind of distribution, so they’ll only be used if they
+ have a higher version number than any other available
+ distribution, or if you use the ‘--editable’ option. The
+ ‘#egg’ fragment can contain a version if it’s formatted as
+ ‘#egg=proj-ver’, where ‘proj’ is the project name, and ‘ver’
+ is the version number. You `must' use the format for these
+ values that the ‘bdist_egg’ command uses; i.e., all
+ non-alphanumeric runs must be condensed to single underscore
+ characters.
+
+ * Added the ‘--editable’ option; see Editing and Viewing Source
+ Packages in the docs. Also, slightly changed the behavior of
+ the ‘--build-directory’ option.
+
+ * Fixed the setup script sandbox facility not recognizing
+ certain paths as valid on case-insensitive platforms.
+
+ ---------- Footnotes ----------
+
+ (1)
+https://setuptools.readthedocs.io/en/latest/setuptools.html#creating-distutils-extensions
+
+
+File: setuptools.info, Node: 0 5a12, Next: 0 5a11, Prev: 0 6a1, Up: History<2>
+
+9.466 0.5a12
+============
+
+ * The zip-safety scanner now checks for modules that might be
+ used with ‘python -m’, and marks them as unsafe for zipping,
+ since Python 2.4 can’t handle ‘-m’ on zipped modules.
+
+ * Fix ‘python -m easy_install’ not working due to setuptools
+ being installed as a zipfile. Update safety scanner to check
+ for modules that might be used as ‘python -m’ scripts.
+
+ * Misc. fixes for win32.exe support, including changes to
+ support Python 2.4’s changed ‘bdist_wininst’ format.
+
+
+File: setuptools.info, Node: 0 5a11, Next: 0 5a10, Prev: 0 5a12, Up: History<2>
+
+9.467 0.5a11
+============
+
+ * Fix breakage of the “develop” command that was caused by the
+ addition of ‘--always-unzip’ to the ‘easy_install’ command.
+
+
+File: setuptools.info, Node: 0 5a10, Next: 0 5a9, Prev: 0 5a11, Up: History<2>
+
+9.468 0.5a10
+============
+
+ * Put the ‘easy_install’ module back in as a module, as it’s
+ needed for ‘python -m’ to run it!
+
+ * Allow ‘--find-links/-f’ to accept local directories or
+ filenames as well as URLs.
+
+
+File: setuptools.info, Node: 0 5a9, Next: 0 5a8, Prev: 0 5a10, Up: History<2>
+
+9.469 0.5a9
+===========
+
+ * Include ‘svn:externals’ directories in source distributions as
+ well as normal subversion-controlled files and directories.
+
+ * Added ‘exclude=patternlist’ option to
+ ‘setuptools.find_packages()’
+
+ * Changed –tag-svn-revision to include an “r” in front of the
+ revision number for better readability.
+
+ * Added ability to build eggs without including source files
+ (except for any scripts, of course), using the
+ ‘--exclude-source-files’ option to ‘bdist_egg’.
+
+ * ‘setup.py install’ now automatically detects when an
+ “unmanaged” package or module is going to be on ‘sys.path’
+ ahead of a package being installed, thereby preventing the
+ newer version from being imported. If this occurs, a warning
+ message is output to ‘sys.stderr’, but installation proceeds
+ anyway. The warning message informs the user what files or
+ directories need deleting, and advises them they can also use
+ EasyInstall (with the ‘--delete-conflicting’ option) to do it
+ automatically.
+
+ * The ‘egg_info’ command now adds a ‘top_level.txt’ file to the
+ metadata directory that lists all top-level modules and
+ packages in the distribution. This is used by the
+ ‘easy_install’ command to find possibly-conflicting
+ “unmanaged” packages when installing the distribution.
+
+ * Added ‘zip_safe’ and ‘namespace_packages’ arguments to
+ ‘setup()’. Added package analysis to determine zip-safety if
+ the ‘zip_safe’ flag is not given, and advise the author
+ regarding what code might need changing.
+
+ * Fixed the swapped ‘-d’ and ‘-b’ options of ‘bdist_egg’.
+
+ * EasyInstall now automatically detects when an “unmanaged”
+ package or module is going to be on ‘sys.path’ ahead of a
+ package you’re installing, thereby preventing the newer
+ version from being imported. By default, it will abort
+ installation to alert you of the problem, but there are also
+ new options (‘--delete-conflicting’ and
+ ‘--ignore-conflicts-at-my-risk’) available to change the
+ default behavior. (Note: this new feature doesn’t take effect
+ for egg files that were built with older ‘setuptools’
+ versions, because they lack the new metadata file required to
+ implement it.)
+
+ * The ‘easy_install’ distutils command now uses ‘DistutilsError’
+ as its base error type for errors that should just issue a
+ message to stderr and exit the program without a traceback.
+
+ * EasyInstall can now be given a path to a directory containing
+ a setup script, and it will attempt to build and install the
+ package there.
+
+ * EasyInstall now performs a safety analysis on module contents
+ to determine whether a package is likely to run in zipped
+ form, and displays information about what modules may be doing
+ introspection that would break when running as a zipfile.
+
+ * Added the ‘--always-unzip/-Z’ option, to force unzipping of
+ packages that would ordinarily be considered safe to unzip,
+ and changed the meaning of ‘--zip-ok/-z’ to “always leave
+ everything zipped”.
+
+
+File: setuptools.info, Node: 0 5a8, Next: 0 5a7, Prev: 0 5a9, Up: History<2>
+
+9.470 0.5a8
+===========
+
+ * The “egg_info” command now always sets the distribution
+ metadata to “safe” forms of the distribution name and version,
+ so that distribution files will be generated with parseable
+ names (i.e., ones that don’t include ‘-‘ in the name or
+ version). Also, this means that if you use the various
+ ‘--tag’ options of “egg_info”, any distributions generated
+ will use the tags in the version, not just egg distributions.
+
+ * Added support for defining command aliases in distutils
+ configuration files, under the “[aliases]” section. To
+ prevent recursion and to allow aliases to call the command of
+ the same name, a given alias can be expanded only once per
+ command-line invocation. You can define new aliases with the
+ “alias” command, either for the local, global, or per-user
+ configuration.
+
+ * Added “rotate” command to delete old distribution files, given
+ a set of patterns to match and the number of files to keep.
+ (Keeps the most recently-modified distribution files matching
+ each pattern.)
+
+ * Added “saveopts” command that saves all command-line options
+ for the current invocation to the local, global, or per-user
+ configuration file. Useful for setting defaults without
+ having to hand-edit a configuration file.
+
+ * Added a “setopt” command that sets a single option in a
+ specified distutils configuration file.
+
+ * There is now a separate documentation page for setuptools;
+ revision history that’s not specific to EasyInstall has been
+ moved to that page.
+
+
+File: setuptools.info, Node: 0 5a7, Next: 0 5a6, Prev: 0 5a8, Up: History<2>
+
+9.471 0.5a7
+===========
+
+ * Added “upload” support for egg and source distributions,
+ including a bug fix for “upload” and a temporary workaround
+ for lack of .egg support in PyPI.
+
+
+File: setuptools.info, Node: 0 5a6, Next: 0 5a5, Prev: 0 5a7, Up: History<2>
+
+9.472 0.5a6
+===========
+
+ * Beefed up the “sdist” command so that if you don’t have a
+ MANIFEST.in, it will include all files under revision control
+ (CVS or Subversion) in the current directory, and it will
+ regenerate the list every time you create a source
+ distribution, not just when you tell it to. This should make
+ the default “do what you mean” more often than the distutils’
+ default behavior did, while still retaining the old behavior
+ in the presence of MANIFEST.in.
+
+ * Fixed the “develop” command always updating .pth files, even
+ if you specified ‘-n’ or ‘--dry-run’.
+
+ * Slightly changed the format of the generated version when you
+ use ‘--tag-build’ on the “egg_info” command, so that you can
+ make tagged revisions compare `lower' than the version
+ specified in setup.py (e.g. by using ‘--tag-build=dev’).
+
+
+File: setuptools.info, Node: 0 5a5, Next: 0 5a4, Prev: 0 5a6, Up: History<2>
+
+9.473 0.5a5
+===========
+
+ * Added ‘develop’ command to ‘setuptools’-based packages. This
+ command installs an ‘.egg-link’ pointing to the package’s
+ source directory, and script wrappers that ‘execfile()’ the
+ source versions of the package’s scripts. This lets you put
+ your development checkout(s) on sys.path without having to
+ actually install them. (To uninstall the link, use use
+ ‘setup.py develop --uninstall’.)
+
+ * Added ‘egg_info’ command to ‘setuptools’-based packages. This
+ command just creates or updates the “projectname.egg-info”
+ directory, without building an egg. (It’s used by the
+ ‘bdist_egg’, ‘test’, and ‘develop’ commands.)
+
+ * Enhanced the ‘test’ command so that it doesn’t install the
+ package, but instead builds any C extensions in-place, updates
+ the ‘.egg-info’ metadata, adds the source directory to
+ ‘sys.path’, and runs the tests directly on the source. This
+ avoids an “unmanaged” installation of the package to
+ ‘site-packages’ or elsewhere.
+
+ * Made ‘easy_install’ a standard ‘setuptools’ command, moving it
+ from the ‘easy_install’ module to
+ ‘setuptools.command.easy_install’. Note that if you were
+ importing or extending it, you must now change your imports
+ accordingly. ‘easy_install.py’ is still installed as a
+ script, but not as a module.
+
+
+File: setuptools.info, Node: 0 5a4, Next: 0 5a3, Prev: 0 5a5, Up: History<2>
+
+9.474 0.5a4
+===========
+
+ * Setup scripts using setuptools can now list their dependencies
+ directly in the setup.py file, without having to manually
+ create a ‘depends.txt’ file. The ‘install_requires’ and
+ ‘extras_require’ arguments to ‘setup()’ are used to create a
+ dependencies file automatically. If you are manually creating
+ ‘depends.txt’ right now, please switch to using these setup
+ arguments as soon as practical, because ‘depends.txt’ support
+ will be removed in the 0.6 release cycle. For documentation
+ on the new arguments, see the ‘setuptools.dist.Distribution’
+ class.
+
+ * Setup scripts using setuptools now always install using
+ ‘easy_install’ internally, for ease of uninstallation and
+ upgrading.
+
+ * Added ‘--always-copy/-a’ option to always copy needed packages
+ to the installation directory, even if they’re already present
+ elsewhere on sys.path. (In previous versions, this was the
+ default behavior, but now you must request it.)
+
+ * Added ‘--upgrade/-U’ option to force checking PyPI for latest
+ available version(s) of all packages requested by name and
+ version, even if a matching version is available locally.
+
+ * Added automatic installation of dependencies declared by a
+ distribution being installed. These dependencies must be
+ listed in the distribution’s ‘EGG-INFO’ directory, so the
+ distribution has to have declared its dependencies by using
+ setuptools. If a package has requirements it didn’t declare,
+ you’ll still have to deal with them yourself. (E.g., by
+ asking EasyInstall to find and install them.)
+
+ * Added the ‘--record’ option to ‘easy_install’ for the benefit
+ of tools that run ‘setup.py install --record=filename’ on
+ behalf of another packaging system.)
+
+
+File: setuptools.info, Node: 0 5a3, Next: 0 5a2, Prev: 0 5a4, Up: History<2>
+
+9.475 0.5a3
+===========
+
+ * Fixed not setting script permissions to allow execution.
+
+ * Improved sandboxing so that setup scripts that want a
+ temporary directory (e.g. pychecker) can still run in the
+ sandbox.
+
+
+File: setuptools.info, Node: 0 5a2, Next: 0 5a1, Prev: 0 5a3, Up: History<2>
+
+9.476 0.5a2
+===========
+
+ * Fix stupid stupid refactoring-at-the-last-minute typos. :(
+
+
+File: setuptools.info, Node: 0 5a1, Next: 0 4a4, Prev: 0 5a2, Up: History<2>
+
+9.477 0.5a1
+===========
+
+ * Added support for “self-installation” bootstrapping. Packages
+ can now include ‘ez_setup.py’ in their source distribution,
+ and add the following to their ‘setup.py’, in order to
+ automatically bootstrap installation of setuptools as part of
+ their setup process:
+
+ from ez_setup import use_setuptools
+ use_setuptools()
+
+ from setuptools import setup
+ # etc...
+
+ * Added support for converting ‘.win32.exe’ installers to eggs
+ on the fly. EasyInstall will now recognize such files by name
+ and install them.
+
+ * Fixed a problem with picking the “best” version to install
+ (versions were being sorted as strings, rather than as parsed
+ values)
+
+
+File: setuptools.info, Node: 0 4a4, Next: 0 4a3, Prev: 0 5a1, Up: History<2>
+
+9.478 0.4a4
+===========
+
+ * Added support for the distutils “verbose/quiet” and “dry-run”
+ options, as well as the “optimize” flag.
+
+ * Support downloading packages that were uploaded to PyPI (by
+ scanning all links on package pages, not just the
+ homepage/download links).
+
+
+File: setuptools.info, Node: 0 4a3, Next: 0 4a2, Prev: 0 4a4, Up: History<2>
+
+9.479 0.4a3
+===========
+
+ * Add progress messages to the search/download process so that
+ you can tell what URLs it’s reading to find download links.
+ (Hopefully, this will help people report out-of-date and
+ broken links to package authors, and to tell when they’ve
+ asked for a package that doesn’t exist.)
+
+
+File: setuptools.info, Node: 0 4a2, Next: 0 4a1, Prev: 0 4a3, Up: History<2>
+
+9.480 0.4a2
+===========
+
+ * Added ‘ez_setup.py’ installer/bootstrap script to make initial
+ setuptools installation easier, and to allow distributions
+ using setuptools to avoid having to include setuptools in
+ their source distribution.
+
+ * All downloads are now managed by the ‘PackageIndex’ class
+ (which is now subclassable and replaceable), so that embedders
+ can more easily override download logic, give download
+ progress reports, etc. The class has also been moved to the
+ new ‘setuptools.package_index’ module.
+
+ * The ‘Installer’ class no longer handles downloading, manages a
+ temporary directory, or tracks the ‘zip_ok’ option.
+ Downloading is now handled by ‘PackageIndex’, and ‘Installer’
+ has become an ‘easy_install’ command class based on
+ ‘setuptools.Command’.
+
+ * There is a new ‘setuptools.sandbox.run_setup()’ API to invoke
+ a setup script in a directory sandbox, and a new
+ ‘setuptools.archive_util’ module with an ‘unpack_archive()’
+ API. These were split out of EasyInstall to allow reuse by
+ other tools and applications.
+
+ * ‘setuptools.Command’ now supports reinitializing commands
+ using keyword arguments to set/reset options. Also, ‘Command’
+ subclasses can now set their ‘command_consumes_arguments’
+ attribute to ‘True’ in order to receive an ‘args’ option
+ containing the rest of the command line.
+
+ * Added support for installing scripts
+
+ * Added support for setting options via distutils configuration
+ files, and using distutils’ default options as a basis for
+ EasyInstall’s defaults.
+
+ * Renamed ‘--scan-url/-s’ to ‘--find-links/-f’ to free up ‘-s’
+ for the script installation directory option.
+
+ * Use ‘urllib2’ instead of ‘urllib’, to allow use of ‘https:’
+ URLs if Python includes SSL support.
+
+
+File: setuptools.info, Node: 0 4a1, Next: 0 3a4, Prev: 0 4a2, Up: History<2>
+
+9.481 0.4a1
+===========
+
+ * Added ‘--scan-url’ and ‘--index-url’ options, to scan download
+ pages and search PyPI for needed packages.
+
+
+File: setuptools.info, Node: 0 3a4, Next: 0 3a3, Prev: 0 4a1, Up: History<2>
+
+9.482 0.3a4
+===========
+
+ * Restrict ‘--build-directory=DIR/-b DIR’ option to only be used
+ with single URL installs, to avoid running the wrong setup.py.
+
+
+File: setuptools.info, Node: 0 3a3, Next: 0 3a2, Prev: 0 3a4, Up: History<2>
+
+9.483 0.3a3
+===========
+
+ * Added ‘--build-directory=DIR/-b DIR’ option.
+
+ * Added “installation report” that explains how to use
+ ‘require()’ when doing a multiversion install or alternate
+ installation directory.
+
+ * Added SourceForge mirror auto-select (Contributed by Ian
+ Bicking)
+
+ * Added “sandboxing” that stops a setup script from running if
+ it attempts to write to the filesystem outside of the build
+ area
+
+ * Added more workarounds for packages with quirky ‘install_data’
+ hacks
+
+
+File: setuptools.info, Node: 0 3a2, Next: 0 3a1, Prev: 0 3a3, Up: History<2>
+
+9.484 0.3a2
+===========
+
+ * Added new options to ‘bdist_egg’ to allow tagging the egg’s
+ version number with a subversion revision number, the current
+ date, or an explicit tag value. Run ‘setup.py bdist_egg
+ --help’ to get more information.
+
+ * Added subversion download support for ‘svn:’ and ‘svn+’ URLs,
+ as well as automatic recognition of HTTP subversion URLs
+ (Contributed by Ian Bicking)
+
+ * Misc. bug fixes
+
+
+File: setuptools.info, Node: 0 3a1, Prev: 0 3a2, Up: History<2>
+
+9.485 0.3a1
+===========
+
+ * Initial release.
+
+
+File: setuptools.info, Node: Credits, Next: Index, Prev: History<2>, Up: Top
+
+10 Credits
+**********
+
+ * The original design for the ‘.egg’ format and the ‘pkg_resources’
+ API was co-created by Phillip Eby and Bob Ippolito. Bob also
+ implemented the first version of ‘pkg_resources’, and supplied the
+ macOS operating system version compatibility algorithm.
+
+ * Ian Bicking implemented many early “creature comfort” features of
+ easy_install, including support for downloading via Sourceforge and
+ Subversion repositories. Ian’s comments on the Web-SIG about WSGI
+ application deployment also inspired the concept of “entry points”
+ in eggs, and he has given talks at PyCon and elsewhere to inform
+ and educate the community about eggs and setuptools.
+
+ * Jim Fulton contributed time and effort to build automated tests of
+ various aspects of ‘easy_install’, and supplied the doctests for
+ the command-line ‘.exe’ wrappers on Windows.
+
+ * Phillip J. Eby is the seminal author of setuptools, and first
+ proposed the idea of an importable binary distribution format for
+ Python application plug-ins.
+
+ * Significant parts of the implementation of setuptools were funded
+ by the Open Source Applications Foundation, to provide a plug-in
+ infrastructure for the Chandler PIM application. In addition, many
+ OSAF staffers (such as Mike “Code Bear” Taylor) contributed their
+ time and stress as guinea pigs for the use of eggs and setuptools,
+ even before eggs were “cool”. (Thanks, guys!)
+
+ * Tarek Ziadé is the principal author of the Distribute fork, which
+ re-invigorated the community on the project, encouraged renewed
+ innovation, and addressed many defects.
+
+ * Jason R. Coombs performed the merge with Distribute, maintaining
+ the project for several years in coordination with the Python
+ Packaging Authority (PyPA).
+
+
+File: setuptools.info, Node: Index, Prev: Credits, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* Python Enhancement Proposals; PEP 370: Command-Line Options.
+ (line 100)
+* Python Enhancement Proposals; PEP 517: Configuring setup using setup cfg files.
+ (line 9)
+* Python Enhancement Proposals; PEP 517 <1>: setup cfg-only projects.
+ (line 8)
+* Python Enhancement Proposals; PEP 517 <2>: setup cfg-only projects.
+ (line 12)
+* Python Enhancement Proposals; PEP 517 <3>: setup cfg-only projects.
+ (line 13)
+* Python Enhancement Proposals; PEP 517 <4>: setup cfg-only projects.
+ (line 18)
+* Python Enhancement Proposals; PEP 517 <5>: setup cfg-only projects.
+ (line 23)
+* Python Enhancement Proposals; PEP 517 <6>: setup cfg-only projects.
+ (line 33)
+* Python Enhancement Proposals; PEP 517 <7>: setup cfg-only projects.
+ (line 36)
+* Python Enhancement Proposals; PEP 517#build-requirements: Python packaging at a glance.
+ (line 13)
+* Python Enhancement Proposals; PEP 518: setup cfg-only projects.
+ (line 18)
+
+
+
+Tag Table:
+Node: Top367
+Ref: index doc615
+Ref: 0615
+Node: Building and Distributing Packages with Setuptools22415
+Ref: userguide/index doc22550
+Ref: 122550
+Ref: userguide/index building-and-distributing-packages-with-setuptools22550
+Ref: 222550
+Ref: userguide/index documentation22550
+Ref: 322550
+Node: Transition to PEP51723037
+Ref: userguide/index transition-to-pep51723148
+Ref: 423148
+Node: setuptools Quickstart24269
+Ref: userguide/quickstart doc24399
+Ref: 624399
+Ref: userguide/quickstart setuptools-quickstart24399
+Ref: 724399
+Node: Installation24844
+Ref: userguide/quickstart installation24955
+Ref: 824955
+Node: Python packaging at a glance25088
+Ref: userguide/quickstart python-packaging-at-a-glance25217
+Ref: 925217
+Ref: Python packaging at a glance-Footnote-125977
+Ref: Python packaging at a glance-Footnote-226045
+Node: Basic Use26080
+Ref: userguide/quickstart basic-use26224
+Ref: a26224
+Ref: Basic Use-Footnote-127806
+Node: Automatic package discovery27847
+Ref: userguide/quickstart automatic-package-discovery28005
+Ref: b28005
+Node: Entry points and automatic script creation29156
+Ref: userguide/quickstart entry-points-and-automatic-script-creation29326
+Ref: d29326
+Node: Dependency management30140
+Ref: userguide/quickstart dependency-management30303
+Ref: f30303
+Node: Including Data Files31432
+Ref: userguide/quickstart id131569
+Ref: 1131569
+Ref: userguide/quickstart including-data-files31569
+Ref: 1231569
+Node: Development mode32179
+Ref: userguide/quickstart development-mode32325
+Ref: 1432325
+Node: Uploading your package to PyPI32997
+Ref: userguide/quickstart uploading-your-package-to-pypi33163
+Ref: 1533163
+Ref: Uploading your package to PyPI-Footnote-133482
+Node: Transitioning from setup py to setup cfg33522
+Ref: userguide/quickstart transitioning-from-setup-py-to-setup-cfg33701
+Ref: 1633701
+Node: Resources on Python packaging34195
+Ref: userguide/quickstart resources-on-python-packaging34335
+Ref: 1734335
+Node: Package Discovery and Namespace Package34512
+Ref: userguide/package_discovery doc34663
+Ref: 1834663
+Ref: userguide/package_discovery package-discovery34663
+Ref: c34663
+Ref: userguide/package_discovery package-discovery-and-namespace-package34663
+Ref: 1934663
+Node: Using find or find_packages36066
+Ref: userguide/package_discovery using-find-or-find-packages36229
+Ref: 1b36229
+Node: Using find_namespace or find_namespace_packages37302
+Ref: userguide/package_discovery namespace-packages37499
+Ref: 1c37499
+Ref: userguide/package_discovery using-find-namespace-or-find-namespace-packages37499
+Ref: 1d37499
+Node: Legacy Namespace Packages39655
+Ref: userguide/package_discovery legacy-namespace-packages39816
+Ref: 1e39816
+Ref: Legacy Namespace Packages-Footnote-140601
+Ref: Legacy Namespace Packages-Footnote-240651
+Node: pkg_resource style namespace package40725
+Ref: userguide/package_discovery pkg-resource-style-namespace-package40867
+Ref: 1f40867
+Node: pkgutil style namespace package41764
+Ref: userguide/package_discovery pkgutil-style-namespace-package41906
+Ref: 2041906
+Node: Entry Points42319
+Ref: userguide/entry_point doc42486
+Ref: e42486
+Ref: userguide/entry_point entry-points42486
+Ref: 2142486
+Ref: userguide/entry_point id142486
+Ref: 2242486
+Node: Console Scripts42830
+Ref: userguide/entry_point console-scripts42927
+Ref: 2342927
+Ref: Console Scripts-Footnote-144615
+Node: Advertising Behavior44668
+Ref: userguide/entry_point advertising-behavior44795
+Ref: 2444795
+Ref: userguide/entry_point dynamic-discovery-of-services-and-plugins44795
+Ref: 2544795
+Ref: Advertising Behavior-Footnote-146935
+Ref: Advertising Behavior-Footnote-246998
+Ref: Advertising Behavior-Footnote-347064
+Node: Dependency Management47116
+Ref: userguide/entry_point dependency-management47219
+Ref: 2647219
+Node: Dependencies Management in Setuptools48070
+Ref: userguide/dependency_management doc48216
+Ref: 1048216
+Ref: userguide/dependency_management dependencies-management-in-setuptools48216
+Ref: 2748216
+Ref: Dependencies Management in Setuptools-Footnote-148731
+Node: Build system requirement48781
+Ref: userguide/dependency_management build-system-requirement48921
+Ref: 2848921
+Node: Package requirement49022
+Ref: userguide/dependency_management package-requirement49106
+Ref: 2949106
+Node: Declaring required dependency50070
+Ref: userguide/dependency_management declaring-dependencies50240
+Ref: 2b50240
+Ref: userguide/dependency_management declaring-required-dependency50240
+Ref: 2c50240
+Node: Platform specific dependencies51217
+Ref: userguide/dependency_management platform-specific-dependencies51360
+Ref: 2d51360
+Ref: Platform specific dependencies-Footnote-152614
+Node: Dependencies that aren’t in PyPI52664
+Ref: userguide/dependency_management dependencies-that-aren-t-in-pypi52807
+Ref: 2e52807
+Node: Optional dependencies55587
+Ref: userguide/dependency_management optional-dependencies55751
+Ref: 2f55751
+Node: Python requirement58781
+Ref: userguide/dependency_management python-requirement58907
+Ref: 3058907
+Node: Data Files Support59157
+Ref: userguide/datafiles doc59313
+Ref: 1359313
+Ref: userguide/datafiles data-files-support59313
+Ref: 3159313
+Ref: Data Files Support-Footnote-165829
+Node: Accessing Data Files at Runtime65915
+Ref: userguide/datafiles accessing-data-files-at-runtime66036
+Ref: 3366036
+Ref: userguide/datafiles id266036
+Ref: 3466036
+Ref: Accessing Data Files at Runtime-Footnote-166883
+Node: Non-Package Data Files66968
+Ref: userguide/datafiles importlib-resources67089
+Ref: 3667089
+Ref: userguide/datafiles non-package-data-files67089
+Ref: 3767089
+Ref: Non-Package Data Files-Footnote-167639
+Node: “Development Mode”67760
+Ref: userguide/development_mode doc67935
+Ref: 3867935
+Ref: userguide/development_mode development-mode67935
+Ref: 3967935
+Node: Tagging and “Daily Build” or “Snapshot” Releases71275
+Ref: userguide/distribution doc71463
+Ref: 3b71463
+Ref: userguide/distribution tagging-and-daily-build-or-snapshot-releases71463
+Ref: 3c71463
+Node: Generating Source Distributions74524
+Ref: userguide/distribution generating-source-distributions74734
+Ref: 4174734
+Node: Making “Official” Non-Snapshot Releases76624
+Ref: userguide/distribution making-official-non-snapshot-releases76739
+Ref: 4276739
+Node: Distributing Extensions compiled with Cython78161
+Ref: userguide/distribution distributing-extensions-compiled-with-cython78350
+Ref: 4378350
+Node: Specifying Your Project’s Version79935
+Ref: userguide/distribution id180122
+Ref: 4480122
+Ref: userguide/distribution specifying-your-project-s-version80122
+Ref: 3e80122
+Node: Creating distutils Extensions85080
+Ref: userguide/extension doc85262
+Ref: 4585262
+Ref: userguide/extension creating-distutils-extensions85262
+Ref: 4685262
+Ref: userguide/extension id185262
+Ref: 4785262
+Node: Adding Commands86205
+Ref: userguide/extension adding-commands86321
+Ref: 4886321
+Node: Adding setup Arguments87585
+Ref: userguide/extension adding-setup-arguments87742
+Ref: 4987742
+Node: Customizing Distribution Options90361
+Ref: userguide/extension customizing-distribution-options90528
+Ref: 4a90528
+Node: Adding new EGG-INFO Files91395
+Ref: userguide/extension adding-new-egg-info-files91583
+Ref: 4b91583
+Ref: userguide/extension id291583
+Ref: 4c91583
+Node: Adding Support for Revision Control Systems94085
+Ref: userguide/extension adding-support-for-revision-control-systems94232
+Ref: 3294232
+Ref: userguide/extension id394232
+Ref: 4d94232
+Ref: Adding Support for Revision Control Systems-Footnote-197167
+Ref: Adding Support for Revision Control Systems-Footnote-297216
+Node: Configuring setup using setup cfg files97265
+Ref: userguide/declarative_config doc97442
+Ref: 4e97442
+Ref: userguide/declarative_config configuring-setup-using-setup-cfg-files97442
+Ref: 4f97442
+Ref: userguide/declarative_config declarative-config97442
+Ref: 5097442
+Ref: Configuring setup using setup cfg files-Footnote-1100442
+Node: Using a src/ layout100491
+Ref: userguide/declarative_config using-a-src-layout100616
+Ref: 51100616
+Node: Specifying values101349
+Ref: userguide/declarative_config specifying-values101474
+Ref: 52101474
+Node: Metadata102746
+Ref: userguide/declarative_config metadata102828
+Ref: 53102828
+Node: Options108439
+Ref: userguide/declarative_config options108521
+Ref: 54108521
+Node: New and Changed setup Keywords113055
+Ref: userguide/keywords doc113220
+Ref: 1a113220
+Ref: userguide/keywords new-and-changed-setup-keywords113220
+Ref: 55113220
+Ref: userguide/keywords test-loader119892
+Ref: 57119892
+Node: Command Reference123156
+Ref: userguide/commands doc123337
+Ref: 5a123337
+Ref: userguide/commands command-reference123337
+Ref: 5b123337
+Node: alias - Define shortcuts for commonly used commands123908
+Ref: userguide/commands alias124073
+Ref: 40124073
+Ref: userguide/commands alias-define-shortcuts-for-commonly-used-commands124073
+Ref: 5c124073
+Node: bdist_egg - Create a Python Egg for the project127121
+Ref: userguide/commands bdist-egg-create-a-python-egg-for-the-project127356
+Ref: 5f127356
+Node: develop - Deploy the project source in “Development Mode”131349
+Ref: userguide/commands develop131582
+Ref: 3a131582
+Ref: userguide/commands develop-deploy-the-project-source-in-development-mode131582
+Ref: 60131582
+Node: egg_info - Create egg metadata and set build tags138553
+Ref: userguide/commands egg-info138782
+Ref: 3d138782
+Ref: userguide/commands egg-info-create-egg-metadata-and-set-build-tags138782
+Ref: 61138782
+Node: Release Tagging Options140219
+Ref: userguide/commands release-tagging-options140363
+Ref: 62140363
+Node: Other egg_info Options142521
+Ref: userguide/commands other-egg-info-options142691
+Ref: 63142691
+Node: egg_info Examples143364
+Ref: userguide/commands egg-info-examples143502
+Ref: 64143502
+Node: rotate - Delete outdated distribution files143966
+Ref: userguide/commands rotate144186
+Ref: 3f144186
+Ref: userguide/commands rotate-delete-outdated-distribution-files144186
+Ref: 65144186
+Node: saveopts - Save used options to a configuration file146091
+Ref: userguide/commands saveopts146324
+Ref: 5e146324
+Ref: userguide/commands saveopts-save-used-options-to-a-configuration-file146324
+Ref: 66146324
+Node: Configuration File Options147929
+Ref: userguide/commands configuration-file-options148048
+Ref: 5d148048
+Node: setopt - Set a distutils or setuptools option in a config file149367
+Ref: userguide/commands setopt149602
+Ref: 67149602
+Ref: userguide/commands setopt-set-a-distutils-or-setuptools-option-in-a-config-file149602
+Ref: 68149602
+Node: test - Build package and run a unittest suite150985
+Ref: userguide/commands test151223
+Ref: 56151223
+Ref: userguide/commands test-build-package-and-run-a-unittest-suite151223
+Ref: 69151223
+Ref: test - Build package and run a unittest suite-Footnote-1154185
+Node: upload - Upload source and/or egg distributions to PyPI154220
+Ref: userguide/commands upload154387
+Ref: 6a154387
+Ref: userguide/commands upload-upload-source-and-or-egg-distributions-to-pypi154387
+Ref: 6b154387
+Ref: upload - Upload source and/or egg distributions to PyPI-Footnote-1154910
+Ref: upload - Upload source and/or egg distributions to PyPI-Footnote-2154943
+Node: Using setuptools to package and distribute your project155047
+Ref: userguide/functionalities_rewrite doc155227
+Ref: 6c155227
+Ref: userguide/functionalities_rewrite using-setuptools-to-package-and-distribute-your-project155227
+Ref: 6d155227
+Node: Automatic Resource Extraction155527
+Ref: userguide/miscellaneous doc155718
+Ref: 6e155718
+Ref: userguide/miscellaneous automatic-resource-extraction155718
+Ref: 58155718
+Ref: userguide/miscellaneous id1155718
+Ref: 6f155718
+Node: Defining Additional Metadata157957
+Ref: userguide/miscellaneous defining-additional-metadata158118
+Ref: 70158118
+Node: Setting the zip_safe flag158928
+Ref: userguide/miscellaneous setting-the-zip-safe-flag159051
+Ref: 71159051
+Node: Build System Support161810
+Ref: build_meta doc161999
+Ref: 5161999
+Ref: build_meta build-system-support161999
+Ref: 72161999
+Node: What is it?162091
+Ref: build_meta what-is-it162186
+Ref: 73162186
+Ref: What is it?-Footnote-1163895
+Ref: What is it?-Footnote-2163940
+Node: How to use it?163990
+Ref: build_meta how-to-use-it164085
+Ref: 74164085
+Ref: How to use it?-Footnote-1165455
+Ref: How to use it?-Footnote-2165517
+Node: Package Discovery and Resource Access using pkg_resources165557
+Ref: pkg_resources doc165704
+Ref: 75165704
+Ref: pkg_resources package-discovery-and-resource-access-using-pkg-resources165704
+Ref: 76165704
+Node: Overview166350
+Ref: pkg_resources overview166478
+Ref: 77166478
+Ref: Overview-Footnote-1170904
+Node: API Reference170982
+Ref: pkg_resources api-reference171110
+Ref: 78171110
+Node: Namespace Package Support171426
+Ref: pkg_resources namespace-package-support171532
+Ref: 79171532
+Node: WorkingSet Objects174056
+Ref: pkg_resources workingset-objects174190
+Ref: 7b174190
+Node: Basic WorkingSet Methods176726
+Ref: pkg_resources basic-workingset-methods176851
+Ref: 7c176851
+Node: WorkingSet Methods and Attributes180619
+Ref: pkg_resources workingset-methods-and-attributes180783
+Ref: 80180783
+Node: Receiving Change Notifications184950
+Ref: pkg_resources receiving-change-notifications185106
+Ref: 82185106
+Node: Locating Plugins186449
+Ref: pkg_resources locating-plugins186563
+Ref: 83186563
+Node: Environment Objects190673
+Ref: pkg_resources environment-objects190801
+Ref: 81190801
+Node: Requirement Objects196336
+Ref: pkg_resources requirement-objects196461
+Ref: 84196461
+Node: Requirements Parsing196840
+Ref: pkg_resources requirements-parsing196963
+Ref: 7d196963
+Node: Requirement Methods and Attributes199298
+Ref: pkg_resources requirement-methods-and-attributes199421
+Ref: 85199421
+Node: Entry Points<2>202078
+Ref: pkg_resources entry-points202204
+Ref: 7f202204
+Node: Convenience API204711
+Ref: pkg_resources convenience-api204811
+Ref: 86204811
+Node: Creating and Parsing207221
+Ref: pkg_resources creating-and-parsing207348
+Ref: 87207348
+Node: EntryPoint Objects210392
+Ref: pkg_resources entrypoint-objects210495
+Ref: 88210495
+Node: Distribution Objects211979
+Ref: pkg_resources distribution-objects212105
+Ref: 89212105
+Node: Getting or Creating Distributions212593
+Ref: pkg_resources getting-or-creating-distributions212719
+Ref: 8a212719
+Node: Distribution Attributes216620
+Ref: pkg_resources distribution-attributes216775
+Ref: 8d216775
+Node: Distribution Methods220522
+Ref: pkg_resources distribution-methods220635
+Ref: 90220635
+Node: ResourceManager API225533
+Ref: pkg_resources id1225656
+Ref: 91225656
+Ref: pkg_resources resourcemanager-api225656
+Ref: 35225656
+Node: Basic Resource Access226588
+Ref: pkg_resources basic-resource-access226697
+Ref: 92226697
+Node: Resource Extraction229834
+Ref: pkg_resources resource-extraction229976
+Ref: 93229976
+Node: “Provider” Interface232647
+Ref: pkg_resources provider-interface232759
+Ref: 94232759
+Node: Metadata API235052
+Ref: pkg_resources metadata-api235165
+Ref: 7e235165
+Node: IMetadataProvider Methods237259
+Ref: pkg_resources imetadataprovider-methods237337
+Ref: 8c237337
+Node: Exceptions238661
+Ref: pkg_resources exceptions238782
+Ref: 96238782
+Node: Supporting Custom Importers240205
+Ref: pkg_resources supporting-custom-importers240331
+Ref: 7a240331
+Node: IResourceProvider242930
+Ref: pkg_resources iresourceprovider243051
+Ref: 8b243051
+Node: Built-in Resource Providers244880
+Ref: pkg_resources built-in-resource-providers245001
+Ref: 97245001
+Node: Utility Functions248068
+Ref: pkg_resources utility-functions248175
+Ref: 98248175
+Node: Parsing Utilities248556
+Ref: pkg_resources parsing-utilities248658
+Ref: 8e248658
+Ref: pkg_resources yield-lines249212
+Ref: 95249212
+Node: Platform Utilities253345
+Ref: pkg_resources platform-utilities253473
+Ref: 8f253473
+Node: PEP 302 Utilities255688
+Ref: pkg_resources pep-302-utilities255818
+Ref: 99255818
+Node: File/Path Utilities255962
+Ref: pkg_resources file-path-utilities256081
+Ref: 9a256081
+Node: History256902
+Ref: pkg_resources history256995
+Ref: 9b256995
+Node: Keywords270832
+Ref: references/keywords doc270966
+Ref: 9c270966
+Ref: references/keywords keywords270966
+Ref: 9d270966
+Ref: references/keywords test-loader282821
+Ref: 9e282821
+Ref: Keywords-Footnote-1286193
+Ref: Keywords-Footnote-2286243
+Node: Roadmap286292
+Ref: roadmap doc286422
+Ref: 9f286422
+Ref: roadmap roadmap286422
+Ref: a0286422
+Ref: Roadmap-Footnote-1286568
+Node: Building and Distributing Packages with Setuptools<2>286622
+Ref: setuptools doc286769
+Ref: a1286769
+Ref: setuptools building-and-distributing-packages-with-setuptools286769
+Ref: a2286769
+Ref: Building and Distributing Packages with Setuptools<2>-Footnote-1289138
+Node: Developer’s Guide289197
+Ref: setuptools developer-s-guide289310
+Ref: a3289310
+Node: TRANSITIONAL NOTE289389
+Ref: setuptools transitional-note289466
+Ref: a4289466
+Node: setup cfg-only projects290789
+Ref: setuptools setup-cfg-only-projects290896
+Ref: a5290896
+Ref: setup cfg-only projects-Footnote-1292299
+Ref: setup cfg-only projects-Footnote-2292348
+Ref: setup cfg-only projects-Footnote-3292397
+Ref: setup cfg-only projects-Footnote-4292446
+Ref: setup cfg-only projects-Footnote-5292495
+Ref: setup cfg-only projects-Footnote-6292544
+Ref: setup cfg-only projects-Footnote-7292593
+Ref: setup cfg-only projects-Footnote-8292642
+Node: Configuration API292691
+Ref: setuptools configuration-api292835
+Ref: a6292835
+Node: Mailing List and Bug Tracker293857
+Ref: setuptools mailing-list-and-bug-tracker293969
+Ref: a7293969
+Ref: Mailing List and Bug Tracker-Footnote-1294339
+Ref: Mailing List and Bug Tracker-Footnote-2294395
+Node: Development on Setuptools294439
+Ref: development/index doc294633
+Ref: a8294633
+Ref: development/index development-on-setuptools294633
+Ref: a9294633
+Ref: development/index setuptools-bug-tracker294633
+Ref: aa294633
+Node: Developer’s Guide for Setuptools296088
+Ref: development/developer-guide doc296212
+Ref: ab296212
+Ref: development/developer-guide developer-s-guide-for-setuptools296212
+Ref: ac296212
+Node: Recommended Reading296586
+Ref: development/developer-guide recommended-reading296707
+Ref: ad296707
+Ref: Recommended Reading-Footnote-1297098
+Node: Project Management297165
+Ref: development/developer-guide project-management297312
+Ref: ae297312
+Ref: Project Management-Footnote-1297899
+Ref: Project Management-Footnote-2297942
+Ref: Project Management-Footnote-3298015
+Node: Authoring Tickets298057
+Ref: development/developer-guide authoring-tickets298206
+Ref: af298206
+Node: Making a pull request299312
+Ref: development/developer-guide making-a-pull-request299462
+Ref: b0299462
+Node: Adding change notes with your PRs299928
+Ref: development/developer-guide adding-change-notes-with-your-prs300071
+Ref: b1300071
+Ref: development/developer-guide id1300071
+Ref: b2300071
+Ref: Adding change notes with your PRs-Footnote-1300998
+Node: Alright! So how to add a news fragment?301076
+Ref: development/developer-guide alright-so-how-to-add-a-news-fragment301287
+Ref: b3301287
+Ref: Alright! So how to add a news fragment?-Footnote-1303484
+Node: Examples for adding changelog entries to your Pull Requests303528
+Ref: development/developer-guide examples-for-adding-changelog-entries-to-your-pull-requests303697
+Ref: b4303697
+Node: Auto-Merge Requests304303
+Ref: development/developer-guide auto-merge-requests304443
+Ref: b5304443
+Ref: development/developer-guide towncrier-philosophy304443
+Ref: b6304443
+Node: Testing304769
+Ref: development/developer-guide testing304907
+Ref: b7304907
+Node: Semantic Versioning305179
+Ref: development/developer-guide semantic-versioning305320
+Ref: b8305320
+Node: Building Documentation305407
+Ref: development/developer-guide building-documentation305562
+Ref: b9305562
+Ref: Building Documentation-Footnote-1305844
+Ref: Building Documentation-Footnote-2305889
+Node: Vendored Dependencies305942
+Ref: development/developer-guide published-documentation306069
+Ref: ba306069
+Ref: development/developer-guide vendored-dependencies306069
+Ref: bb306069
+Ref: Vendored Dependencies-Footnote-1306650
+Node: Release Process306704
+Ref: development/releases doc306828
+Ref: bc306828
+Ref: development/releases release-process306828
+Ref: bd306828
+Node: Release Frequency307216
+Ref: development/releases release-frequency307314
+Ref: be307314
+Node: Release Managers308292
+Ref: development/releases release-managers308390
+Ref: bf308390
+Node: Guides on backward compatibility & deprecated practice308525
+Ref: deprecated/index doc308676
+Ref: 2a308676
+Ref: deprecated/index guides-on-backward-compatibility-deprecated-practice308676
+Ref: c0308676
+Node: Supporting both Python 2 and Python 3 with Setuptools309462
+Ref: deprecated/python3 doc309656
+Ref: 59309656
+Ref: deprecated/python3 supporting-both-python-2-and-python-3-with-setuptools309656
+Ref: c1309656
+Ref: Supporting both Python 2 and Python 3 with Setuptools-Footnote-1310381
+Ref: Supporting both Python 2 and Python 3 with Setuptools-Footnote-2310419
+Node: Using 2to3310460
+Ref: deprecated/python3 using-2to3310602
+Ref: c2310602
+Node: Differential conversion312551
+Ref: deprecated/python3 differential-conversion312625
+Ref: c3312625
+Node: Distributing Python 3 modules313446
+Ref: deprecated/python3 distributing-python-3-modules313614
+Ref: c4313614
+Node: Advanced features314070
+Ref: deprecated/python3 advanced-features314219
+Ref: c5314219
+Node: The Internal Structure of Python Eggs314429
+Ref: deprecated/python_eggs doc314644
+Ref: c6314644
+Ref: deprecated/python_eggs the-internal-structure-of-python-eggs314644
+Ref: c7314644
+Node: Eggs and their Formats314878
+Ref: deprecated/python_eggs eggs-and-their-formats315004
+Ref: c8315004
+Node: Code and Resources318188
+Ref: deprecated/python_eggs code-and-resources318294
+Ref: c9318294
+Node: Project Metadata319082
+Ref: deprecated/python_eggs project-metadata319223
+Ref: ca319223
+Node: Filename-Embedded Metadata321015
+Ref: deprecated/python_eggs filename-embedded-metadata321147
+Ref: cc321147
+Node: Egg Links323662
+Ref: deprecated/python_eggs egg-links323769
+Ref: cd323769
+Node: Standard Metadata325841
+Ref: deprecated/python_eggs standard-metadata326006
+Ref: cb326006
+Node: txt File Formats327581
+Ref: deprecated/python_eggs txt-file-formats327683
+Ref: ce327683
+Node: Dependency Metadata328856
+Ref: deprecated/python_eggs dependency-metadata329020
+Ref: cf329020
+Node: requires txt329290
+Ref: deprecated/python_eggs requires-txt329389
+Ref: d0329389
+Node: setup_requires txt330435
+Ref: deprecated/python_eggs setup-requires-txt330563
+Ref: d1330563
+Node: dependency_links txt330760
+Ref: deprecated/python_eggs dependency-links-txt330915
+Ref: d2330915
+Node: depends txt – Obsolete do not create!331273
+Ref: deprecated/python_eggs depends-txt-obsolete-do-not-create331401
+Ref: d3331401
+Node: namespace_packages txt – Namespace Package Metadata332008
+Ref: deprecated/python_eggs namespace-packages-txt-namespace-package-metadata332210
+Ref: d4332210
+Node: entry_points txt – “Entry Point”/Plugin Metadata332571
+Ref: deprecated/python_eggs entry-points-txt-entry-point-plugin-metadata332778
+Ref: d5332778
+Node: The scripts Subdirectory333650
+Ref: deprecated/python_eggs the-scripts-subdirectory333824
+Ref: d6333824
+Node: Zip Support Metadata334781
+Ref: deprecated/python_eggs zip-support-metadata334947
+Ref: d9334947
+Node: native_libs txt335128
+Ref: deprecated/python_eggs native-libs-txt335232
+Ref: da335232
+Node: eager_resources txt335897
+Ref: deprecated/python_eggs eager-resources-txt336035
+Ref: dc336035
+Node: zip-safe and not-zip-safe336653
+Ref: deprecated/python_eggs zip-safe-and-not-zip-safe336767
+Ref: dd336767
+Node: top_level txt – Conflict Management Metadata337816
+Ref: deprecated/python_eggs top-level-txt-conflict-management-metadata337995
+Ref: de337995
+Node: SOURCES txt – Source Files Manifest338804
+Ref: deprecated/python_eggs sources-txt-source-files-manifest338954
+Ref: df338954
+Node: Other Technical Considerations340189
+Ref: deprecated/python_eggs other-technical-considerations340323
+Ref: e0340323
+Node: Zip File Issues340472
+Ref: deprecated/python_eggs zip-file-issues340606
+Ref: db340606
+Node: The Extraction Process341840
+Ref: deprecated/python_eggs the-extraction-process341952
+Ref: e1341952
+Node: Extension Import Wrappers343133
+Ref: deprecated/python_eggs extension-import-wrappers343245
+Ref: e2343245
+Node: Installation and Path Management Issues344580
+Ref: deprecated/python_eggs installation-and-path-management-issues344714
+Ref: d8344714
+Node: Script Wrappers349270
+Ref: deprecated/python_eggs script-wrappers349365
+Ref: d7349365
+Node: Easy Install351737
+Ref: deprecated/easy_install doc351921
+Ref: e3351921
+Ref: deprecated/easy_install easy-install351921
+Ref: e4351921
+Ref: Easy Install-Footnote-1353191
+Node: Using “Easy Install”353247
+Ref: deprecated/easy_install using-easy-install353349
+Ref: e5353349
+Node: Installing “Easy Install”353732
+Ref: deprecated/easy_install installation-instructions353871
+Ref: e6353871
+Ref: deprecated/easy_install installing-easy-install353871
+Ref: e7353871
+Ref: Installing “Easy Install”-Footnote-1355301
+Ref: Installing “Easy Install”-Footnote-2355346
+Node: Troubleshooting355377
+Ref: deprecated/easy_install troubleshooting355484
+Ref: eb355484
+Node: Windows Notes356373
+Ref: deprecated/easy_install windows-notes356480
+Ref: ec356480
+Node: Downloading and Installing a Package356831
+Ref: deprecated/easy_install downloading-and-installing-a-package356998
+Ref: ee356998
+Ref: Downloading and Installing a Package-Footnote-1360432
+Node: Upgrading a Package360491
+Ref: deprecated/easy_install upgrading-a-package360656
+Ref: f1360656
+Node: Changing the Active Version362592
+Ref: deprecated/easy_install changing-the-active-version362742
+Ref: f3362742
+Node: Uninstalling Packages363810
+Ref: deprecated/easy_install uninstalling-packages363957
+Ref: f2363957
+Node: Managing Scripts364611
+Ref: deprecated/easy_install managing-scripts364756
+Ref: f4364756
+Ref: Managing Scripts-Footnote-1366587
+Node: Executables and Launchers366619
+Ref: deprecated/easy_install executables-and-launchers366760
+Ref: ed366760
+Node: Windows Executable Launcher368152
+Ref: deprecated/easy_install windows-executable-launcher368277
+Ref: f5368277
+Node: Natural Script Launcher368775
+Ref: deprecated/easy_install natural-script-launcher368900
+Ref: f6368900
+Ref: Natural Script Launcher-Footnote-1369909
+Node: Tips & Techniques369955
+Ref: deprecated/easy_install tips-techniques370104
+Ref: f7370104
+Node: Multiple Python Versions370360
+Ref: deprecated/easy_install multiple-python-versions370491
+Ref: f8370491
+Node: Restricting Downloads with --allow-hosts371060
+Ref: deprecated/easy_install restricting-downloads-with-allow-hosts371235
+Ref: e9371235
+Node: Installing on Un-networked Machines372141
+Ref: deprecated/easy_install installing-on-un-networked-machines372328
+Ref: f9372328
+Node: Packaging Others’ Projects As Eggs373914
+Ref: deprecated/easy_install packaging-others-projects-as-eggs374092
+Ref: fa374092
+Node: Creating your own Package Index375193
+Ref: deprecated/easy_install creating-your-own-package-index375327
+Ref: fb375327
+Node: Password-Protected Sites376573
+Ref: deprecated/easy_install password-protected-sites376721
+Ref: fd376721
+Node: Using pypirc Credentials377240
+Ref: deprecated/easy_install using-pypirc-credentials377362
+Ref: fe377362
+Node: Controlling Build Options378021
+Ref: deprecated/easy_install controlling-build-options378155
+Ref: ff378155
+Node: Editing and Viewing Source Packages379091
+Ref: deprecated/easy_install editing-and-viewing-source-packages379269
+Ref: ef379269
+Node: Dealing with Installation Conflicts381362
+Ref: deprecated/easy_install dealing-with-installation-conflicts381538
+Ref: 100381538
+Node: Compressed Installation383597
+Ref: deprecated/easy_install compressed-installation383729
+Ref: 101383729
+Node: Reference Manual386059
+Ref: deprecated/easy_install reference-manual386161
+Ref: 102386161
+Node: Configuration Files386329
+Ref: deprecated/easy_install configuration-files386434
+Ref: f0386434
+Ref: Configuration Files-Footnote-1388421
+Node: Command-Line Options388490
+Ref: deprecated/easy_install command-line-options388633
+Ref: ea388633
+Ref: Command-Line Options-Footnote-1404837
+Node: Custom Installation Locations404886
+Ref: deprecated/easy_install custom-installation-locations405033
+Ref: e8405033
+Ref: deprecated/easy_install non-root-installation405033
+Ref: 103405033
+Ref: Custom Installation Locations-Footnote-1406241
+Node: Use the “–user” option406575
+Ref: deprecated/easy_install pep-370406745
+Ref: 107406745
+Ref: deprecated/easy_install use-the-user-option406745
+Ref: 104406745
+Ref: Use the “–user” option-Footnote-1407332
+Node: Use the “–user” option and customize “PYTHONUSERBASE”407497
+Ref: deprecated/easy_install use-the-user-option-and-customize-pythonuserbase407696
+Ref: 105407696
+Node: Use “virtualenv”408168
+Ref: deprecated/easy_install use-virtualenv408330
+Ref: 106408330
+Ref: Use “virtualenv”-Footnote-1409040
+Node: Package Index “API”409085
+Ref: deprecated/easy_install package-index-api409203
+Ref: fc409203
+Ref: deprecated/easy_install virtualenv409203
+Ref: 108409203
+Node: Porting from Distutils412197
+Ref: deprecated/distutils-legacy doc412370
+Ref: 109412370
+Ref: deprecated/distutils-legacy porting-from-distutils412370
+Ref: 10a412370
+Ref: Porting from Distutils-Footnote-1412920
+Node: Prefer Setuptools412982
+Ref: deprecated/distutils-legacy prefer-setuptools413062
+Ref: 10b413062
+Ref: Prefer Setuptools-Footnote-1413971
+Node: “Eggsecutable” Scripts414022
+Ref: deprecated/functionalities doc414174
+Ref: 10c414174
+Ref: deprecated/functionalities eggsecutable-scripts414174
+Ref: 10d414174
+Node: History<2>415686
+Ref: history doc415819
+Ref: 10e415819
+Ref: history changes415819
+Ref: 10f415819
+Ref: history history415819
+Ref: 110415819
+Node: v50 3 2424446
+Ref: history v50-3-2424520
+Ref: 111424520
+Node: Documentation changes424603
+Ref: history documentation-changes424685
+Ref: 112424685
+Ref: Documentation changes-Footnote-1425167
+Ref: Documentation changes-Footnote-2425222
+Ref: Documentation changes-Footnote-3425267
+Ref: Documentation changes-Footnote-4425322
+Ref: Documentation changes-Footnote-5425367
+Ref: Documentation changes-Footnote-6425422
+Node: Misc425467
+Ref: history misc425549
+Ref: 113425549
+Ref: Misc-Footnote-1425878
+Ref: Misc-Footnote-2425933
+Ref: Misc-Footnote-3425978
+Ref: Misc-Footnote-4426033
+Ref: Misc-Footnote-5426088
+Node: v50 3 1426133
+Ref: history v50-3-1426223
+Ref: 114426223
+Node: Documentation changes<2>426339
+Ref: history id7426427
+Ref: 115426427
+Ref: Documentation changes<2>-Footnote-1426949
+Ref: Documentation changes<2>-Footnote-2427004
+Ref: Documentation changes<2>-Footnote-3427059
+Ref: Documentation changes<2>-Footnote-4427114
+Ref: Documentation changes<2>-Footnote-5427169
+Ref: Documentation changes<2>-Footnote-6427224
+Ref: Documentation changes<2>-Footnote-7427269
+Ref: Documentation changes<2>-Footnote-8427324
+Node: Misc<2>427369
+Ref: history id14427457
+Ref: 116427457
+Ref: Misc<2>-Footnote-1427666
+Ref: Misc<2>-Footnote-2427721
+Node: v50 3 0427776
+Ref: history v50-3-0427866
+Ref: 117427866
+Node: Changes427926
+Ref: history id17427981
+Ref: 118427981
+Ref: Changes-Footnote-1428157
+Ref: Changes-Footnote-2428212
+Node: v50 2 0428264
+Ref: history v50-2-0428354
+Ref: 119428354
+Node: Changes<2>428425
+Ref: history id19428483
+Ref: 11a428483
+Ref: Changes<2>-Footnote-1428942
+Ref: Changes<2>-Footnote-2428997
+Node: v50 1 0429052
+Ref: history v50-1-0429142
+Ref: 11b429142
+Node: Changes<3>429213
+Ref: history id22429271
+Ref: 11c429271
+Ref: Changes<3>-Footnote-1429782
+Node: v50 0 3429837
+Ref: history v50-0-3429927
+Ref: 11d429927
+Node: Misc<3>429992
+Ref: history id24430047
+Ref: 11e430047
+Ref: Misc<3>-Footnote-1430211
+Ref: Misc<3>-Footnote-2430266
+Node: v50 0 2430317
+Ref: history v50-0-2430407
+Ref: 11f430407
+Node: Misc<4>430472
+Ref: history id26430527
+Ref: 120430527
+Ref: Misc<4>-Footnote-1430690
+Ref: Misc<4>-Footnote-2430745
+Node: v50 0 1430787
+Ref: history v50-0-1430877
+Ref: 121430877
+Node: Misc<5>430942
+Ref: history id28430997
+Ref: 122430997
+Ref: Misc<5>-Footnote-1431441
+Ref: Misc<5>-Footnote-2431496
+Ref: Misc<5>-Footnote-3431551
+Node: v50 0 0431606
+Ref: history v50-0-0431696
+Ref: 123431696
+Node: Breaking Changes431788
+Ref: history breaking-changes431871
+Ref: 124431871
+Ref: Breaking Changes-Footnote-1432454
+Node: Changes<4>432509
+Ref: history id33432592
+Ref: 125432592
+Ref: Changes<4>-Footnote-1432719
+Node: v49 6 0432774
+Ref: history v49-6-0432864
+Ref: 126432864
+Node: Changes<5>432937
+Ref: history id35432995
+Ref: 127432995
+Ref: Changes<5>-Footnote-1433221
+Node: v49 5 0433276
+Ref: history v49-5-0433366
+Ref: 128433366
+Node: Changes<6>433439
+Ref: history id37433497
+Ref: 129433497
+Ref: Changes<6>-Footnote-1433762
+Ref: Changes<6>-Footnote-2433817
+Node: v49 4 0433867
+Ref: history v49-4-0433957
+Ref: 12a433957
+Node: Changes<7>434030
+Ref: history id39434088
+Ref: 12b434088
+Ref: Changes<7>-Footnote-1434215
+Node: v49 3 2434270
+Ref: history v49-3-2434360
+Ref: 12c434360
+Node: Documentation changes<3>434478
+Ref: history id41434566
+Ref: 12d434566
+Ref: Documentation changes<3>-Footnote-1434731
+Node: Misc<6>434786
+Ref: history id43434874
+Ref: 12e434874
+Ref: Misc<6>-Footnote-1435027
+Node: v49 3 1435082
+Ref: history v49-3-1435172
+Ref: 12f435172
+Node: Changes<8>435245
+Ref: history id45435303
+Ref: 130435303
+Ref: Changes<8>-Footnote-1435513
+Node: v49 3 0435568
+Ref: history v49-3-0435658
+Ref: 131435658
+Node: Changes<9>435731
+Ref: history id47435789
+Ref: 132435789
+Ref: Changes<9>-Footnote-1436219
+Node: v49 2 1436274
+Ref: history v49-2-1436364
+Ref: 133436364
+Node: Misc<7>436431
+Ref: history id49436486
+Ref: 134436486
+Ref: Misc<7>-Footnote-1436631
+Node: v49 2 0436686
+Ref: history v49-2-0436776
+Ref: 135436776
+Node: Changes<10>436850
+Ref: history id51436909
+Ref: 136436909
+Ref: Changes<10>-Footnote-1437175
+Node: v49 1 3437230
+Ref: history v49-1-3437320
+Ref: 137437320
+Node: Misc<8>437387
+Ref: history id53437442
+Ref: 138437442
+Ref: Misc<8>-Footnote-1437666
+Ref: Misc<8>-Footnote-2437721
+Node: v49 1 2437776
+Ref: history v49-1-2437866
+Ref: 139437866
+Node: Changes<11>437940
+Ref: history id56437999
+Ref: 13a437999
+Ref: Changes<11>-Footnote-1438450
+Node: v49 1 1438505
+Ref: history v49-1-1438595
+Ref: 13b438595
+Node: Misc<9>438662
+Ref: history id58438717
+Ref: 13c438717
+Ref: Misc<9>-Footnote-1438868
+Node: v49 0 1438923
+Ref: history v49-0-1439013
+Ref: 13d439013
+Node: Misc<10>439081
+Ref: history id60439137
+Ref: 13e439137
+Ref: Misc<10>-Footnote-1439369
+Ref: Misc<10>-Footnote-2439424
+Node: v49 1 0439475
+Ref: history v49-1-0439565
+Ref: 13f439565
+Node: Changes<12>439639
+Ref: history id62439698
+Ref: 140439698
+Ref: Changes<12>-Footnote-1439859
+Node: v49 0 0439914
+Ref: history v49-0-0440004
+Ref: 141440004
+Node: Breaking Changes<2>440137
+Ref: history id64440224
+Ref: 142440224
+Ref: Breaking Changes<2>-Footnote-1440630
+Ref: Breaking Changes<2>-Footnote-2440685
+Node: Changes<13>440740
+Ref: history id67440844
+Ref: 143440844
+Ref: Changes<13>-Footnote-1441209
+Ref: Changes<13>-Footnote-2441264
+Node: Misc<11>441319
+Ref: history id70441395
+Ref: 144441395
+Ref: Misc<11>-Footnote-1441574
+Node: v48 0 0441629
+Ref: history v48-0-0441719
+Ref: 145441719
+Node: Breaking Changes<3>441810
+Ref: history id72441877
+Ref: 146441877
+Ref: Breaking Changes<3>-Footnote-1442993
+Node: v47 3 2443048
+Ref: history v47-3-2443138
+Ref: 147443138
+Node: Misc<12>443206
+Ref: history id74443262
+Ref: 148443262
+Ref: Misc<12>-Footnote-1443423
+Node: v47 3 1443478
+Ref: history v47-3-1443568
+Ref: 149443568
+Node: Misc<13>443636
+Ref: history id76443692
+Ref: 14a443692
+Ref: Misc<13>-Footnote-1443971
+Ref: Misc<13>-Footnote-2444026
+Node: v47 3 0444081
+Ref: history v47-3-0444171
+Ref: 14b444171
+Node: Changes<14>444263
+Ref: history id79444339
+Ref: 14c444339
+Ref: Changes<14>-Footnote-1444591
+Node: Misc<14>444646
+Ref: history id81444722
+Ref: 14d444722
+Ref: Misc<14>-Footnote-1444879
+Node: v47 2 0444934
+Ref: history v47-2-0445024
+Ref: 14e445024
+Node: Changes<15>445098
+Ref: history id83445157
+Ref: 14f445157
+Ref: Changes<15>-Footnote-1445332
+Node: v47 1 1445387
+Ref: history v47-1-1445477
+Ref: 150445477
+Node: Documentation changes<4>445649
+Ref: history id85445762
+Ref: 151445762
+Ref: Documentation changes<4>-Footnote-1445919
+Node: Incorporate changes from v44 1 1445974
+Ref: history incorporate-changes-from-v44-1-1446087
+Ref: 152446087
+Ref: Incorporate changes from v44 1 1-Footnote-1446372
+Node: v44 1 1446427
+Ref: history v44-1-1446517
+Ref: 153446517
+Node: Misc<15>446585
+Ref: history id88446641
+Ref: 154446641
+Ref: Misc<15>-Footnote-1446868
+Node: v47 1 0446923
+Ref: history v47-1-0447013
+Ref: 155447013
+Node: Changes<16>447087
+Ref: history id90447146
+Ref: 156447146
+Ref: Changes<16>-Footnote-1447366
+Node: v47 0 0447421
+Ref: history v47-0-0447511
+Ref: 157447511
+Node: Breaking Changes<4>447626
+Ref: history id92447713
+Ref: 158447713
+Ref: Breaking Changes<4>-Footnote-1447957
+Node: Changes<17>448012
+Ref: history id94448099
+Ref: 159448099
+Ref: Changes<17>-Footnote-1448257
+Node: v46 4 0448312
+Ref: history v46-4-0448402
+Ref: 15a448402
+Node: Changes<18>448476
+Ref: history id96448535
+Ref: 15b448535
+Ref: Changes<18>-Footnote-1448913
+Node: v46 3 1448968
+Ref: history v46-3-1449058
+Ref: 15c449058
+Node: v46 3 0449123
+Ref: history v46-3-0449213
+Ref: 15d449213
+Node: Changes<19>449305
+Ref: history id98449381
+Ref: 15e449381
+Ref: Changes<19>-Footnote-1449639
+Ref: Changes<19>-Footnote-2449694
+Node: Misc<16>449748
+Ref: history id101449824
+Ref: 15f449824
+Ref: Misc<16>-Footnote-1450104
+Ref: Misc<16>-Footnote-2450159
+Node: v46 2 0450214
+Ref: history v46-2-0450304
+Ref: 160450304
+Node: Changes<20>450447
+Ref: history id104450539
+Ref: 161450539
+Ref: Changes<20>-Footnote-1451073
+Ref: Changes<20>-Footnote-2451128
+Ref: Changes<20>-Footnote-3451183
+Ref: Changes<20>-Footnote-4451238
+Node: Documentation changes<5>451293
+Ref: history id109451402
+Ref: 162451402
+Ref: Documentation changes<5>-Footnote-1451592
+Node: Misc<17>451647
+Ref: history id111451736
+Ref: 163451736
+Ref: Misc<17>-Footnote-1451969
+Ref: Misc<17>-Footnote-2452024
+Node: v46 1 3452067
+Ref: history v46-1-3452157
+Ref: 164452157
+Node: v46 1 2452222
+Ref: history v46-1-2452312
+Ref: 165452312
+Node: Misc<18>452380
+Ref: history id113452436
+Ref: 166452436
+Ref: Misc<18>-Footnote-1452570
+Node: v46 1 1452625
+Ref: history v46-1-1452715
+Ref: 167452715
+Node: v46 1 0452780
+Ref: history v46-1-0452870
+Ref: 168452870
+Node: Changes<21>453015
+Ref: history id115453115
+Ref: 169453115
+Ref: Changes<21>-Footnote-1453640
+Ref: Changes<21>-Footnote-2453694
+Ref: Changes<21>-Footnote-3453749
+Ref: Changes<21>-Footnote-4453804
+Ref: Changes<21>-Footnote-5453859
+Node: Incorporate changes from v44 1 0453909
+Ref: history incorporate-changes-from-v44-1-0454009
+Ref: 16a454009
+Ref: Incorporate changes from v44 1 0-Footnote-1454457
+Ref: Incorporate changes from v44 1 0-Footnote-2454512
+Ref: Incorporate changes from v44 1 0-Footnote-3454567
+Node: v44 1 0454622
+Ref: history v44-1-0454712
+Ref: 16b454712
+Node: Changes<22>454786
+Ref: history id123454845
+Ref: 16c454845
+Ref: Changes<22>-Footnote-1455241
+Ref: Changes<22>-Footnote-2455296
+Ref: Changes<22>-Footnote-3455351
+Node: v46 0 0455406
+Ref: history v46-0-0455496
+Ref: 16d455496
+Node: Breaking Changes<5>455680
+Ref: history id127455767
+Ref: 16e455767
+Ref: Breaking Changes<5>-Footnote-1455918
+Node: Changes<23>455971
+Ref: history id129456091
+Ref: 16f456091
+Ref: Changes<23>-Footnote-1456415
+Ref: Changes<23>-Footnote-2456470
+Node: Documentation changes<6>456525
+Ref: history id132456634
+Ref: 170456634
+Ref: Documentation changes<6>-Footnote-1456795
+Node: Misc<19>456850
+Ref: history id134456939
+Ref: 171456939
+Ref: Misc<19>-Footnote-1457097
+Node: v45 3 0457152
+Ref: history v45-3-0457242
+Ref: 172457242
+Node: Changes<24>457316
+Ref: history id136457375
+Ref: 173457375
+Ref: Changes<24>-Footnote-1457592
+Ref: Changes<24>-Footnote-2457647
+Node: v45 2 0457702
+Ref: history v45-2-0457792
+Ref: 174457792
+Node: Changes<25>457884
+Ref: history id139457960
+Ref: 175457960
+Ref: Changes<25>-Footnote-1458711
+Ref: Changes<25>-Footnote-2458766
+Ref: Changes<25>-Footnote-3458821
+Ref: Changes<25>-Footnote-4458871
+Ref: Changes<25>-Footnote-5458926
+Node: Misc<20>458981
+Ref: history id144459057
+Ref: 176459057
+Ref: Misc<20>-Footnote-1459211
+Node: v45 1 0459266
+Ref: history v45-1-0459356
+Ref: 177459356
+Node: Changes<26>459430
+Ref: history id146459489
+Ref: 178459489
+Ref: Changes<26>-Footnote-1459851
+Ref: Changes<26>-Footnote-2459906
+Ref: Changes<26>-Footnote-3459961
+Node: v45 0 0460016
+Ref: history v45-0-0460106
+Ref: 179460106
+Node: Breaking Changes<6>460221
+Ref: history id150460308
+Ref: 17a460308
+Ref: Breaking Changes<6>-Footnote-1460576
+Node: Changes<27>460631
+Ref: history id152460718
+Ref: 17b460718
+Ref: Changes<27>-Footnote-1460855
+Node: v44 0 0460910
+Ref: history v44-0-0461000
+Ref: 17c461000
+Node: Breaking Changes<7>461091
+Ref: history id154461158
+Ref: 17d461158
+Ref: Breaking Changes<7>-Footnote-1461288
+Node: v43 0 0461343
+Ref: history v43-0-0461433
+Ref: 17e461433
+Node: Breaking Changes<8>461548
+Ref: history id156461635
+Ref: 17f461635
+Ref: Breaking Changes<8>-Footnote-1462014
+Node: Changes<28>462069
+Ref: history id158462156
+Ref: 180462156
+Ref: Changes<28>-Footnote-1462537
+Ref: Changes<28>-Footnote-2462592
+Node: v42 0 2462642
+Ref: history v42-0-2462732
+Ref: 181462732
+Node: Changes<29>462806
+Ref: history id161462865
+Ref: 182462865
+Ref: Changes<29>-Footnote-1463162
+Ref: Changes<29>-Footnote-2463217
+Node: v42 0 1463272
+Ref: history v42-0-1463362
+Ref: 183463362
+Node: Changes<30>463436
+Ref: history id164463495
+Ref: 184463495
+Ref: Changes<30>-Footnote-1463632
+Node: v42 0 0463687
+Ref: history v42-0-0463777
+Ref: 185463777
+Node: Breaking Changes<9>463892
+Ref: history id166463979
+Ref: 186463979
+Ref: Breaking Changes<9>-Footnote-1464927
+Ref: Breaking Changes<9>-Footnote-2464982
+Ref: Breaking Changes<9>-Footnote-3465037
+Ref: Breaking Changes<9>-Footnote-4465076
+Ref: Breaking Changes<9>-Footnote-5465126
+Ref: Breaking Changes<9>-Footnote-6465176
+Ref: Breaking Changes<9>-Footnote-7465231
+Node: Changes<31>465264
+Ref: history id171465351
+Ref: 187465351
+Ref: Changes<31>-Footnote-1466048
+Ref: Changes<31>-Footnote-2466103
+Ref: Changes<31>-Footnote-3466158
+Ref: Changes<31>-Footnote-4466213
+Ref: Changes<31>-Footnote-5466268
+Node: v41 6 0466316
+Ref: history v41-6-0466406
+Ref: 188466406
+Node: Changes<32>466480
+Ref: history id176466539
+Ref: 189466539
+Ref: Changes<32>-Footnote-1466726
+Node: v41 5 1466780
+Ref: history v41-5-1466870
+Ref: 18a466870
+Node: Changes<33>466944
+Ref: history id178467003
+Ref: 18b467003
+Ref: Changes<33>-Footnote-1467167
+Node: v41 5 0467222
+Ref: history v41-5-0467312
+Ref: 18c467312
+Node: Changes<34>467455
+Ref: history id180467547
+Ref: 18d467547
+Ref: Changes<34>-Footnote-1468021
+Ref: Changes<34>-Footnote-2468076
+Ref: Changes<34>-Footnote-3468131
+Ref: Changes<34>-Footnote-4468181
+Ref: Changes<34>-Footnote-5468236
+Node: Documentation changes<7>468291
+Ref: history id185468400
+Ref: 18e468400
+Ref: Documentation changes<7>-Footnote-1468980
+Ref: Documentation changes<7>-Footnote-2469035
+Ref: Documentation changes<7>-Footnote-3469090
+Ref: Documentation changes<7>-Footnote-4469145
+Node: Misc<21>469200
+Ref: history id190469289
+Ref: 18f469289
+Ref: Misc<21>-Footnote-1469418
+Node: v41 4 0469473
+Ref: history v41-4-0469563
+Ref: 190469563
+Node: Changes<35>469637
+Ref: history id192469696
+Ref: 191469696
+Ref: Changes<35>-Footnote-1469880
+Node: v41 3 0469935
+Ref: history v41-3-0470025
+Ref: 192470025
+Node: Changes<36>470117
+Ref: history id194470193
+Ref: 193470193
+Ref: Changes<36>-Footnote-1470479
+Node: Misc<22>470534
+Ref: history id196470610
+Ref: 194470610
+Ref: Misc<22>-Footnote-1470786
+Node: v41 2 0470841
+Ref: history v41-2-0470931
+Ref: 195470931
+Node: Changes<37>471023
+Ref: history id198471099
+Ref: 196471099
+Ref: Changes<37>-Footnote-1471235
+Node: Misc<23>471289
+Ref: history id200471365
+Ref: 197471365
+Ref: Misc<23>-Footnote-1471567
+Node: v41 1 0471622
+Ref: history v41-1-0471712
+Ref: 198471712
+Node: Misc<24>471831
+Ref: history id202471920
+Ref: 199471920
+Ref: Misc<24>-Footnote-1472922
+Ref: Misc<24>-Footnote-2472977
+Ref: Misc<24>-Footnote-3473032
+Ref: Misc<24>-Footnote-4473082
+Ref: Misc<24>-Footnote-5473137
+Ref: Misc<24>-Footnote-6473187
+Ref: Misc<24>-Footnote-7473242
+Ref: Misc<24>-Footnote-8473297
+Ref: Misc<24>-Footnote-9473352
+Node: Documentation changes<8>473407
+Ref: history id212473496
+Ref: 19a473496
+Ref: Documentation changes<8>-Footnote-1473662
+Node: v41 0 1473717
+Ref: history v41-0-1473807
+Ref: 19b473807
+Node: Changes<38>473881
+Ref: history id214473940
+Ref: 19c473940
+Ref: Changes<38>-Footnote-1474411
+Ref: Changes<38>-Footnote-2474466
+Ref: Changes<38>-Footnote-3474516
+Ref: Changes<38>-Footnote-4474571
+Node: v41 0 0474626
+Ref: history v41-0-0474716
+Ref: 19d474716
+Node: Breaking Changes<10>474808
+Ref: history id219474876
+Ref: 19e474876
+Ref: Breaking Changes<10>-Footnote-1475468
+Node: v40 9 0475523
+Ref: history v40-9-0475613
+Ref: 19f475613
+Node: Changes<39>475738
+Ref: history id221475830
+Ref: 1a0475830
+Ref: Changes<39>-Footnote-1476552
+Ref: Changes<39>-Footnote-2476607
+Ref: Changes<39>-Footnote-3476657
+Ref: Changes<39>-Footnote-4476712
+Node: Documentation changes<9>476767
+Ref: history id226476859
+Ref: 1a1476859
+Ref: Documentation changes<9>-Footnote-1477057
+Node: v40 8 0477112
+Ref: history v40-8-0477202
+Ref: 1a2477202
+Node: Changes<40>477276
+Ref: history id228477335
+Ref: 1a3477335
+Ref: Changes<40>-Footnote-1478222
+Ref: Changes<40>-Footnote-2478277
+Ref: Changes<40>-Footnote-3478327
+Ref: Changes<40>-Footnote-4478382
+Node: v40 7 3478437
+Ref: history v40-7-3478527
+Ref: 1a4478527
+Node: Changes<41>478601
+Ref: history id233478660
+Ref: 1a5478660
+Ref: Changes<41>-Footnote-1478998
+Ref: Changes<41>-Footnote-2479053
+Ref: Changes<41>-Footnote-3479108
+Ref: Changes<41>-Footnote-4479163
+Ref: Changes<41>-Footnote-5479218
+Node: v40 7 2479273
+Ref: history v40-7-2479363
+Ref: 1a6479363
+Node: Changes<42>479437
+Ref: history id239479496
+Ref: 1a7479496
+Ref: Changes<42>-Footnote-1479626
+Node: v40 7 1479681
+Ref: history v40-7-1479771
+Ref: 1a8479771
+Node: Changes<43>479845
+Ref: history id241479904
+Ref: 1a9479904
+Ref: Changes<43>-Footnote-1480103
+Node: v40 7 0480158
+Ref: history v40-7-0480248
+Ref: 1aa480248
+Node: Breaking Changes<11>480364
+Ref: history id243480452
+Ref: 1ab480452
+Ref: Breaking Changes<11>-Footnote-1480654
+Node: Changes<44>480709
+Ref: history id245480797
+Ref: 1ac480797
+Ref: Changes<44>-Footnote-1481314
+Ref: Changes<44>-Footnote-2481369
+Ref: Changes<44>-Footnote-3481424
+Ref: Changes<44>-Footnote-4481479
+Ref: Changes<44>-Footnote-5481534
+Ref: Changes<44>-Footnote-6481576
+Ref: Changes<44>-Footnote-7481631
+Ref: Changes<44>-Footnote-8481686
+Node: v40 6 3481736
+Ref: history v40-6-3481826
+Ref: 1ad481826
+Node: Changes<45>481900
+Ref: history id253481959
+Ref: 1ae481959
+Ref: Changes<45>-Footnote-1482134
+Ref: Changes<45>-Footnote-2482189
+Node: v40 6 2482239
+Ref: history v40-6-2482329
+Ref: 1af482329
+Node: Changes<46>482403
+Ref: history id256482462
+Ref: 1b0482462
+Ref: Changes<46>-Footnote-1482627
+Node: v40 6 1482682
+Ref: history v40-6-1482772
+Ref: 1b1482772
+Node: Changes<47>482846
+Ref: history id258482905
+Ref: 1b2482905
+Ref: Changes<47>-Footnote-1483113
+Node: v40 6 0483168
+Ref: history v40-6-0483258
+Ref: 1b3483258
+Node: Deprecations483419
+Ref: history deprecations483499
+Ref: 1b4483499
+Ref: Deprecations-Footnote-1483666
+Node: Changes<48>483721
+Ref: history id261483835
+Ref: 1b5483835
+Ref: Changes<48>-Footnote-1484727
+Ref: Changes<48>-Footnote-2484782
+Ref: Changes<48>-Footnote-3484837
+Ref: Changes<48>-Footnote-4484892
+Node: Documentation changes<10>484947
+Ref: history id266485057
+Ref: 1b6485057
+Ref: Documentation changes<10>-Footnote-1485903
+Ref: Documentation changes<10>-Footnote-2485958
+Ref: Documentation changes<10>-Footnote-3486013
+Ref: Documentation changes<10>-Footnote-4486068
+Ref: Documentation changes<10>-Footnote-5486123
+Ref: Documentation changes<10>-Footnote-6486178
+Ref: Documentation changes<10>-Footnote-7486233
+Ref: Documentation changes<10>-Footnote-8486288
+Node: Misc<25>486343
+Ref: history id275486433
+Ref: 1b7486433
+Ref: Misc<25>-Footnote-1486731
+Ref: Misc<25>-Footnote-2486786
+Node: v40 5 0486841
+Ref: history v40-5-0486931
+Ref: 1b8486931
+Node: Changes<49>487057
+Ref: history id278487150
+Ref: 1b9487150
+Ref: Changes<49>-Footnote-1487566
+Ref: Changes<49>-Footnote-2487621
+Ref: Changes<49>-Footnote-3487676
+Ref: Changes<49>-Footnote-4487731
+Node: Documentation changes<11>487786
+Ref: history id283487879
+Ref: 1ba487879
+Ref: Documentation changes<11>-Footnote-1488059
+Node: v40 4 3488114
+Ref: history v40-4-3488204
+Ref: 1bb488204
+Node: Changes<50>488278
+Ref: history id285488337
+Ref: 1bc488337
+Ref: Changes<50>-Footnote-1488471
+Node: v40 4 2488526
+Ref: history v40-4-2488616
+Ref: 1bd488616
+Node: Misc<26>488684
+Ref: history id287488740
+Ref: 1be488740
+Ref: Misc<26>-Footnote-1488844
+Node: v40 4 1488899
+Ref: history v40-4-1488989
+Ref: 1bf488989
+Node: Changes<51>489063
+Ref: history id289489122
+Ref: 1c0489122
+Ref: Changes<51>-Footnote-1489239
+Node: v40 4 0489294
+Ref: history v40-4-0489384
+Ref: 1c1489384
+Node: Changes<52>489458
+Ref: history id291489517
+Ref: 1c2489517
+Ref: Changes<52>-Footnote-1489908
+Node: v40 3 0489963
+Ref: history v40-3-0490053
+Ref: 1c3490053
+Node: Changes<53>490145
+Ref: history id293490221
+Ref: 1c4490221
+Ref: Changes<53>-Footnote-1490721
+Ref: Changes<53>-Footnote-2490776
+Ref: Changes<53>-Footnote-3490831
+Ref: Changes<53>-Footnote-4490886
+Node: Misc<27>490941
+Ref: history id298491017
+Ref: 1c5491017
+Ref: Misc<27>-Footnote-1491134
+Node: v40 2 0491189
+Ref: history v40-2-0491279
+Ref: 1c6491279
+Node: Changes<54>491353
+Ref: history id300491412
+Ref: 1c7491412
+Ref: Changes<54>-Footnote-1491551
+Ref: Changes<54>-Footnote-2491606
+Node: v40 1 1491656
+Ref: history v40-1-1491746
+Ref: 1c8491746
+Node: Changes<55>491820
+Ref: history id303491879
+Ref: 1c9491879
+Ref: Changes<55>-Footnote-1492032
+Node: v40 1 0492087
+Ref: history v40-1-0492177
+Ref: 1ca492177
+Node: Changes<56>492269
+Ref: history id305492345
+Ref: 1cb492345
+Ref: Changes<56>-Footnote-1493127
+Ref: Changes<56>-Footnote-2493182
+Ref: Changes<56>-Footnote-3493237
+Ref: Changes<56>-Footnote-4493287
+Ref: Changes<56>-Footnote-5493342
+Ref: Changes<56>-Footnote-6493397
+Ref: Changes<56>-Footnote-7493452
+Ref: Changes<56>-Footnote-8493507
+Ref: Changes<56>-Footnote-9493562
+Ref: Changes<56>-Footnote-10493617
+Node: Misc<28>493673
+Ref: history id315493749
+Ref: 1cc493749
+Ref: Misc<28>-Footnote-1493906
+Node: v40 0 0493961
+Ref: history v40-0-0494051
+Ref: 1cd494051
+Node: Breaking Changes<12>494237
+Ref: history id317494325
+Ref: 1ce494325
+Ref: Breaking Changes<12>-Footnote-1494455
+Node: Changes<57>494510
+Ref: history id319494632
+Ref: 1cf494632
+Ref: Changes<57>-Footnote-1494884
+Ref: Changes<57>-Footnote-2494939
+Node: Documentation changes<12>494994
+Ref: history id322495104
+Ref: 1d0495104
+Ref: Documentation changes<12>-Footnote-1495382
+Ref: Documentation changes<12>-Footnote-2495437
+Ref: Documentation changes<12>-Footnote-3495492
+Node: Misc<29>495547
+Ref: history id326495637
+Ref: 1d1495637
+Ref: Misc<29>-Footnote-1495816
+Ref: Misc<29>-Footnote-2495871
+Node: v39 2 0495921
+Ref: history v39-2-0496011
+Ref: 1d2496011
+Node: Changes<58>496155
+Ref: history id329496248
+Ref: 1d3496248
+Ref: Changes<58>-Footnote-1496841
+Ref: Changes<58>-Footnote-2496896
+Ref: Changes<58>-Footnote-3496946
+Ref: Changes<58>-Footnote-4497001
+Ref: Changes<58>-Footnote-5497056
+Node: Documentation changes<13>497111
+Ref: history id334497221
+Ref: 1d4497221
+Ref: Documentation changes<13>-Footnote-1497608
+Ref: Documentation changes<13>-Footnote-2497663
+Ref: Documentation changes<13>-Footnote-3497718
+Ref: Documentation changes<13>-Footnote-4497773
+Node: Misc<30>497828
+Ref: history id339497918
+Ref: 1d5497918
+Ref: Misc<30>-Footnote-1498694
+Ref: Misc<30>-Footnote-2498749
+Ref: Misc<30>-Footnote-3498804
+Ref: Misc<30>-Footnote-4498859
+Ref: Misc<30>-Footnote-5498914
+Ref: Misc<30>-Footnote-6498969
+Ref: Misc<30>-Footnote-7499024
+Ref: Misc<30>-Footnote-8499074
+Node: v39 1 0499129
+Ref: history v39-1-0499219
+Ref: 1d6499219
+Ref: v39 1 0-Footnote-1499587
+Ref: v39 1 0-Footnote-2499642
+Ref: v39 1 0-Footnote-3499697
+Node: v39 0 1499752
+Ref: history v39-0-1499842
+Ref: 1d7499842
+Ref: v39 0 1-Footnote-1499999
+Node: v39 0 0500054
+Ref: history v39-0-0500144
+Ref: 1d8500144
+Ref: v39 0 0-Footnote-1500728
+Ref: v39 0 0-Footnote-2500783
+Node: v38 7 0500837
+Ref: history v38-7-0500927
+Ref: 1d9500927
+Ref: v38 7 0-Footnote-1501059
+Node: v38 6 1501114
+Ref: history v38-6-1501204
+Ref: 1da501204
+Ref: v38 6 1-Footnote-1501407
+Node: v38 6 0501462
+Ref: history v38-6-0501552
+Ref: 1db501552
+Ref: v38 6 0-Footnote-1501687
+Ref: v38 6 0-Footnote-2501742
+Node: v38 5 2501792
+Ref: history v38-5-2501882
+Ref: 1dc501882
+Ref: v38 5 2-Footnote-1502076
+Ref: v38 5 2-Footnote-2502131
+Node: v38 5 1502181
+Ref: history v38-5-1502271
+Ref: 1dd502271
+Ref: v38 5 1-Footnote-1502436
+Node: v38 5 0502491
+Ref: history v38-5-0502581
+Ref: 1de502581
+Ref: v38 5 0-Footnote-1502847
+Ref: v38 5 0-Footnote-2502902
+Node: v38 4 1502957
+Ref: history v38-4-1503047
+Ref: 1df503047
+Ref: v38 4 1-Footnote-1503195
+Node: v38 4 0503250
+Ref: history v38-4-0503340
+Ref: 1e0503340
+Ref: v38 4 0-Footnote-1503489
+Node: v38 3 0503544
+Ref: history v38-3-0503634
+Ref: 1e1503634
+Ref: v38 3 0-Footnote-1503900
+Ref: v38 3 0-Footnote-2503955
+Ref: v38 3 0-Footnote-3504005
+Node: v38 2 5504060
+Ref: history v38-2-5504150
+Ref: 1e2504150
+Ref: v38 2 5-Footnote-1504298
+Node: v38 2 4504353
+Ref: history v38-2-4504443
+Ref: 1e3504443
+Ref: v38 2 4-Footnote-1504593
+Node: v38 2 3504648
+Ref: history v38-2-3504738
+Ref: 1e4504738
+Node: v38 2 2504814
+Ref: history v38-2-2504904
+Ref: 1e5504904
+Ref: v38 2 2-Footnote-1505066
+Node: v38 2 1505121
+Ref: history v38-2-1505211
+Ref: 1e6505211
+Ref: v38 2 1-Footnote-1505372
+Node: v38 2 0505427
+Ref: history v38-2-0505517
+Ref: 1e7505517
+Ref: v38 2 0-Footnote-1505715
+Node: v38 1 0505770
+Ref: history v38-1-0505860
+Ref: 1e8505860
+Ref: v38 1 0-Footnote-1506034
+Node: v38 0 0506089
+Ref: history v38-0-0506179
+Ref: 1e9506179
+Ref: v38 0 0-Footnote-1506435
+Node: v37 0 0506489
+Ref: history v37-0-0506579
+Ref: 1ea506579
+Ref: v37 0 0-Footnote-1506765
+Node: v36 8 0506819
+Ref: history v36-8-0506909
+Ref: 1eb506909
+Ref: v36 8 0-Footnote-1507078
+Node: v36 7 3507133
+Ref: history v36-7-3507223
+Ref: 1ec507223
+Ref: v36 7 3-Footnote-1507355
+Node: v36 7 2507410
+Ref: history v36-7-2507500
+Ref: 1ed507500
+Ref: v36 7 2-Footnote-1507637
+Node: v36 7 1507691
+Ref: history v36-7-1507781
+Ref: 1ee507781
+Ref: v36 7 1-Footnote-1507950
+Node: v36 7 0508005
+Ref: history v36-7-0508095
+Ref: 1ef508095
+Ref: v36 7 0-Footnote-1508244
+Node: v36 6 1508299
+Ref: history v36-6-1508389
+Ref: 1f0508389
+Ref: v36 6 1-Footnote-1508667
+Ref: v36 6 1-Footnote-2508722
+Node: v36 6 0508776
+Ref: history v36-6-0508866
+Ref: 1f1508866
+Ref: v36 6 0-Footnote-1509157
+Ref: v36 6 0-Footnote-2509212
+Ref: v36 6 0-Footnote-3509262
+Node: v36 5 0509317
+Ref: history v36-5-0509407
+Ref: 1f2509407
+Ref: v36 5 0-Footnote-1509775
+Ref: v36 5 0-Footnote-2509829
+Node: v36 4 0509884
+Ref: history v36-4-0509974
+Ref: 1f3509974
+Ref: v36 4 0-Footnote-1510914
+Ref: v36 4 0-Footnote-2510969
+Ref: v36 4 0-Footnote-3511048
+Ref: v36 4 0-Footnote-4511103
+Ref: v36 4 0-Footnote-5511157
+Ref: v36 4 0-Footnote-6511212
+Ref: v36 4 0-Footnote-7511267
+Ref: v36 4 0-Footnote-8511322
+Node: v36 3 0511377
+Ref: history v36-3-0511467
+Ref: 1f4511467
+Ref: v36 3 0-Footnote-1511678
+Node: v36 2 7511733
+Ref: history v36-2-7511823
+Ref: 1f5511823
+Ref: v36 2 7-Footnote-1512047
+Ref: v36 2 7-Footnote-2512102
+Node: v36 2 6512157
+Ref: history v36-2-6512247
+Ref: 1f6512247
+Ref: v36 2 6-Footnote-1512417
+Node: v36 2 5512471
+Ref: history v36-2-5512561
+Ref: 1f7512561
+Ref: v36 2 5-Footnote-1512795
+Ref: v36 2 5-Footnote-2512850
+Ref: v36 2 5-Footnote-3512905
+Ref: v36 2 5-Footnote-4512960
+Node: v36 2 4513015
+Ref: history v36-2-4513105
+Ref: 1f8513105
+Ref: v36 2 4-Footnote-1513301
+Node: v36 2 3513356
+Ref: history v36-2-3513446
+Ref: 1f9513446
+Ref: v36 2 3-Footnote-1513575
+Node: v36 2 2513630
+Ref: history v36-2-2513720
+Ref: 1fa513720
+Ref: v36 2 2-Footnote-1513917
+Node: v36 2 1513972
+Ref: history v36-2-1514062
+Ref: 1fb514062
+Ref: v36 2 1-Footnote-1514243
+Ref: v36 2 1-Footnote-2514298
+Node: v36 2 0514353
+Ref: history v36-2-0514443
+Ref: 1fc514443
+Ref: v36 2 0-Footnote-1514962
+Ref: v36 2 0-Footnote-2515017
+Node: v36 1 1515072
+Ref: history v36-1-1515162
+Ref: 1fd515162
+Ref: v36 1 1-Footnote-1515411
+Ref: v36 1 1-Footnote-2515466
+Node: v36 1 0515521
+Ref: history v36-1-0515611
+Ref: 1fe515611
+Ref: v36 1 0-Footnote-1516114
+Ref: v36 1 0-Footnote-2516169
+Ref: v36 1 0-Footnote-3516206
+Node: v36 0 1516318
+Ref: history v36-0-1516408
+Ref: 1ff516408
+Ref: v36 0 1-Footnote-1516645
+Node: v36 0 0516700
+Ref: history v36-0-0516790
+Ref: 200516790
+Ref: v36 0 0-Footnote-1517225
+Node: v35 0 2517279
+Ref: history v35-0-2517369
+Ref: 201517369
+Ref: v35 0 2-Footnote-1517565
+Ref: v35 0 2-Footnote-2517620
+Ref: v35 0 2-Footnote-3517675
+Node: v35 0 1517716
+Ref: history v35-0-1517806
+Ref: 202517806
+Ref: v35 0 1-Footnote-1518149
+Ref: v35 0 1-Footnote-2518203
+Ref: v35 0 1-Footnote-3518258
+Ref: v35 0 1-Footnote-4518313
+Node: v35 0 0518367
+Ref: history v35-0-0518457
+Ref: 203518457
+Ref: v35 0 0-Footnote-1519057
+Node: v34 4 1519111
+Ref: history v34-4-1519201
+Ref: 204519201
+Ref: v34 4 1-Footnote-1519633
+Ref: v34 4 1-Footnote-2519688
+Ref: v34 4 1-Footnote-3519743
+Node: v34 4 0519797
+Ref: history v34-4-0519887
+Ref: 205519887
+Ref: v34 4 0-Footnote-1520276
+Ref: v34 4 0-Footnote-2520330
+Ref: v34 4 0-Footnote-3520384
+Node: v34 3 3520439
+Ref: history v34-3-3520529
+Ref: 206520529
+Ref: v34 3 3-Footnote-1520788
+Ref: v34 3 3-Footnote-2520842
+Node: v34 3 2520896
+Ref: history v34-3-2520986
+Ref: 207520986
+Ref: v34 3 2-Footnote-1521182
+Node: v34 3 1521236
+Ref: history v34-3-1521326
+Ref: 208521326
+Ref: v34 3 1-Footnote-1521585
+Ref: v34 3 1-Footnote-2521639
+Node: v34 3 0521693
+Ref: history v34-3-0521783
+Ref: 209521783
+Ref: v34 3 0-Footnote-1522077
+Ref: v34 3 0-Footnote-2522131
+Node: v34 2 0522185
+Ref: history v34-2-0522275
+Ref: 20a522275
+Ref: v34 2 0-Footnote-1522621
+Ref: v34 2 0-Footnote-2522675
+Ref: v34 2 0-Footnote-3522729
+Node: v34 1 1522779
+Ref: history v34-1-1522869
+Ref: 20b522869
+Ref: v34 1 1-Footnote-1523045
+Ref: v34 1 1-Footnote-2523099
+Node: v34 1 0523153
+Ref: history v34-1-0523243
+Ref: 20c523243
+Ref: v34 1 0-Footnote-1523444
+Node: v34 0 3523498
+Ref: history v34-0-3523588
+Ref: 20d523588
+Ref: v34 0 3-Footnote-1523816
+Node: v34 0 2523870
+Ref: history v34-0-2523960
+Ref: 20e523960
+Ref: v34 0 2-Footnote-1524194
+Ref: v34 0 2-Footnote-2524248
+Node: v34 0 1524302
+Ref: history v34-0-1524392
+Ref: 20f524392
+Ref: v34 0 1-Footnote-1524511
+Node: v34 0 0524565
+Ref: history v34-0-0524655
+Ref: 210524655
+Ref: v34 0 0-Footnote-1526296
+Ref: v34 0 0-Footnote-2526350
+Ref: v34 0 0-Footnote-3526404
+Node: v33 1 1526459
+Ref: history v33-1-1526549
+Ref: 211526549
+Ref: v33 1 1-Footnote-1526714
+Node: v33 1 0526768
+Ref: history v33-1-0526858
+Ref: 212526858
+Ref: v33 1 0-Footnote-1527237
+Node: v33 0 0527286
+Ref: history v33-0-0527376
+Ref: 213527376
+Ref: v33 0 0-Footnote-1527673
+Ref: v33 0 0-Footnote-2527727
+Node: v32 3 1527785
+Ref: history v32-3-1527875
+Ref: 214527875
+Ref: v32 3 1-Footnote-1528049
+Node: v32 3 0528103
+Ref: history v32-3-0528193
+Ref: 215528193
+Ref: v32 3 0-Footnote-1528387
+Node: v32 2 0528441
+Ref: history v32-2-0528531
+Ref: 216528531
+Ref: v32 2 0-Footnote-1528766
+Ref: v32 2 0-Footnote-2528820
+Node: v32 1 3528872
+Ref: history v32-1-3528962
+Ref: 217528962
+Ref: v32 1 3-Footnote-1529156
+Node: v32 1 2529210
+Ref: history v32-1-2529300
+Ref: 218529300
+Ref: v32 1 2-Footnote-1529491
+Node: v32 1 1529545
+Ref: history v32-1-1529635
+Ref: 219529635
+Ref: v32 1 1-Footnote-1530069
+Ref: v32 1 1-Footnote-2530123
+Node: v32 1 0530177
+Ref: history v32-1-0530267
+Ref: 21a530267
+Ref: v32 1 0-Footnote-1530473
+Node: v32 0 0530527
+Ref: history v32-0-0530617
+Ref: 21b530617
+Ref: v32 0 0-Footnote-1530953
+Ref: v32 0 0-Footnote-2531007
+Ref: v32 0 0-Footnote-3531061
+Ref: v32 0 0-Footnote-4531115
+Node: v31 0 1531169
+Ref: history v31-0-1531259
+Ref: 21c531259
+Ref: v31 0 1-Footnote-1531514
+Node: v31 0 0531568
+Ref: history v31-0-0531658
+Ref: 21d531658
+Ref: v31 0 0-Footnote-1532258
+Ref: v31 0 0-Footnote-2532312
+Ref: v31 0 0-Footnote-3532366
+Ref: v31 0 0-Footnote-4532421
+Node: v30 4 0532475
+Ref: history v30-4-0532565
+Ref: 21e532565
+Ref: v30 4 0-Footnote-1533101
+Node: v30 3 0533155
+Ref: history v30-3-0533245
+Ref: 21f533245
+Ref: v30 3 0-Footnote-1533424
+Ref: v30 3 0-Footnote-2533478
+Ref: v30 3 0-Footnote-3533532
+Node: v30 2 1533641
+Ref: history v30-2-1533731
+Ref: 220533731
+Ref: v30 2 1-Footnote-1533908
+Node: v30 2 0533962
+Ref: history v30-2-0534052
+Ref: 221534052
+Ref: v30 2 0-Footnote-1534181
+Ref: v30 2 0-Footnote-2534235
+Node: v30 1 0534301
+Ref: history v30-1-0534391
+Ref: 222534391
+Ref: v30 1 0-Footnote-1534726
+Ref: v30 1 0-Footnote-2534780
+Node: v30 0 0534834
+Ref: history v30-0-0534924
+Ref: 223534924
+Ref: v30 0 0-Footnote-1535337
+Ref: v30 0 0-Footnote-2535391
+Ref: v30 0 0-Footnote-3535445
+Ref: v30 0 0-Footnote-4535499
+Node: v29 0 1535553
+Ref: history v29-0-1535643
+Ref: 224535643
+Ref: v29 0 1-Footnote-1536037
+Node: v29 0 0536091
+Ref: history v29-0-0536181
+Ref: 225536181
+Ref: v29 0 0-Footnote-1536409
+Ref: v29 0 0-Footnote-2536463
+Node: v28 8 0536520
+Ref: history v28-8-0536610
+Ref: 226536610
+Ref: v28 8 0-Footnote-1536995
+Ref: v28 8 0-Footnote-2537049
+Ref: v28 8 0-Footnote-3537103
+Node: v28 7 1537157
+Ref: history v28-7-1537247
+Ref: 227537247
+Ref: v28 7 1-Footnote-1537491
+Ref: v28 7 1-Footnote-2537545
+Ref: v28 7 1-Footnote-3537599
+Node: v28 7 0537653
+Ref: history v28-7-0537743
+Ref: 228537743
+Ref: v28 7 0-Footnote-1538138
+Ref: v28 7 0-Footnote-2538192
+Ref: v28 7 0-Footnote-3538246
+Ref: v28 7 0-Footnote-4538300
+Ref: v28 7 0-Footnote-5538354
+Node: v28 6 1538408
+Ref: history v28-6-1538498
+Ref: 229538498
+Ref: v28 6 1-Footnote-1538630
+Node: v28 6 0538684
+Ref: history v28-6-0538774
+Ref: 22a538774
+Ref: v28 6 0-Footnote-1539116
+Node: v28 5 0539170
+Ref: history v28-5-0539260
+Ref: 22b539260
+Ref: v28 5 0-Footnote-1539763
+Ref: v28 5 0-Footnote-2539817
+Ref: v28 5 0-Footnote-3539871
+Ref: v28 5 0-Footnote-4539925
+Node: v28 4 0539979
+Ref: history v28-4-0540069
+Ref: 22c540069
+Ref: v28 4 0-Footnote-1540635
+Ref: v28 4 0-Footnote-2540689
+Ref: v28 4 0-Footnote-3540739
+Ref: v28 4 0-Footnote-4540793
+Ref: v28 4 0-Footnote-5540847
+Ref: v28 4 0-Footnote-6540901
+Node: v28 3 0540955
+Ref: history v28-3-0541045
+Ref: 22d541045
+Ref: v28 3 0-Footnote-1541385
+Ref: v28 3 0-Footnote-2541439
+Ref: v28 3 0-Footnote-3541493
+Ref: v28 3 0-Footnote-4541543
+Node: v28 1 0541598
+Ref: history v28-1-0541688
+Ref: 22e541688
+Ref: v28 1 0-Footnote-1541808
+Node: v28 0 0541862
+Ref: history v28-0-0541952
+Ref: 22f541952
+Ref: v28 0 0-Footnote-1542530
+Ref: v28 0 0-Footnote-2542584
+Ref: v28 0 0-Footnote-3542638
+Node: v27 3 1542692
+Ref: history v27-3-1542782
+Ref: 230542782
+Ref: v27 3 1-Footnote-1543165
+Node: v27 3 0543219
+Ref: history v27-3-0543309
+Ref: 231543309
+Ref: v27 3 0-Footnote-1543613
+Ref: v27 3 0-Footnote-2543667
+Ref: v27 3 0-Footnote-3543717
+Node: v27 2 0543771
+Ref: history v27-2-0543861
+Ref: 232543861
+Ref: v27 2 0-Footnote-1544104
+Ref: v27 2 0-Footnote-2544158
+Node: v27 1 2544212
+Ref: history v27-1-2544302
+Ref: 233544302
+Ref: v27 1 2-Footnote-1544428
+Ref: v27 1 2-Footnote-2544482
+Node: v27 1 1544536
+Ref: history v27-1-1544626
+Ref: 234544626
+Ref: v27 1 1-Footnote-1544744
+Node: v27 1 0544798
+Ref: history v27-1-0544888
+Ref: 235544888
+Node: v27 0 0545039
+Ref: history v27-0-0545129
+Ref: 236545129
+Ref: v27 0 0-Footnote-1545944
+Ref: v27 0 0-Footnote-2545998
+Ref: v27 0 0-Footnote-3546052
+Node: v26 1 1546106
+Ref: history v26-1-1546196
+Ref: 237546196
+Node: v26 1 0546426
+Ref: history v26-1-0546516
+Ref: 238546516
+Ref: v26 1 0-Footnote-1546783
+Ref: v26 1 0-Footnote-2546837
+Node: v26 0 0546878
+Ref: history v26-0-0546968
+Ref: 239546968
+Ref: v26 0 0-Footnote-1547558
+Ref: v26 0 0-Footnote-2547612
+Ref: v26 0 0-Footnote-3547654
+Ref: v26 0 0-Footnote-4547708
+Ref: v26 0 0-Footnote-5547762
+Ref: v26 0 0-Footnote-6547816
+Node: v25 4 0547870
+Ref: history v25-4-0547960
+Ref: 23a547960
+Node: v25 3 0548519
+Ref: history v25-3-0548609
+Ref: 23b548609
+Ref: v25 3 0-Footnote-1549040
+Ref: v25 3 0-Footnote-2549094
+Ref: v25 3 0-Footnote-3549148
+Ref: v25 3 0-Footnote-4549202
+Ref: v25 3 0-Footnote-5549256
+Ref: v25 3 0-Footnote-6549310
+Ref: v25 3 0-Footnote-7549364
+Ref: v25 3 0-Footnote-8549418
+Ref: v25 3 0-Footnote-9549472
+Ref: v25 3 0-Footnote-10549526
+Node: v25 2 0549581
+Ref: history v25-2-0549671
+Ref: 23c549671
+Ref: v25 2 0-Footnote-1549860
+Ref: v25 2 0-Footnote-2549914
+Node: v25 1 6549968
+Ref: history v25-1-6550058
+Ref: 23d550058
+Ref: v25 1 6-Footnote-1550274
+Node: v25 1 5550328
+Ref: history v25-1-5550418
+Ref: 23e550418
+Ref: v25 1 5-Footnote-1550569
+Ref: v25 1 5-Footnote-2550623
+Node: v25 1 4550677
+Ref: history v25-1-4550767
+Ref: 23f550767
+Ref: v25 1 4-Footnote-1551033
+Ref: v25 1 4-Footnote-2551087
+Ref: v25 1 4-Footnote-3551141
+Ref: v25 1 4-Footnote-4551195
+Node: v25 1 3551249
+Ref: history v25-1-3551339
+Ref: 240551339
+Ref: v25 1 3-Footnote-1551571
+Ref: v25 1 3-Footnote-2551625
+Ref: v25 1 3-Footnote-3551679
+Ref: v25 1 3-Footnote-4551733
+Ref: v25 1 3-Footnote-5551787
+Node: v25 1 2551841
+Ref: history v25-1-2551931
+Ref: 241551931
+Ref: v25 1 2-Footnote-1552370
+Ref: v25 1 2-Footnote-2552424
+Ref: v25 1 2-Footnote-3552478
+Node: v25 1 1552532
+Ref: history v25-1-1552622
+Ref: 242552622
+Ref: v25 1 1-Footnote-1552846
+Ref: v25 1 1-Footnote-2552900
+Node: v25 1 0552954
+Ref: history v25-1-0553044
+Ref: 243553044
+Ref: v25 1 0-Footnote-1553424
+Node: v25 0 2553478
+Ref: history v25-0-2553568
+Ref: 244553568
+Ref: v25 0 2-Footnote-1553742
+Node: v25 0 1553796
+Ref: history v25-0-1553886
+Ref: 245553886
+Ref: v25 0 1-Footnote-1554197
+Ref: v25 0 1-Footnote-2554251
+Ref: v25 0 1-Footnote-3554305
+Ref: v25 0 1-Footnote-4554359
+Ref: v25 0 1-Footnote-5554413
+Node: v25 0 0554467
+Ref: history v25-0-0554557
+Ref: 246554557
+Ref: v25 0 0-Footnote-1555394
+Node: v24 3 1555448
+Ref: history v24-3-1555538
+Ref: 247555538
+Ref: v24 3 1-Footnote-1555871
+Ref: v24 3 1-Footnote-2555925
+Ref: v24 3 1-Footnote-3555979
+Ref: v24 3 1-Footnote-4556033
+Node: v24 3 0556087
+Ref: history v24-3-0556177
+Ref: 248556177
+Ref: v24 3 0-Footnote-1556474
+Node: v24 2 1556528
+Ref: history v24-2-1556618
+Ref: 249556618
+Ref: v24 2 1-Footnote-1556787
+Node: v24 2 0556841
+Ref: history v24-2-0556931
+Ref: 24a556931
+Ref: v24 2 0-Footnote-1557071
+Node: v24 1 1557125
+Ref: history v24-1-1557215
+Ref: 24b557215
+Ref: v24 1 1-Footnote-1557351
+Ref: v24 1 1-Footnote-2557405
+Ref: v24 1 1-Footnote-3557459
+Node: v24 1 0557513
+Ref: history v24-1-0557603
+Ref: 24c557603
+Ref: v24 1 0-Footnote-1557911
+Ref: v24 1 0-Footnote-2557965
+Ref: v24 1 0-Footnote-3558019
+Ref: v24 1 0-Footnote-4558073
+Ref: v24 1 0-Footnote-5558127
+Ref: v24 1 0-Footnote-6558181
+Ref: v24 1 0-Footnote-7558235
+Ref: v24 1 0-Footnote-8558289
+Node: v24 0 3558343
+Ref: history v24-0-3558433
+Ref: 24d558433
+Ref: v24 0 3-Footnote-1558675
+Ref: v24 0 3-Footnote-2558729
+Ref: v24 0 3-Footnote-3558783
+Ref: v24 0 3-Footnote-4558837
+Ref: v24 0 3-Footnote-5558891
+Ref: v24 0 3-Footnote-6558945
+Ref: v24 0 3-Footnote-7558999
+Ref: v24 0 3-Footnote-8559053
+Node: v24 0 2559107
+Ref: history v24-0-2559197
+Ref: 24e559197
+Node: v24 0 1559348
+Ref: history v24-0-1559438
+Ref: 24f559438
+Ref: v24 0 1-Footnote-1559610
+Ref: v24 0 1-Footnote-2559664
+Node: v24 0 0559718
+Ref: history v24-0-0559808
+Ref: 250559808
+Ref: v24 0 0-Footnote-1560221
+Node: v23 2 1560275
+Ref: history v23-2-1560365
+Ref: 251560365
+Ref: v23 2 1-Footnote-1560585
+Node: v23 1 0560639
+Ref: history v23-1-0560729
+Ref: 252560729
+Ref: v23 1 0-Footnote-1560877
+Node: v23 0 0560931
+Ref: history v23-0-0561021
+Ref: 253561021
+Ref: v23 0 0-Footnote-1561407
+Ref: v23 0 0-Footnote-2561461
+Node: v22 0 5561515
+Ref: history v22-0-5561605
+Ref: 254561605
+Ref: v22 0 5-Footnote-1561792
+Node: v22 0 4561846
+Ref: history v22-0-4561936
+Ref: 255561936
+Ref: v22 0 4-Footnote-1562104
+Node: v22 0 3562158
+Ref: history v22-0-3562248
+Ref: 256562248
+Ref: v22 0 3-Footnote-1562444
+Node: v22 0 2562498
+Ref: history v22-0-2562588
+Ref: 257562588
+Ref: v22 0 2-Footnote-1562731
+Node: v22 0 1562785
+Ref: history v22-0-1562875
+Ref: 258562875
+Ref: v22 0 1-Footnote-1563102
+Node: v22 0 0563156
+Ref: history v22-0-0563246
+Ref: 259563246
+Ref: v22 0 0-Footnote-1563537
+Ref: v22 0 0-Footnote-2563591
+Node: v21 2 2563649
+Ref: history v21-2-2563739
+Ref: 25a563739
+Node: v21 2 1563822
+Ref: history v21-2-1563912
+Ref: 25b563912
+Ref: v21 2 1-Footnote-1564063
+Node: v21 2 0564117
+Ref: history v21-2-0564207
+Ref: 25c564207
+Ref: v21 2 0-Footnote-1564393
+Node: v21 1 0564447
+Ref: history v21-1-0564537
+Ref: 25d564537
+Ref: v21 1 0-Footnote-1564855
+Node: v21 0 0564909
+Ref: history v21-0-0565000
+Ref: 25e565000
+Node: v20 10 0565278
+Ref: history v20-10-0565369
+Ref: 25f565369
+Ref: v20 10 0-Footnote-1565961
+Ref: v20 10 0-Footnote-2566015
+Ref: v20 10 0-Footnote-3566069
+Ref: v20 10 0-Footnote-4566135
+Node: v20 9 0566189
+Ref: history v20-9-0566280
+Ref: 260566280
+Ref: v20 9 0-Footnote-1566482
+Ref: v20 9 0-Footnote-2566536
+Node: v20 8 1566590
+Ref: history v20-8-1566680
+Ref: 261566680
+Ref: v20 8 1-Footnote-1566877
+Node: v20 8 0566931
+Ref: history v20-8-0567021
+Ref: 262567021
+Ref: v20 8 0-Footnote-1567243
+Node: v20 7 0567297
+Ref: history v20-7-0567387
+Ref: 263567387
+Ref: v20 7 0-Footnote-1567846
+Ref: v20 7 0-Footnote-2567900
+Ref: v20 7 0-Footnote-3567954
+Node: v20 6 8568008
+Ref: history v20-6-8568098
+Ref: 264568098
+Ref: v20 6 8-Footnote-1568290
+Node: v20 6 7568344
+Ref: history v20-6-7568434
+Ref: 265568434
+Ref: v20 6 7-Footnote-1568600
+Node: v20 6 6568654
+Ref: history v20-6-6568744
+Ref: 266568744
+Ref: v20 6 6-Footnote-1568933
+Ref: v20 6 6-Footnote-2568987
+Ref: v20 6 6-Footnote-3569037
+Node: v20 6 0569103
+Ref: history v20-6-0569190
+Ref: 267569190
+Ref: v20 6 0-Footnote-1569634
+Ref: v20 6 0-Footnote-2569681
+Node: 20 5569708
+Ref: history id610569792
+Ref: 268569792
+Ref: 20 5-Footnote-1570090
+Ref: 20 5-Footnote-2570153
+Node: 20 4570207
+Ref: history id612570290
+Ref: 269570290
+Ref: 20 4-Footnote-1570812
+Ref: 20 4-Footnote-2570866
+Ref: 20 4-Footnote-3570909
+Node: 20 3 1570955
+Ref: history id613571038
+Ref: 26a571038
+Ref: 20 3 1-Footnote-1571331
+Ref: 20 3 1-Footnote-2571385
+Node: 20 3571448
+Ref: history id614571533
+Ref: 26b571533
+Ref: 20 3-Footnote-1571959
+Ref: 20 3-Footnote-2572022
+Node: 20 2 2572085
+Ref: history id616572170
+Ref: 26c572170
+Ref: 20 2 2-Footnote-1572365
+Node: 20 2 1572419
+Ref: history id617572504
+Ref: 26d572504
+Ref: 20 2 1-Footnote-1572681
+Ref: 20 2 1-Footnote-2572735
+Node: 20 2572801
+Ref: history id618572886
+Ref: 26e572886
+Ref: 20 2-Footnote-1573761
+Ref: 20 2-Footnote-2573824
+Ref: 20 2-Footnote-3573874
+Ref: 20 2-Footnote-4573924
+Ref: 20 2-Footnote-5573990
+Ref: 20 2-Footnote-6574040
+Ref: 20 2-Footnote-7574094
+Ref: 20 2-Footnote-8574157
+Ref: 20 2-Footnote-9574220
+Ref: 20 2-Footnote-10574283
+Ref: 20 2-Footnote-11574334
+Node: 20 1 1574389
+Ref: history id624574472
+Ref: 26f574472
+Node: 20 1574603
+Ref: history id625574686
+Ref: 270574686
+Ref: 20 1-Footnote-1574876
+Node: 20 0574999
+Ref: history id626575080
+Ref: 271575080
+Ref: 20 0-Footnote-1575358
+Node: 19 7575412
+Ref: history id627575495
+Ref: 272575495
+Ref: 19 7-Footnote-1575683
+Ref: 19 7-Footnote-2575775
+Ref: 19 7-Footnote-3575867
+Node: 19 6 2575959
+Ref: history id628576044
+Ref: 273576044
+Ref: 19 6 2-Footnote-1576265
+Node: 19 6 1576319
+Ref: history id629576404
+Ref: 274576404
+Ref: 19 6 1-Footnote-1576737
+Node: 19 6576791
+Ref: history id630576874
+Ref: 275576874
+Ref: 19 6-Footnote-1577682
+Node: 19 5577736
+Ref: history id631577819
+Ref: 276577819
+Ref: 19 5-Footnote-1578127
+Ref: 19 5-Footnote-2578181
+Ref: 19 5-Footnote-3578235
+Node: 19 4 1578298
+Ref: history id632578381
+Ref: 277578381
+Ref: 19 4 1-Footnote-1578607
+Node: 19 4578661
+Ref: history id634578744
+Ref: 278578744
+Ref: 19 4-Footnote-1579296
+Ref: 19 4-Footnote-2579350
+Ref: 19 4-Footnote-3579407
+Ref: 19 4-Footnote-4579461
+Ref: 19 4-Footnote-5579515
+Node: 19 3579578
+Ref: history id635579659
+Ref: 279579659
+Ref: 19 3-Footnote-1579913
+Node: 19 2579967
+Ref: history id636580050
+Ref: 27a580050
+Ref: 19 2-Footnote-1580292
+Ref: 19 2-Footnote-2580355
+Node: 19 1 1580418
+Ref: history id637580501
+Ref: 27b580501
+Ref: 19 1 1-Footnote-1580877
+Ref: 19 1 1-Footnote-2580931
+Node: 19 1580985
+Ref: history id638581068
+Ref: 27c581068
+Ref: 19 1-Footnote-1581401
+Ref: 19 1-Footnote-2581455
+Node: 19 0581509
+Ref: history id639581592
+Ref: 27d581592
+Ref: 19 0-Footnote-1581796
+Node: 18 8 1581850
+Ref: history id640581933
+Ref: 27e581933
+Ref: 18 8 1-Footnote-1582223
+Node: 18 8582277
+Ref: history id641582362
+Ref: 27f582362
+Ref: 18 8-Footnote-1582773
+Ref: 18 8-Footnote-2582827
+Ref: 18 8-Footnote-3582881
+Node: 18 7 1582935
+Ref: history id642583018
+Ref: 280583018
+Ref: 18 7 1-Footnote-1583201
+Ref: 18 7 1-Footnote-2583255
+Node: 18 7583309
+Ref: history id644583394
+Ref: 281583394
+Ref: 18 7-Footnote-1584144
+Ref: 18 7-Footnote-2584207
+Ref: 18 7-Footnote-3584270
+Ref: 18 7-Footnote-4584324
+Ref: 18 7-Footnote-5584387
+Ref: 18 7-Footnote-6584437
+Ref: 18 7-Footnote-7584491
+Node: 18 6 1584554
+Ref: history id646584637
+Ref: 282584637
+Ref: 18 6 1-Footnote-1584818
+Node: 18 6584872
+Ref: history id647584955
+Ref: 283584955
+Ref: 18 6-Footnote-1585201
+Node: 18 5585255
+Ref: history id648585336
+Ref: 284585336
+Ref: 18 5-Footnote-1585707
+Ref: 18 5-Footnote-2585799
+Node: 18 4585891
+Ref: history id649585974
+Ref: 285585974
+Ref: 18 4-Footnote-1586149
+Node: 18 3 2586203
+Ref: history id650586288
+Ref: 286586288
+Ref: 18 3 2-Footnote-1586469
+Node: 18 3 1586511
+Ref: history id651586596
+Ref: 287586596
+Ref: 18 3 1-Footnote-1586735
+Node: 18 3586789
+Ref: history id652586872
+Ref: 288586872
+Ref: 18 3-Footnote-1587762
+Ref: 18 3-Footnote-2587825
+Node: 18 2587879
+Ref: history id653587960
+Ref: 289587960
+Ref: 18 2-Footnote-1588109
+Node: 18 1588163
+Ref: history id654588246
+Ref: 28a588246
+Ref: 18 1-Footnote-1588363
+Node: 18 0 1588429
+Ref: history id655588512
+Ref: 28b588512
+Ref: 18 0 1-Footnote-1588636
+Node: 18 0588690
+Ref: history id656588775
+Ref: 28c588775
+Ref: 18 0-Footnote-1589841
+Ref: 18 0-Footnote-2589895
+Ref: 18 0-Footnote-3589949
+Node: 17 1 1590012
+Ref: history id657590095
+Ref: 28d590095
+Ref: 17 1 1-Footnote-1590283
+Node: 17 1590395
+Ref: history id658590478
+Ref: 28e590478
+Ref: 17 1-Footnote-1590642
+Node: 17 0590696
+Ref: history id659590777
+Ref: 28f590777
+Ref: 17 0-Footnote-1591085
+Ref: 17 0-Footnote-2591139
+Node: 16 0591193
+Ref: history id660591274
+Ref: 290591274
+Ref: 16 0-Footnote-1591627
+Ref: 16 0-Footnote-2591690
+Ref: 16 0-Footnote-3591753
+Node: 15 2591816
+Ref: history id661591897
+Ref: 291591897
+Ref: 15 2-Footnote-1592142
+Node: 15 1592196
+Ref: history id662592277
+Ref: 292592277
+Ref: 15 1-Footnote-1592477
+Ref: 15 1-Footnote-2592543
+Node: 15 0592595
+Ref: history id663592678
+Ref: 293592678
+Ref: 15 0-Footnote-1593278
+Ref: 15 0-Footnote-2593341
+Node: 14 3 1593397
+Ref: history id664593480
+Ref: 294593480
+Ref: 14 3 1-Footnote-1593773
+Ref: 14 3 1-Footnote-2593827
+Ref: 14 3 1-Footnote-3593877
+Node: 14 3593931
+Ref: history id666594014
+Ref: 295594014
+Ref: 14 3-Footnote-1594268
+Node: 14 2594322
+Ref: history id667594405
+Ref: 296594405
+Ref: 14 2-Footnote-1594665
+Node: 14 1 1594719
+Ref: history id668594802
+Ref: 297594802
+Ref: 14 1 1-Footnote-1595014
+Node: 14 1595068
+Ref: history id669595151
+Ref: 298595151
+Ref: 14 1-Footnote-1595336
+Node: 14 0595399
+Ref: history id670595482
+Ref: 299595482
+Ref: 14 0-Footnote-1596311
+Ref: 14 0-Footnote-2596374
+Node: 13 0 2596428
+Ref: history id671596513
+Ref: 29a596513
+Ref: 13 0 2-Footnote-1596718
+Node: 13 0 1596772
+Ref: history id672596857
+Ref: 29b596857
+Node: 13 0597037
+Ref: history id673597120
+Ref: 29c597120
+Ref: 13 0-Footnote-1597500
+Ref: 13 0-Footnote-2597554
+Node: 12 4597617
+Ref: history id674597698
+Ref: 29d597698
+Ref: 12 4-Footnote-1597904
+Node: 12 3597967
+Ref: history id676598048
+Ref: 29e598048
+Ref: 12 3-Footnote-1598369
+Node: 12 2598423
+Ref: history id677598504
+Ref: 29f598504
+Ref: 12 2-Footnote-1598956
+Ref: 12 2-Footnote-2599010
+Node: 12 1599064
+Ref: history id678599147
+Ref: 2a0599147
+Ref: 12 1-Footnote-1599315
+Node: 12 0 5599378
+Ref: history id679599463
+Ref: 2a1599463
+Ref: 12 0 5-Footnote-1599687
+Ref: 12 0 5-Footnote-2599741
+Node: 12 0 4599795
+Ref: history id681599882
+Ref: 2a2599882
+Ref: 12 0 4-Footnote-1600020
+Node: 12 0 3600074
+Ref: history id682600161
+Ref: 2a3600161
+Node: 12 0 2600292
+Ref: history id683600379
+Ref: 2a4600379
+Ref: 12 0 2-Footnote-1600559
+Node: 12 0 1600613
+Ref: history id684600698
+Ref: 2a5600698
+Node: 12 0600904
+Ref: history id685600989
+Ref: 2a6600989
+Ref: 12 0-Footnote-1601548
+Node: 11 3 1601602
+Ref: history id686601685
+Ref: 2a7601685
+Ref: 11 3 1-Footnote-1601869
+Node: 11 3601923
+Ref: history id687602006
+Ref: 2a8602006
+Node: 11 2602529
+Ref: history id688602610
+Ref: 2a9602610
+Ref: 11 2-Footnote-1602772
+Node: 11 1602820
+Ref: history id689602901
+Ref: 2aa602901
+Ref: 11 1-Footnote-1603425
+Ref: 11 1-Footnote-2603479
+Node: 11 0603533
+Ref: history id690603616
+Ref: 2ab603616
+Ref: 11 0-Footnote-1603847
+Ref: 11 0-Footnote-2603910
+Ref: 11 0-Footnote-3603976
+Node: 10 2 1604026
+Ref: history id692604109
+Ref: 2ac604109
+Ref: 10 2 1-Footnote-1604250
+Node: 10 2604304
+Ref: history id693604387
+Ref: 2ad604387
+Node: 10 1604758
+Ref: history id694604841
+Ref: 2ae604841
+Ref: 10 1-Footnote-1605119
+Node: 10 0 1605173
+Ref: history id695605256
+Ref: 2af605256
+Ref: 10 0 1-Footnote-1605401
+Node: 10 0605455
+Ref: history id696605537
+Ref: 2b0605537
+Ref: 10 0-Footnote-1606091
+Ref: 10 0-Footnote-2606145
+Ref: 10 0-Footnote-3606194
+Node: 9 1606248
+Ref: history id697606329
+Ref: 2b1606329
+Ref: 9 1-Footnote-1606458
+Node: 9 0 1606550
+Ref: history id698606630
+Ref: 2b2606630
+Ref: 9 0 1-Footnote-1606795
+Node: 9 0606849
+Ref: history id699606929
+Ref: 2b3606929
+Ref: 9 0-Footnote-1607158
+Node: 8 4607212
+Ref: history id700607290
+Ref: 2b4607290
+Ref: 8 4-Footnote-1607432
+Node: 8 3607495
+Ref: history id701607575
+Ref: 2b5607575
+Ref: 8 3-Footnote-1607781
+Node: 8 2 1607835
+Ref: history id702607915
+Ref: 2b6607915
+Ref: 8 2 1-Footnote-1608105
+Node: 8 2608159
+Ref: history id703608239
+Ref: 2b7608239
+Ref: 8 2-Footnote-1608394
+Node: 8 1608456
+Ref: history id704608536
+Ref: 2b8608536
+Ref: 8 1-Footnote-1608902
+Node: 8 0 4608952
+Ref: history id706609034
+Ref: 2b9609034
+Ref: 8 0 4-Footnote-1609495
+Node: 8 0 3609549
+Ref: history id707609633
+Ref: 2ba609633
+Ref: 8 0 3-Footnote-1609795
+Node: 8 0 2609849
+Ref: history id709609933
+Ref: 2bb609933
+Ref: 8 0 2-Footnote-1610117
+Node: 8 0 1610171
+Ref: history id711610253
+Ref: 2bc610253
+Ref: 8 0 1-Footnote-1610487
+Node: 8 0610541
+Ref: history id713610621
+Ref: 2bd610621
+Ref: 8 0-Footnote-1611092
+Ref: 8 0-Footnote-2611142
+Ref: 8 0-Footnote-3611277
+Node: 7 0611319
+Ref: history id715611397
+Ref: 2be611397
+Ref: 7 0-Footnote-1612340
+Ref: 7 0-Footnote-2612393
+Ref: 7 0-Footnote-3612447
+Node: 6 1612501
+Ref: history id717612581
+Ref: 2bf612581
+Ref: 6 1-Footnote-1612804
+Node: 6 0 2612858
+Ref: history id719612940
+Ref: 2c0612940
+Ref: 6 0 2-Footnote-1613140
+Ref: 6 0 2-Footnote-2613194
+Node: 6 0 1613248
+Ref: history id721613330
+Ref: 2c1613330
+Ref: 6 0 1-Footnote-1613533
+Node: 6 0613587
+Ref: history id722613667
+Ref: 2c2613667
+Ref: 6 0-Footnote-1615185
+Ref: 6 0-Footnote-2615239
+Ref: 6 0-Footnote-3615301
+Ref: 6 0-Footnote-4615363
+Ref: 6 0-Footnote-5615425
+Ref: 6 0-Footnote-6615479
+Node: 5 8615533
+Ref: history id724615611
+Ref: 2c3615611
+Ref: 5 8-Footnote-1615886
+Node: 5 7615940
+Ref: history id725616018
+Ref: 2c4616018
+Ref: 5 7-Footnote-1616549
+Ref: 5 7-Footnote-2616603
+Node: 5 6616657
+Ref: history id726616737
+Ref: 2c5616737
+Ref: 5 6-Footnote-1616941
+Node: 5 5 1616995
+Ref: history id727617075
+Ref: 2c6617075
+Ref: 5 5 1-Footnote-1617214
+Node: 5 5617268
+Ref: history id728617350
+Ref: 2c7617350
+Ref: 5 5-Footnote-1617610
+Node: 5 4 2617664
+Ref: history id730617746
+Ref: 2c8617746
+Ref: 5 4 2-Footnote-1617910
+Node: 5 4 1617964
+Ref: history id731618046
+Ref: 2c9618046
+Ref: 5 4 1-Footnote-1618225
+Node: 5 4618266
+Ref: history id732618346
+Ref: 2ca618346
+Ref: 5 4-Footnote-1618898
+Node: 5 3618952
+Ref: history id734619030
+Ref: 2cb619030
+Ref: 5 3-Footnote-1619295
+Node: 5 2619349
+Ref: history id735619427
+Ref: 2cc619427
+Ref: 5 2-Footnote-1619782
+Node: 5 1619855
+Ref: history id736619935
+Ref: 2cd619935
+Ref: 5 1-Footnote-1620185
+Ref: 5 1-Footnote-2620239
+Node: 5 0 2620293
+Ref: history id737620375
+Ref: 2ce620375
+Ref: 5 0 2-Footnote-1620497
+Node: 5 0 1620551
+Ref: history id738620633
+Ref: 2cf620633
+Node: 5 0620836
+Ref: history id739620938
+Ref: 2d0620938
+Ref: 5 0-Footnote-1621185
+Node: 3 7 1 and 3 8 1 and 4 0 1621239
+Ref: history and-3-8-1-and-4-0-1621339
+Ref: 2d1621339
+Ref: 3 7 1 and 3 8 1 and 4 0 1-Footnote-1621645
+Ref: 3 7 1 and 3 8 1 and 4 0 1-Footnote-2621699
+Node: 4 0621753
+Ref: history id741621853
+Ref: 2d2621853
+Ref: 4 0-Footnote-1622086
+Node: 3 8622140
+Ref: history id742622218
+Ref: 2d3622218
+Ref: 3 8-Footnote-1622380
+Node: 3 7622434
+Ref: history id743622512
+Ref: 2d4622512
+Ref: 3 7-Footnote-1622672
+Node: 3 6622726
+Ref: history id744622806
+Ref: 2d5622806
+Ref: 3 6-Footnote-1622975
+Node: 3 5 2623029
+Ref: history id745623111
+Ref: 2d6623111
+Ref: 3 5 2-Footnote-1623343
+Node: 3 5 1623397
+Ref: history id747623479
+Ref: 2d7623479
+Ref: 3 5 1-Footnote-1623658
+Node: 3 5623712
+Ref: history id748623794
+Ref: 2d8623794
+Ref: 3 5-Footnote-1624280
+Ref: 3 5-Footnote-2624334
+Ref: 3 5-Footnote-3624388
+Node: 3 4 4624442
+Ref: history id750624524
+Ref: 2d9624524
+Ref: 3 4 4-Footnote-1624731
+Node: 3 4 3624785
+Ref: history id751624869
+Ref: 2da624869
+Ref: 3 4 3-Footnote-1625005
+Node: 3 4 2625059
+Ref: history id752625143
+Ref: 2db625143
+Ref: 3 4 2-Footnote-1625300
+Node: 3 4 1625354
+Ref: history id754625436
+Ref: 2dc625436
+Ref: 3 4 1-Footnote-1625600
+Node: 3 4625654
+Ref: history id755625734
+Ref: 2dd625734
+Ref: 3 4-Footnote-1626168
+Ref: 3 4-Footnote-2626222
+Node: 3 3626276
+Ref: history id756626354
+Ref: 2de626354
+Node: 3 2626459
+Ref: history id757626537
+Ref: 2df626537
+Ref: 3 2-Footnote-1626823
+Ref: 3 2-Footnote-2626885
+Ref: 3 2-Footnote-3626939
+Node: 3 1626993
+Ref: history id758627073
+Ref: 2e0627073
+Ref: 3 1-Footnote-1627314
+Node: 3 0 2627368
+Ref: history id759627450
+Ref: 2e1627450
+Node: 3 0 1627527
+Ref: history id760627609
+Ref: 2e2627609
+Ref: 3 0 1-Footnote-1627841
+Node: 3 0627895
+Ref: history id761627975
+Ref: 2e3627975
+Ref: 3 0-Footnote-1629765
+Ref: 3 0-Footnote-2629819
+Ref: 3 0-Footnote-3629872
+Ref: 3 0-Footnote-4629926
+Ref: 3 0-Footnote-5629978
+Ref: 3 0-Footnote-6630031
+Ref: 3 0-Footnote-7630093
+Node: 2 2630147
+Ref: history id762630227
+Ref: 2e4630227
+Ref: 2 2-Footnote-1630583
+Ref: 2 2-Footnote-2630637
+Node: 2 1 2630691
+Ref: history id764630773
+Ref: 2e5630773
+Ref: 2 1 2-Footnote-1630967
+Node: 2 1 1631021
+Ref: history id765631103
+Ref: 2e6631103
+Ref: 2 1 1-Footnote-1631276
+Node: 2 1631330
+Ref: history id767631412
+Ref: 2e7631412
+Ref: 2 1-Footnote-1631670
+Ref: 2 1-Footnote-2631724
+Node: 2 0 2631778
+Ref: history id768631860
+Ref: 2e8631860
+Node: 2 0 1632061
+Ref: history id769632143
+Ref: 2e9632143
+Ref: 2 0 1-Footnote-1632284
+Node: 2 0632338
+Ref: history id770632420
+Ref: 2ea632420
+Ref: 2 0-Footnote-1633030
+Ref: 2 0-Footnote-2633084
+Node: 1 4 2633137
+Ref: history id771633219
+Ref: 2eb633219
+Ref: 1 4 2-Footnote-1633385
+Node: 1 4 1633439
+Ref: history id772633521
+Ref: 2ec633521
+Ref: 1 4 1-Footnote-1635078
+Ref: 1 4 1-Footnote-2635132
+Ref: 1 4 1-Footnote-3635186
+Node: 1 4635240
+Ref: history id773635322
+Ref: 2ed635322
+Ref: 1 4-Footnote-1635680
+Ref: 1 4-Footnote-2635733
+Node: 1 3 2635795
+Ref: history id774635877
+Ref: 2ee635877
+Ref: 1 3 2-Footnote-1636016
+Node: 1 3 1636069
+Ref: history id775636151
+Ref: 2ef636151
+Node: 1 3636257
+Ref: history id776636337
+Ref: 2f0636337
+Ref: 1 3-Footnote-1636674
+Ref: 1 3-Footnote-2636716
+Node: 1 2636779
+Ref: history id777636859
+Ref: 2f1636859
+Ref: 1 2-Footnote-1637442
+Ref: 1 2-Footnote-2637495
+Ref: 1 2-Footnote-3637548
+Node: 1 1 7637602
+Ref: history id778637684
+Ref: 2f2637684
+Ref: 1 1 7-Footnote-1638096
+Ref: 1 1 7-Footnote-2638153
+Node: 1 1 6638206
+Ref: history id779638290
+Ref: 2f3638290
+Ref: 1 1 6-Footnote-1638507
+Node: 1 1 5638564
+Ref: history id780638648
+Ref: 2f4638648
+Ref: 1 1 5-Footnote-1638786
+Node: 1 1 4638839
+Ref: history id781638923
+Ref: 2f5638923
+Ref: 1 1 4-Footnote-1639059
+Node: 1 1 3639112
+Ref: history id782639196
+Ref: 2f6639196
+Node: 1 1 2639273
+Ref: history id783639357
+Ref: 2f7639357
+Ref: 1 1 2-Footnote-1639549
+Node: 1 1 1639602
+Ref: history id785639684
+Ref: 2f8639684
+Ref: 1 1 1-Footnote-1639980
+Ref: 1 1 1-Footnote-2640033
+Node: 1 1640086
+Ref: history id786640166
+Ref: 2f9640166
+Ref: 1 1-Footnote-1640463
+Ref: 1 1-Footnote-2640516
+Ref: 1 1-Footnote-3640573
+Node: 1 0640626
+Ref: history id787640706
+Ref: 2fa640706
+Ref: 1 0-Footnote-1641904
+Ref: 1 0-Footnote-2641957
+Ref: 1 0-Footnote-3642003
+Ref: 1 0-Footnote-4642056
+Ref: 1 0-Footnote-5642109
+Node: Backward-Incompatible Changes642162
+Ref: history backward-incompatible-changes642235
+Ref: 2fb642235
+Ref: Backward-Incompatible Changes-Footnote-1643158
+Ref: Backward-Incompatible Changes-Footnote-2643211
+Node: 0 9 8643264
+Ref: history id790643346
+Ref: 2fc643346
+Ref: 0 9 8-Footnote-1643489
+Node: 0 9 7643542
+Ref: history id791643626
+Ref: 2fd643626
+Ref: 0 9 7-Footnote-1644008
+Ref: 0 9 7-Footnote-2644061
+Node: 0 9 6644114
+Ref: history id792644198
+Ref: 2fe644198
+Ref: 0 9 6-Footnote-1644378
+Node: 0 9 5644431
+Ref: history id793644515
+Ref: 2ff644515
+Ref: 0 9 5-Footnote-1644676
+Node: 0 9 4644718
+Ref: history id794644802
+Ref: 300644802
+Ref: 0 9 4-Footnote-1645007
+Node: 0 9 3645060
+Ref: history id795645144
+Ref: 301645144
+Ref: 0 9 3-Footnote-1645291
+Node: 0 9 2645344
+Ref: history id796645428
+Ref: 302645428
+Ref: 0 9 2-Footnote-1645603
+Node: 0 9 1645656
+Ref: history id798645738
+Ref: 303645738
+Ref: 0 9 1-Footnote-1645961
+Node: 0 9646018
+Ref: history id799646098
+Ref: 304646098
+Node: 0 8646218
+Ref: history id800646298
+Ref: 305646298
+Node: 0 7 8646421
+Ref: history id801646503
+Ref: 306646503
+Ref: 0 7 8-Footnote-1646647
+Node: 0 7 7646704
+Ref: history id802646788
+Ref: 307646788
+Ref: 0 7 7-Footnote-1646998
+Ref: 0 7 7-Footnote-2647055
+Node: 0 7 6647108
+Ref: history id804647192
+Ref: 308647192
+Ref: 0 7 6-Footnote-1647339
+Node: 0 7 5647396
+Ref: history id806647480
+Ref: 309647480
+Ref: 0 7 5-Footnote-1647922
+Ref: 0 7 5-Footnote-2647975
+Node: 0 7 4648032
+Ref: history id808648116
+Ref: 30a648116
+Ref: 0 7 4-Footnote-1648260
+Node: 0 7 3648313
+Ref: history id809648397
+Ref: 30b648397
+Ref: 0 7 3-Footnote-1648623
+Node: 0 7 2648675
+Ref: history id810648759
+Ref: 30c648759
+Ref: 0 7 2-Footnote-1649011
+Ref: 0 7 2-Footnote-2649064
+Node: 0 7 1649117
+Ref: history id811649199
+Ref: 30d649199
+Ref: 0 7 1-Footnote-1649336
+Node: 0 7649388
+Ref: history id812649470
+Ref: 30e649470
+Ref: 0 7-Footnote-1650291
+Node: 0 7b4650341
+Ref: history b4650424
+Ref: 30f650424
+Ref: 0 7b4-Footnote-1650536
+Node: 0 6 49650588
+Ref: history id815650674
+Ref: 310650674
+Ref: 0 6 49-Footnote-1650946
+Node: 0 6 48651003
+Ref: history id817651090
+Ref: 311651090
+Node: 0 6 47651233
+Ref: history id818651320
+Ref: 312651320
+Node: 0 6 46651456
+Ref: history id819651543
+Ref: 313651543
+Ref: 0 6 46-Footnote-1651795
+Node: 0 6 45651852
+Ref: history id821651939
+Ref: 314651939
+Ref: 0 6 45-Footnote-1652175
+Node: 0 6 44652232
+Ref: history id822652319
+Ref: 315652319
+Node: 0 6 43652464
+Ref: history id823652551
+Ref: 316652551
+Ref: 0 6 43-Footnote-1652720
+Node: 0 6 42652777
+Ref: history id824652864
+Ref: 317652864
+Ref: 0 6 42-Footnote-1653154
+Ref: 0 6 42-Footnote-2653211
+Node: 0 6 41653264
+Ref: history id826653351
+Ref: 318653351
+Ref: 0 6 41-Footnote-1653736
+Node: 0 6 40653792
+Ref: history id827653879
+Ref: 319653879
+Ref: 0 6 40-Footnote-1654062
+Node: 0 6 39654119
+Ref: history id828654206
+Ref: 31a654206
+Ref: 0 6 39-Footnote-1654702
+Node: 0 6 38654759
+Ref: history id830654846
+Ref: 31b654846
+Ref: 0 6 38-Footnote-1655007
+Node: 0 6 37655064
+Ref: history id831655151
+Ref: 31c655151
+Ref: 0 6 37-Footnote-1655501
+Ref: 0 6 37-Footnote-2655558
+Node: 0 6 36655635
+Ref: history id832655722
+Ref: 31d655722
+Ref: 0 6 36-Footnote-1656127
+Ref: 0 6 36-Footnote-2656189
+Node: 0 6 35656244
+Ref: history id833656331
+Ref: 31e656331
+Ref: 0 6 35-Footnote-1656722
+Node: 0 6 34656779
+Ref: history id834656866
+Ref: 31f656866
+Ref: 0 6 34-Footnote-1657008
+Node: 0 6 33657065
+Ref: history id835657152
+Ref: 320657152
+Ref: 0 6 33-Footnote-1657693
+Ref: 0 6 33-Footnote-2657750
+Node: 0 6 32657807
+Ref: history id837657894
+Ref: 321657894
+Ref: 0 6 32-Footnote-1658198
+Node: 0 6 31658255
+Ref: history id838658342
+Ref: 322658342
+Ref: 0 6 31-Footnote-1659665
+Ref: 0 6 31-Footnote-2659722
+Ref: 0 6 31-Footnote-3659779
+Ref: 0 6 31-Footnote-4659820
+Ref: 0 6 31-Footnote-5659861
+Ref: 0 6 31-Footnote-6659918
+Ref: 0 6 31-Footnote-7659972
+Node: 0 6 30660029
+Ref: history id840660116
+Ref: 323660116
+Ref: 0 6 30-Footnote-1660322
+Node: 0 6 29660379
+Ref: history id841660466
+Ref: 324660466
+Ref: 0 6 29-Footnote-1662658
+Ref: 0 6 29-Footnote-2662720
+Ref: 0 6 29-Footnote-3662777
+Ref: 0 6 29-Footnote-4662830
+Ref: 0 6 29-Footnote-5662883
+Ref: 0 6 29-Footnote-6662940
+Ref: 0 6 29-Footnote-7662997
+Ref: 0 6 29-Footnote-8663054
+Ref: 0 6 29-Footnote-9663111
+Ref: 0 6 29-Footnote-10663168
+Ref: 0 6 29-Footnote-11663226
+Ref: 0 6 29-Footnote-12663284
+Ref: 0 6 29-Footnote-13663342
+Ref: 0 6 29-Footnote-14663400
+Ref: 0 6 29-Footnote-15663458
+Ref: 0 6 29-Footnote-16663516
+Ref: 0 6 29-Footnote-17663574
+Ref: 0 6 29-Footnote-18663632
+Ref: 0 6 29-Footnote-19663690
+Node: 0 6 28663748
+Ref: history id845663835
+Ref: 325663835
+Ref: 0 6 28-Footnote-1664191
+Ref: 0 6 28-Footnote-2664248
+Node: 0 6 27664305
+Ref: history id847664392
+Ref: 326664392
+Ref: 0 6 27-Footnote-1664811
+Ref: 0 6 27-Footnote-2664865
+Node: 0 6 26664922
+Ref: history id849665009
+Ref: 327665009
+Ref: 0 6 26-Footnote-1665410
+Ref: 0 6 26-Footnote-2665467
+Node: 0 6 25665524
+Ref: history id850665611
+Ref: 328665611
+Ref: 0 6 25-Footnote-1666330
+Ref: 0 6 25-Footnote-2666387
+Ref: 0 6 25-Footnote-3666444
+Ref: 0 6 25-Footnote-4666501
+Ref: 0 6 25-Footnote-5666558
+Ref: 0 6 25-Footnote-6666615
+Node: 0 6 24666672
+Ref: history id851666759
+Ref: 329666759
+Ref: 0 6 24-Footnote-1666898
+Node: 0 6 23666955
+Ref: history id852667042
+Ref: 32a667042
+Ref: 0 6 23-Footnote-1667811
+Ref: 0 6 23-Footnote-2667868
+Ref: 0 6 23-Footnote-3667925
+Ref: 0 6 23-Footnote-4667982
+Ref: 0 6 23-Footnote-5668039
+Ref: 0 6 23-Footnote-6668096
+Ref: 0 6 23-Footnote-7668153
+Ref: 0 6 23-Footnote-8668210
+Ref: 0 6 23-Footnote-9668267
+Ref: 0 6 23-Footnote-10668324
+Ref: 0 6 23-Footnote-11668382
+Node: 0 6 21668440
+Ref: history id854668527
+Ref: 32b668527
+Ref: 0 6 21-Footnote-1668657
+Node: 0 6 20668714
+Ref: history id856668801
+Ref: 32c668801
+Ref: 0 6 20-Footnote-1669122
+Ref: 0 6 20-Footnote-2669179
+Ref: 0 6 20-Footnote-3669236
+Node: 0 6 19669293
+Ref: history id857669380
+Ref: 32d669380
+Ref: 0 6 19-Footnote-1669562
+Node: 0 6 18669619
+Ref: history id858669706
+Ref: 32e669706
+Ref: 0 6 18-Footnote-1669870
+Ref: 0 6 18-Footnote-2669927
+Node: 0 6 17669984
+Ref: history id859670071
+Ref: 32f670071
+Ref: 0 6 17-Footnote-1670661
+Ref: 0 6 17-Footnote-2670718
+Ref: 0 6 17-Footnote-3670775
+Node: 0 6 16670832
+Ref: history id861670919
+Ref: 330670919
+Ref: 0 6 16-Footnote-1671310
+Ref: 0 6 16-Footnote-2671367
+Ref: 0 6 16-Footnote-3671424
+Ref: 0 6 16-Footnote-4671481
+Node: 0 6 15671538
+Ref: history id862671625
+Ref: 331671625
+Ref: 0 6 15-Footnote-1671882
+Node: 0 6 14671939
+Ref: history id863672026
+Ref: 332672026
+Ref: 0 6 14-Footnote-1672454
+Ref: 0 6 14-Footnote-2672511
+Ref: 0 6 14-Footnote-3672568
+Ref: 0 6 14-Footnote-4672625
+Node: 0 6 13672682
+Ref: history id865672769
+Ref: 333672769
+Ref: 0 6 13-Footnote-1673137
+Ref: 0 6 13-Footnote-2673194
+Ref: 0 6 13-Footnote-3673251
+Node: 0 6 12673308
+Ref: history id866673395
+Ref: 334673395
+Ref: 0 6 12-Footnote-1673531
+Node: 0 6 11673588
+Ref: history id867673675
+Ref: 335673675
+Ref: 0 6 11-Footnote-1674633
+Ref: 0 6 11-Footnote-2674689
+Ref: 0 6 11-Footnote-3674745
+Ref: 0 6 11-Footnote-4674802
+Ref: 0 6 11-Footnote-5674859
+Ref: 0 6 11-Footnote-6674916
+Ref: 0 6 11-Footnote-7674973
+Ref: 0 6 11-Footnote-8675030
+Ref: 0 6 11-Footnote-9675087
+Ref: 0 6 11-Footnote-10675144
+Node: 0 6 10675202
+Ref: history id868675288
+Ref: 336675288
+Node: 0 6 9675488
+Ref: history id869675573
+Ref: 337675573
+Ref: 0 6 9-Footnote-1677104
+Ref: 0 6 9-Footnote-2677160
+Ref: 0 6 9-Footnote-3677216
+Ref: 0 6 9-Footnote-4677272
+Ref: 0 6 9-Footnote-5677328
+Ref: 0 6 9-Footnote-6677384
+Ref: 0 6 9-Footnote-7677440
+Ref: 0 6 9-Footnote-8677496
+Ref: 0 6 9-Footnote-9677552
+Ref: 0 6 9-Footnote-10677609
+Ref: 0 6 9-Footnote-11677666
+Ref: 0 6 9-Footnote-12677724
+Ref: 0 6 9-Footnote-13677782
+Node: 0 6 8677840
+Ref: history id871677924
+Ref: 338677924
+Node: 0 6 7678079
+Ref: history id872678163
+Ref: 339678163
+Ref: 0 6 7-Footnote-1679567
+Ref: 0 6 7-Footnote-2679623
+Ref: 0 6 7-Footnote-3679679
+Ref: 0 6 7-Footnote-4679735
+Ref: 0 6 7-Footnote-5679791
+Ref: 0 6 7-Footnote-6679847
+Node: 0 6 6679903
+Ref: history id873679987
+Ref: 33a679987
+Node: 0 6 5680136
+Ref: history id874680220
+Ref: 33b680220
+Ref: 0 6 5-Footnote-1680900
+Ref: 0 6 5-Footnote-2680956
+Ref: 0 6 5-Footnote-3681012
+Ref: 0 6 5-Footnote-4681062
+Node: 0 6 4681112
+Ref: history id875681196
+Ref: 33c681196
+Ref: 0 6 4-Footnote-1681608
+Ref: 0 6 4-Footnote-2681664
+Node: 0 6 3681720
+Ref: history id876681804
+Ref: 33d681804
+Node: setuptools681885
+Ref: history setuptools681963
+Ref: 33e681963
+Node: bootstrapping682074
+Ref: history bootstrapping682152
+Ref: 33f682152
+Node: 0 6 2682269
+Ref: history id877682353
+Ref: 340682353
+Node: setuptools<2>682465
+Ref: history id878682549
+Ref: 341682549
+Ref: setuptools<2>-Footnote-1683115
+Ref: setuptools<2>-Footnote-2683165
+Ref: setuptools<2>-Footnote-3683221
+Ref: setuptools<2>-Footnote-4683271
+Ref: setuptools<2>-Footnote-5683320
+Node: bootstrapping<2>683370
+Ref: history id879683454
+Ref: 342683454
+Ref: bootstrapping<2>-Footnote-1683804
+Ref: bootstrapping<2>-Footnote-2683860
+Ref: bootstrapping<2>-Footnote-3683916
+Node: 0 6 1683966
+Ref: history id880684048
+Ref: 343684048
+Node: setuptools<3>684160
+Ref: history id881684244
+Ref: 344684244
+Ref: setuptools<3>-Footnote-1684831
+Ref: setuptools<3>-Footnote-2684887
+Ref: setuptools<3>-Footnote-3684943
+Ref: setuptools<3>-Footnote-4684993
+Ref: setuptools<3>-Footnote-5685043
+Node: bootstrapping<3>685099
+Ref: history id882685183
+Ref: 345685183
+Ref: bootstrapping<3>-Footnote-1685453
+Node: 0 6685509
+Ref: history id883685591
+Ref: 346685591
+Node: setuptools<4>685699
+Ref: history id884685778
+Ref: 347685778
+Ref: setuptools<4>-Footnote-1686417
+Ref: setuptools<4>-Footnote-2686473
+Ref: setuptools<4>-Footnote-3686529
+Ref: setuptools<4>-Footnote-4686584
+Ref: setuptools<4>-Footnote-5686639
+Ref: setuptools<4>-Footnote-6686694
+Node: pkg_resources686749
+Ref: history pkg-resources686849
+Ref: 348686849
+Ref: pkg_resources-Footnote-1687509
+Ref: pkg_resources-Footnote-2687561
+Ref: pkg_resources-Footnote-3687617
+Ref: pkg_resources-Footnote-4687672
+Ref: pkg_resources-Footnote-5687727
+Node: easy_install687782
+Ref: history easy-install687860
+Ref: 349687860
+Ref: easy_install-Footnote-1688012
+Node: 0 6c9688067
+Ref: history c9688149
+Ref: 34a688149
+Node: 0 6c7691270
+Ref: history c7691354
+Ref: 34b691354
+Node: 0 6c6692024
+Ref: history c6692108
+Ref: 34c692108
+Node: 0 6c5693672
+Ref: history c5693756
+Ref: 34d693756
+Node: 0 6c4694230
+Ref: history c4694314
+Ref: 34e694314
+Node: 0 6c3696864
+Ref: history c3696948
+Ref: 34f696948
+Node: 0 6c2697218
+Ref: history c2697302
+Ref: 350697302
+Node: 0 6c1698423
+Ref: history c1698507
+Ref: 351698507
+Node: 0 6b4699742
+Ref: history id889699826
+Ref: 352699826
+Node: 0 6b3701372
+Ref: history b3701456
+Ref: 353701456
+Node: 0 6b2702307
+Ref: history b2702391
+Ref: 354702391
+Node: 0 6b1702899
+Ref: history b1702984
+Ref: 355702984
+Node: 0 6a11704131
+Ref: history a11704217
+Ref: 356704217
+Node: 0 6a10706884
+Ref: history a10706970
+Ref: 357706970
+Node: 0 6a9709771
+Ref: history a9709856
+Ref: 358709856
+Node: 0 6a8713618
+Ref: history a8713702
+Ref: 359713702
+Node: 0 6a7715945
+Ref: history a7716029
+Ref: 35a716029
+Node: 0 6a6716148
+Ref: history a6716232
+Ref: 35b716232
+Node: 0 6a5717371
+Ref: history a5717455
+Ref: 35c717455
+Node: 0 6a3717573
+Ref: history a3717657
+Ref: 35d717657
+Node: 0 6a2718537
+Ref: history a2718621
+Ref: 35e718621
+Node: 0 6a1719514
+Ref: history a1719599
+Ref: 35f719599
+Ref: 0 6a1-Footnote-1724998
+Node: 0 5a12725097
+Ref: history a12725183
+Ref: 360725183
+Node: 0 5a11725778
+Ref: history id890725865
+Ref: 361725865
+Node: 0 5a10726046
+Ref: history id891726132
+Ref: 362726132
+Node: 0 5a9726390
+Ref: history id892726475
+Ref: 363726475
+Node: 0 5a8729999
+Ref: history id893730083
+Ref: 364730083
+Node: 0 5a7731866
+Ref: history id894731950
+Ref: 365731950
+Node: 0 5a6732165
+Ref: history id895732249
+Ref: 366732249
+Node: 0 5a5733234
+Ref: history id896733318
+Ref: 367733318
+Node: 0 5a4734902
+Ref: history a4734986
+Ref: 368734986
+Node: 0 5a3737029
+Ref: history id897737113
+Ref: 369737113
+Node: 0 5a2737359
+Ref: history id898737443
+Ref: 36a737443
+Node: 0 5a1737539
+Ref: history id899737623
+Ref: 36b737623
+Node: 0 4a4738466
+Ref: history id900738550
+Ref: 36c738550
+Node: 0 4a3738878
+Ref: history id901738962
+Ref: 36d738962
+Node: 0 4a2739321
+Ref: history id902739405
+Ref: 36e739405
+Node: 0 4a1741512
+Ref: history id903741596
+Ref: 36f741596
+Node: 0 3a4741756
+Ref: history id904741840
+Ref: 370741840
+Node: 0 3a3742016
+Ref: history id905742100
+Ref: 371742100
+Node: 0 3a2742702
+Ref: history id906742786
+Ref: 372742786
+Node: 0 3a1743289
+Ref: history id907743359
+Ref: 373743359
+Node: Credits743412
+Ref: history credits743496
+Ref: 374743496
+Node: Index745380
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End: