[Distutils] A portable version of pip

Vinay Sajip vinay_sajip at yahoo.co.uk
Mon Oct 21 15:25:05 CEST 2013

I did a bit of work looking at running pip from a .zip using pyzzer, a little while ago. What were the fixes to pip which you mentioned? There were a number of places where pip needed changing:

1. How it handles cacert.pem when running from a .zip (default_cert_path in pip/locations.py)
2. Identifying the running pip rather than any installed pip
3. Expecting an installed setuptools to check its version to confirm that wheels can be supported
4. The wheel build code, which uses subprocess, assumes running from the file system

>From what I can see 2 and 3 have been addressed in recent changes, but I couldn't tell from a quick reading whether 1 has been addressed (there have certainly been code changes in this area) or whether 4 has been addressed.


Vinay Sajip

On Mon, 21/10/13, Paul Moore <p.f.moore at gmail.com> wrote:

 Subject: [Distutils] A portable version of pip
 To: "Distutils" <distutils-sig at python.org>
 Date: Monday, 21 October, 2013, 11:39
 With all of the current interest in
 bundling pip with the Python
 distribution, I had a sudden thought. Vinay has developed a
 called pyzzer (https://pypi.python.org/pypi/pyzzer) that
 bundles up
 Python modules into runnable single-file executables.
 Using a command
     pyzzer -m pip:main -l t64 -o pipsa.exe -s
 "#!python" -r <path-to-pip>\pip
 you can build a single-file executable version of pip that
 can install
 wheels (it can't install sdists until setuptools is
 installed, because
 installing sdists depends on having setuptools at install
 The -s "#!python" is not needed on Unix as the default is
 "#!/usr/bin/env python". Also the -l t64 is a Windows
 requirement to
 get an exe - you can produce a cross-platform pyz archive
 without it
 (see the pyzzer docs for details).
 This requires the latest development version of pip (which
 contains a
 fix for running pip from an uninstalled zipfile) and the
 patch to pip\__init__.py:
 from pip import cmdoptions
 import pip.cmdoptions
 cmdoptions = pip.cmdoptions
 This fixes a recursive-import issue - I'll update pip "real
 soon now"
 (TM) for this.
 This is just an experiment at the moment - I've done minimal
 but it seems to work as I'd expect. It may be worth thinking
 though - either as an alternative to bundling (a bit late, I
 know) or
 as a way of providing pip for earlier versions of Python.
 Hope this is of interest.
 Distutils-SIG maillist  -  Distutils-SIG at python.org

More information about the Distutils-SIG mailing list