diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2019-07-17 20:36:47 +0200 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-09-16 22:15:29 +0000 |
commit | 410b67a12c94b53d62505d6eee89dda82f30d1aa (patch) | |
tree | 0c5a6f33e1ae54a0e976d89984ac50909ca3b413 /nixpkgs/doc | |
parent | 767f1297cdd53bf6196f46dbfd6a96f11a2a10cc (diff) | |
download | nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar.gz nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar.bz2 nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar.lz nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar.xz nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.tar.zst nixlib-410b67a12c94b53d62505d6eee89dda82f30d1aa.zip |
Split buildPythonPackage into setup hooks
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`). (cherry picked from commit f7e28bf5d8181926e600a222cb70180519d09726)
Diffstat (limited to 'nixpkgs/doc')
-rw-r--r-- | nixpkgs/doc/languages-frameworks/python.section.md | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/nixpkgs/doc/languages-frameworks/python.section.md b/nixpkgs/doc/languages-frameworks/python.section.md index 4963c97a6c9a..88dc42ebc6c2 100644 --- a/nixpkgs/doc/languages-frameworks/python.section.md +++ b/nixpkgs/doc/languages-frameworks/python.section.md @@ -540,7 +540,8 @@ and the aliases #### `buildPythonPackage` function The `buildPythonPackage` function is implemented in -`pkgs/development/interpreters/python/build-python-package.nix` +`pkgs/development/interpreters/python/mk-python-derivation` +using setup hooks. The following is an example: ```nix @@ -797,6 +798,22 @@ such as `ignoreCollisions = true` or `postBuild`. If you need them, you have to Python 2 namespace packages may provide `__init__.py` that collide. In that case `python.buildEnv` should be used with `ignoreCollisions = true`. +#### Setup hooks + +The following are setup hooks specifically for Python packages. Most of these are +used in `buildPythonPackage`. + +- `flitBuildHook` to build a wheel using `flit`. +- `pipBuildHook` to build a wheel using `pip` and PEP 517. Note a build system (e.g. `setuptools` or `flit`) should still be added as `nativeBuildInput`. +- `pipInstallHook` to install wheels. +- `pytestCheckHook` to run tests with `pytest`. +- `pythonCatchConflictsHook` to check whether a Python package is not already existing. +- `pythonImportsCheckHook` to check whether importing the listed modules works. +- `pythonRemoveBinBytecode` to remove bytecode from the `/bin` folder. +- `setuptoolsBuildHook` to build a wheel using `setuptools`. +- `setuptoolsCheckHook` to run tests with `python setup.py test`. +- `wheelUnpackHook` to move a wheel to the correct folder so it can be installed with the `pipInstallHook`. + ### Development mode Development or editable mode is supported. To develop Python packages |