python3Packages.setuptoolsBuildHook: delete broken setuptoolsShellHook

Broken since the switch to PyPA's build/installer in
6c85fff302.

The hook was always janky and maintainers appear to not want its current
implementation in-tree. No replacement is currently planned.

However, this leaves the path open for future replacements as a broken
hook will no longer be installed by default.
This commit is contained in:
Thomas Watson 2024-01-21 11:31:42 -06:00
parent ce38ee87c8
commit 26ccdea3d7
3 changed files with 2 additions and 105 deletions

View File

@ -489,40 +489,6 @@ are used in [`buildPythonPackage`](#buildpythonpackage-function).
with the `pipInstallHook`. with the `pipInstallHook`.
- `unittestCheckHook` will run tests with `python -m unittest discover`. See [example usage](#using-unittestcheckhook). - `unittestCheckHook` will run tests with `python -m unittest discover`. See [example usage](#using-unittestcheckhook).
### Development mode {#development-mode}
Development or editable mode is supported. To develop Python packages
[`buildPythonPackage`](#buildpythonpackage-function) has additional logic inside `shellPhase` to run `pip
install -e . --prefix $TMPDIR/`for the package.
Warning: `shellPhase` is executed only if `setup.py` exists.
Given a `default.nix`:
```nix
with import <nixpkgs> {};
python3Packages.buildPythonPackage {
name = "myproject";
buildInputs = with python3Packages; [ pyramid ];
src = ./.;
}
```
Running `nix-shell` with no arguments should give you the environment in which
the package would be built with `nix-build`.
Shortcut to setup environments with C headers/libraries and Python packages:
```shell
nix-shell -p python3Packages.pyramid zlib libjpeg git
```
::: {.note}
There is a boolean value `lib.inNixShell` set to `true` if nix-shell is invoked.
:::
## User Guide {#user-guide} ## User Guide {#user-guide}
### Using Python {#using-python} ### Using Python {#using-python}
@ -859,8 +825,7 @@ Above, we were mostly just focused on use cases and what to do to get started
creating working Python environments in nix. creating working Python environments in nix.
Now that you know the basics to be up and running, it is time to take a step Now that you know the basics to be up and running, it is time to take a step
back and take a deeper look at how Python packages are packaged on Nix. Then, back and take a deeper look at how Python packages are packaged on Nix.
we will look at how you can use development mode with your code.
#### Python library packages in Nixpkgs {#python-library-packages-in-nixpkgs} #### Python library packages in Nixpkgs {#python-library-packages-in-nixpkgs}
@ -1449,45 +1414,6 @@ documentation source root.
The hook is also available to packages outside the python ecosystem by The hook is also available to packages outside the python ecosystem by
referencing it using `sphinxHook` from top-level. referencing it using `sphinxHook` from top-level.
### Develop local package {#develop-local-package}
As a Python developer you're likely aware of [development mode](http://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode)
(`python setup.py develop`); instead of installing the package this command
creates a special link to the project code. That way, you can run updated code
without having to reinstall after each and every change you make. Development
mode is also available. Let's see how you can use it.
In the previous Nix expression the source was fetched from a url. We can also
refer to a local source instead using `src = ./path/to/source/tree;`
If we create a `shell.nix` file which calls [`buildPythonPackage`](#buildpythonpackage-function), and if `src`
is a local source, and if the local source has a `setup.py`, then development
mode is activated.
In the following example, we create a simple environment that has a Python 3.11
version of our package in it, as well as its dependencies and other packages we
like to have in the environment, all specified with `dependencies`.
```nix
with import <nixpkgs> {};
with python311Packages;
buildPythonPackage rec {
name = "mypackage";
src = ./path/to/package/source;
dependencies = [
pytest
numpy
];
propagatedBuildInputs = [
pkgs.libsndfile
];
}
```
It is important to note that due to how development mode is implemented on Nix
it is not possible to have multiple packages simultaneously in development mode.
### Organising your packages {#organising-your-packages} ### Organising your packages {#organising-your-packages}
So far we discussed how you can use Python on Nix, and how you can develop with So far we discussed how you can use Python on Nix, and how you can develop with

View File

@ -194,7 +194,7 @@ in {
name = "setuptools-setup-hook"; name = "setuptools-setup-hook";
propagatedBuildInputs = [ setuptools wheel ]; propagatedBuildInputs = [ setuptools wheel ];
substitutions = { substitutions = {
inherit pythonInterpreter pythonSitePackages setuppy; inherit pythonInterpreter setuppy;
}; };
} ./setuptools-build-hook.sh) {}; } ./setuptools-build-hook.sh) {};

View File

@ -23,36 +23,7 @@ setuptoolsBuildPhase() {
echo "Finished executing setuptoolsBuildPhase" echo "Finished executing setuptoolsBuildPhase"
} }
setuptoolsShellHook() {
echo "Executing setuptoolsShellHook"
runHook preShellHook
if test -e setup.py; then
tmp_path=$(mktemp -d)
export PATH="$tmp_path/bin:$PATH"
export PYTHONPATH="$tmp_path/@pythonSitePackages@:$PYTHONPATH"
mkdir -p "$tmp_path/@pythonSitePackages@"
eval "@pythonInterpreter@ -m pip install -e . --prefix $tmp_path \
--no-build-isolation >&2"
# Process pth file installed in tmp path. This allows one to
# actually import the editable installation. Note site.addsitedir
# appends, not prepends, new paths. Hence, it is not possible to override
# an existing installation of the package.
# https://github.com/pypa/setuptools/issues/2612
export NIX_PYTHONPATH="$tmp_path/@pythonSitePackages@:${NIX_PYTHONPATH-}"
fi
runHook postShellHook
echo "Finished executing setuptoolsShellHook"
}
if [ -z "${dontUseSetuptoolsBuild-}" ] && [ -z "${buildPhase-}" ]; then if [ -z "${dontUseSetuptoolsBuild-}" ] && [ -z "${buildPhase-}" ]; then
echo "Using setuptoolsBuildPhase" echo "Using setuptoolsBuildPhase"
buildPhase=setuptoolsBuildPhase buildPhase=setuptoolsBuildPhase
fi fi
if [ -z "${dontUseSetuptoolsShellHook-}" ] && [ -z "${shellHook-}" ]; then
echo "Using setuptoolsShellHook"
shellHook=setuptoolsShellHook
fi