[Distutils] Installing from a wheel

Oscar Benjamin oscar.j.benjamin at gmail.com
Wed Aug 21 16:48:45 CEST 2013


On 21 August 2013 14:56, Paul Moore <p.f.moore at gmail.com> wrote:
> On 21 August 2013 14:28, Oscar Benjamin <oscar.j.benjamin at gmail.com> wrote:
>>
>> So I tried updating everything e.g.:
>>
>> $ pip install -U wheel pip setuptools
>
> [lots omitted for brevity]
>
> Some thoughts.
>
> pip 1.3.1 predates pip's wheel support so you wouldn't have had pip install
> --use-wheel there.
>
> The upgrade error may have been because pip install -U pip tries to install
> a new pip.exe while pip.exe is in use. The error might not be too bad
> (pip.exe doesn't actually need to change).

Maybe, although the path
c:\\docume~1\\enojb\\locals~1\\temp\\pip-6echt4-uninstall\\tools\\python27\\scripts\\pip.exe
is not the location of the pip I used and is not on PATH.

> For safety, "python -m pip install -U pip --force-reinstall" might be worth
> doing.

Okay done. Seems to work fine.

> You quite probably shouldn't have upgraded setuptools like you did. It looks
> like you had a pre-merge version, and upgrading across the distribute merge
> appears to be fun (I have personally never encountered that particular
> flavour of fun, but that's what I'm led to believe).

This is not an old Python installation. I installed this as a clean
installation to test the patches I uploaded for issue12641 2-3 months
ago. I wouldn't have deliberately installed distribute (I know it's
obsoleted) so I don't know how it got there.

> For safety you should
> check your site-packages for setuptools and distribute installations. Maybe
> manually remove distribute if present,

I got this far:
$ rm -r /q/tools/Python27/Lib/site-packages/distribute-0.6.40-py2.7.egg/

and then
$ pip
Traceback (most recent call last):
  File "q:\tools\Python27\Scripts\pip-script.py", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

> and then "python -m pip install -U setuptools --force-reinstall"

Alas, this one doesn't work any more either:
$ python -m pip
q:\tools\Python27\python.exe: No module named pkg_resources; 'pip' is
a package and cannot be directly executed

> (don't do a combined run of pip and setuptools
> together, that's one of the scary failure modes IIRC).

Okay so I manually deleted everything for
pip/setuptools/distribute/easy_install from Scripts and site-packages
and started again. Following the instructions for install pip and
setuptools for Windows I downloaded and ran ez_setup.py followed by
get-pip.py. Then I got this error:

$ py -2.7 get-pip.py
Downloading/unpacking pip

pip can't proceed with requirement 'pip' due to a pre-existing build directory.
 location: c:\docume~1\enojb\locals~1\temp\pip-build-enojb\pip
This is likely due to a previous installation that failed.
pip is being responsible and not assuming it can delete this.
Please delete it and try again.

Cleaning up...
Exception:
Traceback (most recent call last):
  File "c:\docume~1\enojb\locals~1\temp\unpacker-c3e81q-scratchdir\pip\basecommand.py",
line 134, in main
    status = self.run(options, args)
  File "c:\docume~1\enojb\locals~1\temp\unpacker-c3e81q-scratchdir\pip\commands\install.py",
line 236, in run
    requirement_set.prepare_files(finder,
force_root_egg_info=self.bundle, bundle=self.bundle)
  File "c:\docume~1\enojb\locals~1\temp\unpacker-c3e81q-scratchdir\pip\req.py",
line 1071, in prepare_files
    raise e
PreviousBuildDirError:
pip can't proceed with requirement 'pip' due to a pre-existing build directory.
 location: c:\docume~1\enojb\locals~1\temp\pip-build-enojb\pip
This is likely due to a previous installation that failed.
pip is being responsible and not assuming it can delete this.
Please delete it and try again.

The path it refers to doesn't exist but deleting a similar directory
gets it working:

$ rm -r ~/Local\ Settings/temp/pip-6echt4-uninstall/
enojb at ENM-OB:/q$ py -2.7 get-pip.py
Downloading/unpacking pip
  Downloading pip-1.4.1.tar.gz (445kB): 445kB downloaded
  Running setup.py egg_info for package pip
   ...

Okay so now I'm back in business ('pip list' works etc.).

> pip 1.4.1 should be able to pip uninstall a distribution installed from a
> wheel (but TBH, I would have expected 1.3.1 to be able to, as well. The
> installed data looked OK).

Yes it can:

$ pip uninstall spam
Uninstalling spam:
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\description.rst
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\metadata
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\pydist.json
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\record
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\top_level.txt
  q:\tools\python27\lib\site-packages\spam-1.0.dist-info\wheel
  q:\tools\python27\lib\site-packages\spam.py
Proceed (y/n)? y
  Successfully uninstalled spam

Also 'pip install --use-wheel' has a more intuitive interface than wheel:

$ pip install --use-wheel dist/spam-1.0-py27-none-any.whl
Unpacking .\dist\spam-1.0-py27-none-any.whl
Installing collected packages: spam
Successfully installed spam
Cleaning up...

> For people watching at home, upgrading pip really isn't this scary :-) I'm
> just making it sound scary (a) because I don't know the precise upgrade
> instructions for setuptools and (b) because you need to do setuptools and
> pip separately, and use python -m pip on Windows to upgrade pip (neither of
> which are immediately obvious).

Is it perhaps safer to suggest the following?
a) uninstall pip/setuptools/distribute
b) run ez_setup.py
c) run get-pip.py

That's what I just did and it worked fine. Perhaps there could be one
script that does steps a), b) and c) to smooth the path for anyone
upgrading?


Oscar


More information about the Distutils-SIG mailing list