diff --git a/doc/languages-frameworks/python.section.md b/doc/languages-frameworks/python.section.md index 049b395dcc25..6bd1ad74435e 100644 --- a/doc/languages-frameworks/python.section.md +++ b/doc/languages-frameworks/python.section.md @@ -489,40 +489,6 @@ are used in [`buildPythonPackage`](#buildpythonpackage-function). with the `pipInstallHook`. - `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 {}; - -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} ### 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. 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, -we will look at how you can use development mode with your code. +back and take a deeper look at how Python packages are packaged on Nix. #### 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 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 {}; -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} So far we discussed how you can use Python on Nix, and how you can develop with diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix index 04b1f4a512c9..304fdfa79c8d 100644 --- a/pkgs/development/interpreters/python/hooks/default.nix +++ b/pkgs/development/interpreters/python/hooks/default.nix @@ -194,7 +194,7 @@ in { name = "setuptools-setup-hook"; propagatedBuildInputs = [ setuptools wheel ]; substitutions = { - inherit pythonInterpreter pythonSitePackages setuppy; + inherit pythonInterpreter setuppy; }; } ./setuptools-build-hook.sh) {}; diff --git a/pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh b/pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh index 958a9378ef14..7b5111d7f342 100644 --- a/pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh +++ b/pkgs/development/interpreters/python/hooks/setuptools-build-hook.sh @@ -23,36 +23,7 @@ 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 echo "Using setuptoolsBuildPhase" buildPhase=setuptoolsBuildPhase fi - -if [ -z "${dontUseSetuptoolsShellHook-}" ] && [ -z "${shellHook-}" ]; then - echo "Using setuptoolsShellHook" - shellHook=setuptoolsShellHook -fi