We already re-pack the source distribution to make the
timestamps consistent, but the result is still not
entirely stable because by default tar does not sort
the files in the archive deterministically. This PR
makes sure the entries are sorted by name.
https://github.com/NixOS/nixpkgs/issues/105502
* setuptools: Remove date from release tag
* setuptools: Fix timestamps in sdist
* setuptools: Move untar/retar to buildPhase
* setuptools: Reproducible 44.0
* setuptools: Use $SOURCE_DATE_EPOCH for src
Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
Since wheel support was introduced in 2015 we always relied on pre-built
wheels for bootstrapping. Now, we can bootstrap directly from the
sources of these packages in git.
The `bootstrapped-pip` packages is used to build `pip`, `setuptools` and `wheel`,
after which those packages are used to build everything else.
Note that when building `bootstrapped-pip` some errors are shown.
These are not important, the build actually does succeed and work as intended.
- setuptools includes *.exe files by default, but can be excluded with an ENV variable.
- setuptools was built as an egg, which had reproducibility problems. Instead use a wheel
These are various *.exe and *.xml files used only on windows. setuptools
includes them by default since it normally creates a single release for
all operating systems.
This reduces the size from 1020.0K to 801.6K according to `nix-path -sh`.
The egg is a zip file. setuptools leaves timestamps in the egg,
which makes the build unreproducible. Unfortunately the files aren't
compressed so the size of setuptools increases to 2.3M from 0.8M
according to `nix path-info -sh`.
With this change, setuptools is reproducible according to
nix-build -A python37Packages.setuptools --check
This commit splits the `buildPythonPackage` into multiple setup hooks.
Generally, Python packages are built from source to wheels using `setuptools`.
The wheels are then installed with `pip`. Tests were often called with
`python setup.py test` but this is less common nowadays. Most projects
now use a different entry point for running tests, typically `pytest`
or `nosetests`.
Since the wheel format was introduced more tools were built to generate these,
e.g. `flit`. Since PEP 517 is provisionally accepted, defining a build-system
independent format (`pyproject.toml`), `pip` can now use that format to
execute the correct build-system.
In the past I've added support for PEP 517 (`pyproject`) to the Python
builder, resulting in a now rather large builder. Furthermore, it was not possible
to reuse components elsewhere. Therefore, the builder is now split into multiple
setup hooks.
The `setuptoolsCheckHook` is included now by default but in time it should
be removed from `buildPythonPackage` to make it easier to use another hook
(curently one has to pass in `dontUseSetuptoolsCheck`).
This changeset allows for cross-compilation of Python packages. Packages
built with buildPythonPackage are not allowed to refer to the build
machine. Executables that have shebangs will refer to the host.