Python project fails on "nix develop" in setuptoolsShellHook

I am trying to setup a “Hello Word” Python project as Nix flake. Full source can be found at:

Everything works, except that “nix develop” fails to execute setuptoolsShellHook due to not finding pip. As far as I understand the situation, setuptoolsShellHook tries to install the project with pip install -e, so that I end up with an editable install of the project. However, that fails due to the search for pip running into an error.

Adding pip as buildInputs or "propagatedBuildInputs` didn’t have any effect.

Am I doing something wrong or is this a bug?

Steps to reproduce the problem:

git clone https://github.com/grumnix/hello-python.git
cd hello-python/
nix develop .

Error message:

$ nix develop .
Executing setuptoolsShellHook
Obtaining file:///tmp/hello-python
  Preparing metadata (setup.py) ... done
Installing collected packages: hello
  Attempting uninstall: hello
    Found existing installation: hello 0.1.0
    Can't uninstall 'hello'. No files were found to uninstall.
  Running setup.py develop for hello
Successfully installed hello-0.1.0
--- Logging error ---
Traceback (most recent call last):
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/utils/logging.py", line 177, in emit
    self.console.print(renderable, overflow="ignore", crop=False, style=style)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_vendor/rich/console.py", line 1752, in print
    extend(render(renderable, render_options))
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_vendor/rich/console.py", line 1390, in render
    for render_output in iter_render:
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/utils/logging.py", line 134, in __rich_console__
    for line in lines:
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_vendor/rich/segment.py", line 245, in split_lines
    for segment in segments:
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_vendor/rich/console.py", line 1368, in render
    renderable = rich_cast(renderable)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_vendor/rich/protocol.py", line 36, in rich_cast
    renderable = cast_method()
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/self_outdated_check.py", line 130, in __rich__
    pip_cmd = get_best_invocation_for_this_pip()
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/utils/entrypoints.py", line 58, in get_best_invocation_for_this_pip
    if found_executable and os.path.samefile(
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/genericpath.py", line 101, in samefile
    s2 = os.stat(f2)
FileNotFoundError: [Errno 2] No such file or directory: '/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/bin/pip'
Call stack:
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/__main__.py", line 31, in <module>
    sys.exit(_main())
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/cli/main.py", line 70, in main
    return command.main(cmd_args)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 101, in main
    return self._main(args)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 223, in _main
    self.handle_pip_version_check(options)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check
    pip_self_version_check(session, options)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check
    logger.info("[present-rich] %s", upgrade_prompt)
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/logging/__init__.py", line 1477, in info
    self._log(INFO, msg, args, **kwargs)
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/logging/__init__.py", line 1624, in _log
    self.handle(record)
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/logging/__init__.py", line 1634, in handle
    self.callHandlers(record)
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/logging/__init__.py", line 1696, in callHandlers
    hdlr.handle(record)
  File "/nix/store/dlhmz1f440qvxdxcbpnx3xqwdz4m1c7x-python3-3.10.4/lib/python3.10/logging/__init__.py", line 968, in handle
    self.emit(record)
  File "/nix/store/v9w3nacsdmfzgpd5slw789r4ylsi4ds9-python3.10-pip-22.1.2/lib/python3.10/site-packages/pip/_internal/utils/logging.py", line 179, in emit
    self.handleError(record)
Message: '[present-rich] %s'
Arguments: (UpgradePrompt(old='22.1.2', new='22.3'),)
Finished executing setuptoolsShellHook

Found a workaround:

PIP_DISABLE_PIP_VERSION_CHECK=1 nix develop .

or more permanently:

pip config set global.disable-pip-version-check true

The problem is triggered in the pip upgrade check, skipping that makes the setuptoolsShellHook execute properly.

This happens because of a too strict check in pip.
See pip broken with strict version check · Issue #198059 · NixOS/nixpkgs · GitHub