On Tue, Aug 25, 2015 at 12:54 PM, Nate Coraor <n...@bx.psu.edu> wrote:
> I've started down this road of Linux platform detection, here's the work > so far: > > https://bitbucket.org/natefoo/wheel/src/tip/wheel/platform/linux.py > IDK whether codecs.open(file, 'r', encoding='utf8') is necessary or not? There are probably distros with Unicode characters in their e.g. lsb-release files. > > I'm collecting distribution details here: > > https://gist.github.com/natefoo/814c5bf936922dad97ff > Oh wow; thanks! > > > One thing to note, although it's not used, I'm attempting to label a > particular ABI as stable or unstable, so for example, Debian testing is > unstable, whereas full releases are stable. Arch and Gentoo are always > unstable, Ubuntu is always stable, etc. Hopefully this would be useful in > making a decision about what wheels to allow into PyPI. > Is it possible to enumerate the set into a table? e.g. [((distro,ver), {'ABI': 'stable'}), (...)] > > --nate > > On Mon, Aug 24, 2015 at 2:17 PM, Nate Coraor <n...@bx.psu.edu> wrote: > >> On Mon, Aug 24, 2015 at 1:51 PM, Wes Turner <wes.tur...@gmail.com> wrote: >> >>> >>> >>> On Mon, Aug 24, 2015 at 10:03 AM, Nate Coraor <n...@bx.psu.edu> wrote: >>> >>>> On Fri, Aug 21, 2015 at 2:51 AM, Nick Coghlan <ncogh...@gmail.com> >>>> wrote: >>>> >>>>> On 21 August 2015 at 05:58, Robert Collins <robe...@robertcollins.net> >>>>> wrote: >>>>> > On 21 August 2015 at 07:25, Donald Stufft <don...@stufft.io> wrote: >>>>> >> >>>>> >> On August 20, 2015 at 3:23:09 PM, Daniel Holth (dho...@gmail.com) >>>>> wrote: >>>>> >>> If you need that for some reason just put the longer information >>>>> in the >>>>> >>> metadata, inside the WHEEL file for example. Surely "does it work >>>>> on my >>>>> >>> system" dominates, as opposed to "I have a wheel with this >>>>> mnemonic tag, >>>>> >>> now let me install debian 5 so I can get it to run". >>>>> >>> >>>>> >>> >>>>> >> >>>>> >> It’s less about “now let me install Debian 5” and more like tooling >>>>> that doesn’t run *on* the platform but which needs to make decisions based >>>>> on what platform a wheel is built for. >>>>> > >>>>> > Cramming that into the file name is a mistake IMO. >>>>> > >>>>> > Make it declarative data, make it indexable, and index it. We can do >>>>> > that locally as much as via the REST API. >>>>> > >>>>> > That btw is why the draft for referencing external dependencies >>>>> > specifies file names (because file names give an ABI in the context >>>>> of >>>>> > a platform) - but we do need to identify the platform, and >>>>> > platform.distribution should be good enough for that (or perhaps we >>>>> > start depending on lsb-release for detection >>>>> >>>>> LSB has too much stuff in it, so most distros aren't LSB compliant out >>>>> of the box - you have to install extra packages. >>>>> >>>>> /etc/os-release is a better option: >>>>> http://www.freedesktop.org/software/systemd/man/os-release.html >>>> >>>> >>>> As per this discussion, and because I've discovered that the entire >>>> platform module is deprecated in 3.5 (and other amusements, like a >>>> Ubuntu-modified version of platform that ships on Ubuntu - platform as >>>> shipped with CPython detects Ubuntu as debian), I'm switching to >>>> os-release, but even that is unreliable - the file does not exist in >>>> CentOS/RHEL 6, for example. On Debian testing/sid installs, VERSION and >>>> VERSION_ID are unset (which is not wrong - there is no release of testing, >>>> but it does make identifying the platform more complicated since even the >>>> codename is not provided other than at the end of PRETTY_NAME). Regardless >>>> of whether a hash or a human-identifiable string is used to identify the >>>> platform, there still needs to be a way to reliably detect it. >>>> >>>> Unless someone tells me not to, I'm going to default to using >>>> os-release and then fall back to other methods in the event that os-release >>>> isn't available, and this will be in some sort of library alongside >>>> pep425tags in wheel/pip. >>>> >>>> FWIW, os-release's `ID_LIKE` gives us some ability to make assumptions >>>> without explicit need for a binary-compatibility.cfg (although not blindly >>>> - for example, CentOS sets this to "rhel fedora", but of course RHEL/CentOS >>>> and Fedora versions are not congruent). >>>> >>> >>> IIUC, then the value of os-release >>> will be used to generalize >>> the compatible versions of *.so deps >>> of a given distribution at a point in time? >>> >>> This works for distros that don't change [libc] much during a release, >>> but for rolling release models (e.g. arch, gentoo), >>> IDK how this simplification will work. >>> (This is a graph with nodes and edges (with attributes), and rules). >>> >> >> Arch, Gentoo, and other rolling release distributions don't have a stable >> ABI, so by definition I don't think we can support redistributable wheels >> on them. I'm adding platform detection support for them regardless, but I >> don't think there's any way to allow wheels built for these platforms in >> PyPI. >> >> >>> * Keying/namespacing is a simplification which may work. >>> * *conda preprocessing selectors* (and ~LSB-Python-Conda) >>> ~'prune' large parts of the graph >>> >>> * Someone mentioned LSB[-Python-Base] (again as a simplification) >>> * [[package, [version<=>verstr]]] >>> >>> Salt >>> * __salt__['grains']['os'] = "Fedora" || "Ubuntu" >>> * __salt__['grains']['os_family'] = "RedHat" || "Debian" >>> * __salt__['grains']['osrelease'] = "22" || "14.04" >>> * __salt__['grains']['oscodename'] = "Twenty Two" || "trusty" >>> * Docs: http://docs.saltstack.com/en/latest/topics/targeting/grains.html >>> * Docs: >>> http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.grains.html#salt.modules.grains.get >>> * Src: >>> https://github.com/saltstack/salt/blob/develop/salt/grains/core.py#L1018 >>> ("def os_data()") >>> >>> $ sudo salt-call --local grains.item os_family os osrelease oscodename >>> local: >>> ---------- >>> os: >>> Fedora >>> os_family: >>> RedHat >>> oscodename: >>> Twenty Two >>> osrelease: >>> 22 >>> >>> >>> >>>> --nate >>>> >>>> >>>>> >>>>> >>>>> My original concern with using that was that it *over*specifies the >>>>> distro (e.g. not only do CentOS and RHEL releases show up as different >>>>> platforms, but so do X.Y releases within a series), but the >>>>> binary-compatibility.txt idea resolves that issue, since a derived >>>>> distro can explicitly identify itself as binary compatible with its >>>>> upstream and be able to use the corresponding wheel files. >>>>> >>>>> Regards, >>>>> Nick. >>>>> >>>>> -- >>>>> Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia >>>>> _______________________________________________ >>>>> Distutils-SIG maillist - Distutils-SIG@python.org >>>>> https://mail.python.org/mailman/listinfo/distutils-sig >>>>> >>>> >>>> >>>> _______________________________________________ >>>> Distutils-SIG maillist - Distutils-SIG@python.org >>>> https://mail.python.org/mailman/listinfo/distutils-sig >>>> >>>> >>> >> >
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org https://mail.python.org/mailman/listinfo/distutils-sig