[Distutils] Handling Case/Normalization Differences

holger krekel holger at merlinux.eu
Mon Sep 1 22:53:15 CEST 2014


On Thu, Aug 28, 2014 at 14:58 -0400, Donald Stufft wrote:
> Right now the “canonical” page for a particular project on PyPI is whatever the
> author happened to name their package (e.g. Django). This requires PyPI to have
> some "smarts" so that it can redirect things like /simple/django/ to
> /simple/Django/ otherwise someone doing ``pip install django`` would fall back
> to a much worse behavior.
> 
> If this redirect doesn't happen, then pip will issue a request for just
> /simple/ and look for a link that, when both sides are normalized, compares
> equal to the name it's looking for. It will then follow the link, get
> /simple/Django/ and everything works... Except it doesn't. The problem here
> comes from the external link classification that we have now. Pip sees the
> link to /simple/Django/ as an external link (because it lacks the required
> rels) and the installation finally fails.
> 
> The /simple/ case rarely happens when installing from PyPI itself because of
> the redirect, however it happens quite often when someone is attempting to
> instal from a mirror instead. Even when everything works correctly the penality
> for not knowing exactly what name to type in results in at least 1 extra http
> request, one of which (/simple/) requires pulling down a 2.1MB file.
> 
> To fix this I'm going to modify PyPI so that it uses the normalized name in
> the /simple/ URL and redirects everything else to the non-normalized name.

Of course you mean redirecting everything to the normalized name.

> I'm also going to submit a PR to bandersnatch so that it will use
> normalized names ...

devpi-server also broke and I did a hotfix release today.  Older
installs will still have a problem, though (not all companies run the
newest version all the time).  Apart form the fact i was on vacation and
on business travels, the notice for that breaking change was only one
day which i think is a bit too quick.  I'd really appreciate if you send
a mail to Christian for bandersnatch and me for devpi before such
changes happen and with a bit more reasonable ahead time.

Besides, i think it's a good change in principle.

best and thanks,
holger




> for it's directories and such as well. These two changes will make it so that
> the client side will know ahead of time exactly what form the server expects
> any given name to be in. This will allow a change in pip to happen which
> will pre-normalize all names which will make the interaction with mirrors better
> and will reduce the number of HTTP requests that a single ``pip install`` needs
> to make.
> 
> ---
> Donald Stufft
> PGP: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA
> 

> _______________________________________________
> Distutils-SIG maillist  -  Distutils-SIG at python.org
> https://mail.python.org/mailman/listinfo/distutils-sig



More information about the Distutils-SIG mailing list