[Distutils] How to get pip to really, really, I mean it -- rebuild this damn package!

Nathaniel Smith njs at pobox.com
Fri Jan 29 17:43:06 EST 2016

On Jan 29, 2016 7:48 AM, "Chris Barker - NOAA Federal" <
chris.barker at noaa.gov> wrote:
> >>  Requirement already satisfied (use --upgrade to upgrade): gsw==3.0.3
> >> file:///Users/chris.barker/miniconda2/conda-bld/work/gsw-3.0.3 in
> >> /Users/chris.barker/miniconda2/conda-bld/work/gsw-3.0.3
> >
> > I think this is saying that pip thinks it has found an
> > already-installed version of gsw 3.0.3 in sys.path, and that the
> > directory in your sys.path where it's already installed is
> >
> > /Users/chris.barker/miniconda2/conda-bld/work/gsw-3.0.3
> That is the temp dir conda sets up to unpack downloaded files, and do
> its work in -- hence the name. I'll look and see what's there. I'm
> pretty sure conda build starts out with an empty dir, however. And
> that dir should not be on sys.path.

This is the point where I'd probably start adding print statements to my
local copy of pip. E.g. grep for that "requirement already satisfied"
message and then have it print out sys.path as well. To me this still
smells like some simple bug in one of conda, your environment, or pip, so
it's worth figuring out...

> > I think this means that that directory is (a) in sys.path, and (b)
> > contains a .egg-info/.dist-info directory for gsw 3.0.3. Part (a)
> > seems weird and broken.
> Indeed. And I get the same symptoms with a clean environment that I've
> set up outside conda build. Though with the same source dir. But with
> conda build, it's a fresh unpack of the tarball.
> > Do you have "." in your PYTHONPATH or anything like that?
> God no!

Too bad, it would have been an easy explanation ;-)

> > Don't know why it seems to be building a wheel for it, if it already
> > thinks that it's installed... this is also odd.
> Yes it is. But it doesn't install it :-(
> >
> > $PYTHON -m pip install --no-cache-dir --upgrade --force-reinstall ./
> >
> > ? Though I'd think that -I would have the same affect as
> >
> So did I, and I think I tried --force-reinstall already, but I will again.
> > (It doesn't look like the cache dir is your problem here, but you do
> > probably want to use --no-cache-dir anyway just as good practice, just
> > because you don't want to accidentally package up a stale version of
> > the software that got pulled out of your cache instead of the version
> > you thought you were packaging in the tree in front of you.
> Exactly. Doesn't seem to make a difference, though.
> > Also, I think it's a bug in pip that it caches builds of source trees
> > -- PyPI can enforce the rule that each (package name, version number)
> > sdist is unique, but for a work-in-progress VCS checkout it's just not
> > true that (package name, version number) uniquely identifies a
> > snapshot of the whole tree. So in something like 'pip install .', then
> > requirement resolution code should treat this as a special requirement
> > that it wants *this exact tree*, not just any package that has the
> > same (package name, version number) as this tree; and the resulting
> > wheel should not be cached.
> Absolutely! In fact, I'll bet that approach is the source of the
> problem here. If not automagically, there should be a flag, at least.

Maybe... it looks like at least @dstufft agrees that the current behavior
is a bug:


and if this were fixed then it would at least hide your problem. But the
underlying bug here is that pip seems to think that a package is installed
when it wasn't. Hacking it to ignore whether a package is installed would
just be papering over this.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/distutils-sig/attachments/20160129/d151a473/attachment-0001.html>

More information about the Distutils-SIG mailing list