On Jul 9, 2013, at 11:16 PM, Richard Jones <r1chardj0n3s@gmail.com> wrote:

[firstly, my apologies for posting the announcement yesterday of the pip bootstrap implementation and PEP updates to the pypa-dev list instead of distutils-sig... I blame PyCon AU exhaustion :-)]

Firstly, I've just made some additional changes to PEP 439 to include:

- installing virtualenv as well (so now pip, setuptools and virtualenv are installed)

doesn't "PyEnv" which is bundled with Python 3.3+ replace virtualenv? What's the purpose of including virtualenv in the bootstrap? http://www.python.org/dev/peps/pep-0405/

- mention the possibility of inclusion in a future Python 2.7 release
- clarify the SSL certificate situation

The bootstrap code has also been updated to:

- not run the full pip command if it's "pip3 install setuptools" or either of the other two packages it has just installed (thus preventing a possibly confusing message to the user)
- also install virtualenv

The intention is that the pip, setuptools and actually all Python projects will promote a single bootstrap process:

    "pip3 install setuptools" or "pip3 install Django"

And then there's instructions for getting "pip" if it's not installed. Exact wording etc. to be determined :-)

The original message I sent to pypa-dev yesterday is below:

The bootstrap that I wrote at the PyCon AU sprints to implement PEP 439 has been added to pypa on bitbucket:


I've also updated the PEP with the following changes:

- mention current plans for HTTPS cert verification in Python 3.4+ (sans PEP reference for now)
- remove setuptools note; setuptools will now be installed
- mention bootstrapping target (user vs. system) and command-line options
- mention python 2.6+ bootstrap possibility
- remove consideration of support for unnecessary installation options (beyond -i/--index-url)
- mention having pip default to --user when itself installed in ~/.local

What the last item alludes to is the idea that it'd be nice if pip installed in ~/.local would default to installing packages also in ~/.local as though the --user switch had been provided. Otherwise the user needs to remember it every time they install a package.

Note that the bootstrapping uses two different flags to control where the pip implementation is installed: --bootstrap and --bootstrap-system (these were chosen to encourage user installs). It would be ideal if pip could support those flags, as the pip3 command currently must remove them before invoking pip main.

Once we're happy with the shape of pip3 we can fork it to Python 2 and use it as the canonical bootstrap script for installing pip and setuptools. I think we should also consider installing virtualenv in Python 2...

Happy to clarify where needed and code review is welcome. It's been a looong four days here :-)

Distutils-SIG maillist  -  Distutils-SIG@python.org

Donald Stufft
PGP: 0x6E3CBCE93372DCFA // 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA