128 lines
5.7 KiB
ReStructuredText
128 lines
5.7 KiB
ReStructuredText
PEP: 477
|
|
Title: Backport ensurepip (PEP 453) to Python 2.7
|
|
Author: Donald Stufft <donald@stufft.io>,
|
|
Alyssa Coghlan <ncoghlan@gmail.com>
|
|
BDFL-Delegate: Benjamin Peterson <benjamin@python.org>
|
|
Status: Final
|
|
Type: Standards Track
|
|
Content-Type: text/x-rst
|
|
Created: 26-Aug-2014
|
|
Post-History: 01-Sep-2014
|
|
Resolution: https://mail.python.org/pipermail/python-dev/2014-September/136238.html
|
|
|
|
|
|
Abstract
|
|
========
|
|
|
|
This PEP proposes that the ``ensurepip`` module, added to Python 3.4 by PEP
|
|
453, be backported to Python 2.7. It also proposes that automatic invocation
|
|
of ``ensurepip`` be added to the Python 2.7 Windows and OSX installers. However
|
|
it does **not** propose that automatic invocation be added to the ``Makefile``.
|
|
|
|
It also proposes that the documentation changes for the package distribution
|
|
and installation guides be updated to match that in 3.4, which references using
|
|
the ``ensurepip`` module to bootstrap the installer.
|
|
|
|
|
|
Rationale
|
|
=========
|
|
|
|
Python 2.7 is effectively a LTS release of Python which represents the end of
|
|
the 2.x series and there is still a very large contingent of users whom are
|
|
still using Python 2.7 as their primary version. These users, in order to
|
|
participate in the wider Python ecosystem, must manually attempt to go out and
|
|
find the correct way to bootstrap the packaging tools.
|
|
|
|
It is the opinion of this PEP that making it as easy as possible for end users
|
|
to participate in the wider Python ecosystem is important for 3 primary
|
|
reasons:
|
|
|
|
1. The Python 2.x to 3.x migration has a number of painpoints that are eased by
|
|
a number of third party modules such as six [#six]_, modernize [#modernize]_,
|
|
or future [#future]_. However relying on these tools requires that everyone
|
|
who uses the project have a tool to install these packages.
|
|
2. In addition to tooling to aid in migration from Python 2.x to 3.x, there are
|
|
also a number of modules that are *new* in Python 3 for which there are
|
|
backports available on PyPI. This can also aid in the ability for people
|
|
to write 2.x and 3.x compatible software as well as enable them to use some
|
|
of the newer features of Python 3 on Python 2.
|
|
3. Users also will need a number of tools in order to create python packages
|
|
that conform to the newer standards that are being proposed. Things like
|
|
setuptools [#setuptools]_, Wheel [#wheel]_, and twine [#twine]_ are enabling
|
|
a safer, faster, and more reliable packaging tool chain. These tools can be
|
|
difficult for people to use if first they must be told how to go out and
|
|
install the package manager.
|
|
4. One of Pythons biggest strengths is in the huge ecosystem of libraries and
|
|
projects that have been built on top of it, most of which are distributed
|
|
through PyPI. However, in order to benefit from this wide ecosystem
|
|
meaningfully requires end users, some of which are going to be new, to make
|
|
a decision on which package manager they should get, how to get it, and then
|
|
finally actually installing it first.
|
|
|
|
Furthermore, alternative implementations of Python are recognizing the benefits
|
|
of :pep:`453` and both PyPy and Jython have plans to backport ensurepip to their
|
|
2.7 runtimes.
|
|
|
|
|
|
Automatic Invocation
|
|
====================
|
|
|
|
:pep:`453` has ``ensurepip`` automatically invoked by default in the ``Makefile``
|
|
and the Windows and OSX Installers. This allowed it to ensure that, by default,
|
|
all users would get Python with pip already installed. This PEP however
|
|
believes that while this is fine for the Python 2.7 Windows and Mac OS X
|
|
installers it is *not* ok for the Python 2.7 ``Makefile`` in general.
|
|
|
|
The primary consumers of the ``Makefile`` are downstream package managers which
|
|
distribute Python themselves. These downstream distributors typically do not
|
|
want pip to be installed via ``ensurepip`` and would prefer that end users
|
|
install it with their own package manager. Not invoking ``ensurepip``
|
|
automatically from the ``Makefile`` would allow these distributors to simply
|
|
ignore the fact that ``ensurepip`` has been backported and still not end up
|
|
with pip installed via it.
|
|
|
|
The primary consumers of the OSX and Windows installers are end users who are
|
|
attempting to install Python on their own machine. There is not a package
|
|
manager available where these users can install pip into their Python through
|
|
a more supported mechanism. For this reason it is the belief of this PEP that
|
|
installing by default on OSX and Windows is the best course of action.
|
|
|
|
|
|
Documentation
|
|
=============
|
|
|
|
As part of this PEP, the updated packaging distribution and installation
|
|
guides for Python 3.4 would be backported to Python 2.7.
|
|
|
|
|
|
Disabling ensurepip by Downstream Distributors
|
|
==============================================
|
|
|
|
Due to its use in the ``venv`` module, downstream distributors cannot disable
|
|
the ``ensurepip`` module in Python 3.4. However, since Python 2.7 has no such
|
|
module it is explicitly allowed for downstream distributors to patch the
|
|
``ensurepip`` module to prevent it from installing anything.
|
|
|
|
If a downstream distributor wishes to disable ``ensurepip`` completely in
|
|
Python 2.7, they should still at least provide the module and allow
|
|
``python -m ensurepip`` style invocation. However it should raise errors or
|
|
otherwise exit with a non-zero exit code and print out an error on stderr
|
|
directing users to what they can/should use instead of ``ensurepip``.
|
|
|
|
|
|
References
|
|
==========
|
|
|
|
.. [#six] `six.py <https://pypi.python.org/pypi/six>`__
|
|
.. [#modernize] `modernize <https://pypi.python.org/pypi/modernize>`__
|
|
.. [#future] `python-future <https://pypi.python.org/pypi/future>`__
|
|
.. [#setuptools] `setuptools <https://pypi.python.org/pypi/setuptools>`__
|
|
.. [#wheel] `Wheel <https://pypi.python.org/pypi/wheel>`__
|
|
.. [#twine] `twine <https://pypi.python.org/pypi/twine>`__
|
|
|
|
|
|
Copyright
|
|
=========
|
|
|
|
This document has been placed in the public domain.
|