[rb-general] patching python glob

Ximin Luo infinity0 at debian.org
Wed May 24 16:21:00 CEST 2017


Bernhard M. Wiedemann:
> I am thinking to propose to python upstream
> 
> https://github.com/python/cpython/compare/master...distropatches:glob?expand=1
> 
> which would make every call of glob.glob deliver (reproducible) sorted
> output.
> 
> That would help a large number of existing projects
> to get reproducible builds like
> https://github.com/pytries/datrie/blob/master/setup.py#L10
> https://github.com/jonashaag/bjoern/blob/master/setup.py#L6
> https://github.com/scipy/scipy/blob/master/scipy/sparse/linalg/dsolve/setup.py#L28
> https://www.riverbankcomputing.com/pipermail/pyqt/2017-May/039214.html
> 
> and also future ones.
> 
> What do you think?
> 

Contrary to what others were assuming, python's glob is *not* implemented in terms of the libc glob. You can verify this by reading the source code:

/usr/lib/python2.7/glob.py
/usr/lib/python2.7/fnmatch.py

Python's glob is in fact not sorted, and using sorted() will do a locale-independent sort.

The libc glob is local-dependently sorted and you have to run it with LC_ALL=C.UTF-8 for reproducible results.

So, the patch seems fine to me. Though sorted(list(xx)) is redundant and you can just use sorted(xx) directly even if xx is a generator/iterator.

X

-- 
GPG: ed25519/56034877E1F87C35
GPG: rsa4096/1318EFAC5FBBDBCE
https://github.com/infinity0/pubkeys.git


More information about the rb-general mailing list