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:
parent
a8b84be851
commit
4b638f9ddd
102
pep-0439.txt
102
pep-0439.txt
|
@ -54,9 +54,12 @@ beyond requiring Python installation upgrades.
|
||||||
Proposal
|
Proposal
|
||||||
========
|
========
|
||||||
|
|
||||||
This proposal affects three components of packaging: `the pip bootstrap`_,
|
This proposal affects two components of packaging: `the pip bootstrap`_ and,
|
||||||
`setuptools`_ and, thanks to easier package installation, `modifications to
|
thanks to easier package installation, `modifications to publishing
|
||||||
publishing packages`_.
|
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
|
The pip bootstrap
|
||||||
|
@ -65,9 +68,11 @@ The pip bootstrap
|
||||||
The Python installation includes an executable called "pip3" (see PEP 394 for
|
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
|
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
|
the pip command proceeds as normal. If it cannot it will bootstrap pip by
|
||||||
downloading the pip implementation wheel file. Once installed, the pip
|
downloading the pip implementation and setuptools wheel files. Hereafter the
|
||||||
command proceeds as normal. Once the bootstrap process is complete the "pip3"
|
installation of the "pip implementation" will imply installation of
|
||||||
command is no longer the bootstrap but rather the full pip command.
|
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
|
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
|
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
|
2. The user will invoke a pip command, typically "pip3 install
|
||||||
<package>", for example "pip3 install Django".
|
<package>", for example "pip3 install Django".
|
||||||
3. The boostrap script will attempt to import the pip implementation.
|
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
|
4. On failing to import the pip implementation the bootstrap notifies
|
||||||
the user that it is "upgrading pip" and contacts PyPI to obtain the
|
the user that it needs to "install pip". It will ask the user whether it
|
||||||
latest download wheel file (see PEP 427.)
|
should install pip as a system-wide site-packages or as a user-only
|
||||||
5. Upon downloading the file it is installed using the distlib
|
package. This choice will also be present as a command-line option to pip
|
||||||
installation machinery for wheel packages. Upon completing the
|
so non-interactive use is possible.
|
||||||
installation the user is notified that "pip3 has been upgraded."
|
5. The bootstrap will and contact PyPI to obtain the latest download wheel
|
||||||
TODO how is it verified?
|
file (see PEP 427.)
|
||||||
6. The pip tool may now import the pip implementation and continues to
|
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.
|
process the requested user command normally.
|
||||||
|
|
||||||
Users may be running in an environment which cannot access the public
|
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
|
additional locations to discover packages and attempting to
|
||||||
download the package from those locations.
|
download the package from those locations.
|
||||||
2. If the package is not found there then we attempt to donwload it
|
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
|
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
|
operation we were attempting, the reason for failure (if we know
|
||||||
it) and display further instructions for downloading and installing
|
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
|
Some users may have no Internet access suitable for fetching the pip
|
||||||
implementation file. Manual installation of the pip implementation will be
|
implementation file. Manual installation of the pip implementation will be
|
||||||
supported through the manual download of the wheel file and "pip3 install
|
supported through the manual download of the wheel file and "pip3 install
|
||||||
<downloaded wheel file>". This installation - since it uses only the bootstrap
|
<downloaded wheel file>".
|
||||||
code - will not perform standard pip installation steps of saving the file to
|
|
||||||
a cache directory or updating any local database of installed files.
|
|
||||||
|
|
||||||
The download of the pip implementation install file should be performed
|
The download of the pip implementation install file will be performed
|
||||||
securely. The transport from pypi.python.org will be done over HTTPS but the CA
|
securely. The transport from pypi.python.org will be done over HTTPS with the
|
||||||
certificate check will most likely not be performed, and therefore the download
|
CA certificate check performed (see PEP XXXX).
|
||||||
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.
|
|
||||||
|
|
||||||
Beyond those arguments controlling index location and download
|
Beyond those arguments controlling index location and download
|
||||||
options, the "pip3" boostrap command may support further standard pip
|
options, the "pip3" boostrap command may support further standard pip
|
||||||
options for verbosity, quietness and logging.
|
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
|
The "--no-install" option to the "pip3" command will not affect the
|
||||||
bootstrapping process.
|
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
|
Modifications to publishing packages
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
@ -189,7 +176,16 @@ Implementation
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The changes to pip required by this PEP are being tracked in that project's
|
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
|
Risks
|
||||||
|
|
Loading…
Reference in New Issue