Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at fix-function-merge 64 lines 1.7 kB view raw
1# To build this derivation, run `nix-build -A nixpkgs-manual.pythonInterpreterTable` 2{ 3 lib, 4 writeText, 5 pkgs, 6 pythonInterpreters, 7}: 8let 9 isPythonInterpreter = 10 name: 11 /* 12 NB: Package names that don't follow the regular expression: 13 - `python-cosmopolitan` is not part of `pkgs.pythonInterpreters`. 14 - `_prebuilt` interpreters are used for bootstrapping internally. 15 - `python3Minimal` contains python packages, left behind conservatively. 16 - `rustpython` lacks `pythonVersion` and `implementation`. 17 */ 18 (lib.strings.match "(pypy|python)([[:digit:]]*)" name) != null; 19 20 interpreterName = 21 pname: 22 let 23 cuteName = { 24 cpython = "CPython"; 25 pypy = "PyPy"; 26 }; 27 interpreter = pkgs.${pname}; 28 in 29 "${cuteName.${interpreter.implementation}} ${interpreter.pythonVersion}"; 30 31 interpreters = lib.reverseList ( 32 lib.naturalSort (lib.filter isPythonInterpreter (lib.attrNames pythonInterpreters)) 33 ); 34 35 aliases = 36 pname: 37 lib.attrNames ( 38 lib.filterAttrs ( 39 name: value: 40 isPythonInterpreter name && name != pname && interpreterName name == interpreterName pname 41 ) pkgs 42 ); 43 44 result = map (pname: { 45 inherit pname; 46 aliases = aliases pname; 47 interpreter = interpreterName pname; 48 }) interpreters; 49 50 toMarkdown = 51 data: 52 let 53 line = package: '' 54 | ${package.pname} | ${lib.concatStringsSep ", " package.aliases or [ ]} | ${package.interpreter} | 55 ''; 56 in 57 lib.concatStringsSep "" (map line data); 58 59in 60writeText "python-interpreter-table.md" '' 61 | Package | Aliases | Interpeter | 62 |---------|---------|------------| 63 ${toMarkdown result} 64''