remove setuptools note; setuptools will now be installed

mention bootstrapping target and command-line options
mention python 2.6+ bootstrap possibility
This commit is contained in:
Richard Jones 2013-07-09 11:20:06 +10:00
parent a8b84be851
commit 4b638f9ddd
1 changed files with 49 additions and 53 deletions

View File

@ -54,9 +54,12 @@ beyond requiring Python installation upgrades.
Proposal
========
This proposal affects three components of packaging: `the pip bootstrap`_,
`setuptools`_ and, thanks to easier package installation, `modifications to
publishing packages`_.
This proposal affects two components of packaging: `the pip bootstrap`_ and,
thanks to easier package installation, `modifications to publishing
packages`_.
The core of this proposal is that the user experience of using pip should not
require the user to install pip.
The pip bootstrap
@ -65,9 +68,11 @@ The pip bootstrap
The Python installation includes an executable called "pip3" (see PEP 394 for
naming rationale etc.) that attempts to import pip machinery. If it can then
the pip command proceeds as normal. If it cannot it will bootstrap pip by
downloading the pip implementation wheel file. Once installed, the pip
command proceeds as normal. Once the bootstrap process is complete the "pip3"
command is no longer the bootstrap but rather the full pip command.
downloading the pip implementation and setuptools wheel files. Hereafter the
installation of the "pip implementation" will imply installation of
setuptools. Once installed, the pip command proceeds as normal. Once the
bootstrap process is complete the "pip3" command is no longer the bootstrap
but rather the full pip command.
A boostrap is used in the place of a the full pip code so that we don't have
to bundle pip and also pip is upgradeable outside of the regular Python
@ -89,15 +94,16 @@ The bootstrap process will proceed as follows:
2. The user will invoke a pip command, typically "pip3 install
<package>", for example "pip3 install Django".
3. The boostrap script will attempt to import the pip implementation.
If this succeeds, the pip command is processed normally.
If this succeeds, the pip command is processed normally. Stop.
4. On failing to import the pip implementation the bootstrap notifies
the user that it is "upgrading pip" and contacts PyPI to obtain the
latest download wheel file (see PEP 427.)
5. Upon downloading the file it is installed using the distlib
installation machinery for wheel packages. Upon completing the
installation the user is notified that "pip3 has been upgraded."
TODO how is it verified?
6. The pip tool may now import the pip implementation and continues to
the user that it needs to "install pip". It will ask the user whether it
should install pip as a system-wide site-packages or as a user-only
package. This choice will also be present as a command-line option to pip
so non-interactive use is possible.
5. The bootstrap will and contact PyPI to obtain the latest download wheel
file (see PEP 427.)
6. Upon downloading the file it is installed using "python setup.py install".
7. The pip tool may now import the pip implementation and continues to
process the requested user command normally.
Users may be running in an environment which cannot access the public
@ -109,7 +115,7 @@ would use the "-i" (Base URL of Python Package Index) argument to the
additional locations to discover packages and attempting to
download the package from those locations.
2. If the package is not found there then we attempt to donwload it
using the standard "https://pypi.python.org/pypi/simple/pip" index.
using the standard "https://pypi.python.org/simple/pip/" index.
3. If that also fails, for any reason, we indicate to the user the
operation we were attempting, the reason for failure (if we know
it) and display further instructions for downloading and installing
@ -118,52 +124,33 @@ would use the "-i" (Base URL of Python Package Index) argument to the
Some users may have no Internet access suitable for fetching the pip
implementation file. Manual installation of the pip implementation will be
supported through the manual download of the wheel file and "pip3 install
<downloaded wheel file>". This installation - since it uses only the bootstrap
code - will not perform standard pip installation steps of saving the file to
a cache directory or updating any local database of installed files.
<downloaded wheel file>".
The download of the pip implementation install file should be performed
securely. The transport from pypi.python.org will be done over HTTPS but the CA
certificate check will most likely not be performed, and therefore the download
would still be vulnerable to active MITM attacks. To mitigate this
risk we will use the embedded signature support in the wheel format to validate
the downloaded file.
The download of the pip implementation install file will be performed
securely. The transport from pypi.python.org will be done over HTTPS with the
CA certificate check performed (see PEP XXXX).
Beyond those arguments controlling index location and download
options, the "pip3" boostrap command may support further standard pip
options for verbosity, quietness and logging.
The "pip3" command will support two new command-line options that are used
in the boostrapping, and otherwise ignored. They control where the pip
implementation is installed:
--bootstrap
Install to the user's packages directory. The name of this option is chosen
to promote it as the preferred installation option.
--bootstrap-to-system
Install to the system site-packages directory.
These command-line options will also need to be implemented, but otherwise
ignored, in the pip implementation.
The "--no-install" option to the "pip3" command will not affect the
bootstrapping process.
setuptools
----------
The deprecation of requiring setuptools for installation is an existing goal of
the packaging comminity (TODO ref needed). Currently pip depends upon setuptools
functionality, and it is installed by the current pip boostrap. This PEP does
not propose installing setuptools during the new bootstrap.
It is intended that before Python 3.4 is shipped the functionlity required by
pip will be present in Python's standard library as the distlib module, and that
pip would be modified to use that functionality when present. TODO PEP reference
for distlib
Many existing "setup.py" files require setuptools to be installed (because one
of the first things they do is import setuptools). It is intended that pip's
behaviour will be either:
1. If setuptools is not present it can only install from wheel files and
sdists with 2.0+ metadata, or
2. If setuptools is present it can also install from sdists with legacy
metadata and eggs
By default, installing setuptools when necessary should be automatic so that
users are not inconvenienced, but advanced users should be able to ask that it
instead be treated as an error if no wheel is available to satisfy an
installation request or dependency (so they don't inadvertently install
setuptools on their production systems if they don't want to).
Modifications to publishing packages
------------------------------------
@ -189,7 +176,16 @@ Implementation
==============
The changes to pip required by this PEP are being tracked in that project's
issue tracker [2]_
issue tracker [2]_. Most notably, the addition of --bootstrap and --bootstrap-
to-system to the pip command-line.
The required code for this implementation is the "pip3" command described
above. The additional pypublish can be developed outside of the scope of this
PEP's work.
Finally, it would be desirable that "pip3" be ported to Python 2.6+ to allow
the single command to replace all existing pip/setuptools/distribute and
possibly virtualenv bootstrap scripts.
Risks