You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
poetry install does not honor build-system.requires #6154
Running poetry install fails because it attempts to build the project without installing build-system.requires packages.
I would have expected the install command to create an isolated environment, install the build requirements and perform the build in that isolated environment, and then install the produced artifact in my current environment.
Reacted by Olivier 'reivilibre', Pavel Kulyov, Grzegorz Mrukwa, Sam Grayson, Jairo Llopis, Michael Blaß and benedikt-bartscher
The exact same issue was described in #2789, which was marked as solved, but the issue is still present on Poetry 1.2.0b3. I didn't check if this is a regression from when this PR was merged.
This is currently intentional -- Poetry has never respected the build-system entry for a Poetry-managed project. We might want to establish consensus on this being a desired behavior, since currently you can install any needed build dependencies using a Poetry group or similar (but this will result in duplication of deps in pyproject.toml).
Re: this being a regression, the changes in that PR were explicitly scoped to use of build scripts.
Also, Poetry does not perform builds in an isolated/pep 517 environment, but instead uses the 'main' environment poetry install uses, as this is the only way to use lockfile versions during the build with the current architecture. It is possible to re-architect this so that a clean build environment is used and the build-system deps are only installed there (as opposed to polluting the dev group implicitly or similar) -- however that will require the implementation of a lockfile-aware poetry-core first (which we have already discussed/planned).
Also, it does seem poetry uses an isolated environment to build this package.
Command ['/tmp/tmpx6y_j1ku/.venv/bin/python', 'setup.py', 'egg_info'] errored with the following return code 1, and output:
Traceback (most recent call last):
File "/home/rscholz/Projects/KIWI/python-venv/.venv/src/jupyterlab_templates/setup.py", line 4, in <module>
from jupyter_packaging import (
ModuleNotFoundError: No module named 'jupyter_packaging'
Your issue is entirely different @randolf-scholz -- this issue is about build-system.requires for Poetry-managed projects, and not for dependencies that don't use Poetry. Please reach out via Discord or Discussions for support.
I raised this at #7909 as a potentially separate issue, but it might be the same thing I'm encountering.
The pyproject.toml is available on the linked issue, but for a TLDR here, we have a build.py that compiles cython, and so our build requires include both cython and numpy. A poetry build works fine. But a poetry install does not, because it seems when "Getting requirements to build editable", setuptools/build_meta.py is run (via the --isolated tag in the parent pip invocation) in an environment which does not respect the build requirements.
Full stack from our failing docker build below:
=> [builder 11/12] RUN rm -f /app/id_rsa && poetry build 17.1s
=> ERROR [builder 12/12] RUN poetry install --only-root -vvv 3.7s
------
> [builder 12/12] RUN poetry install --only-root -vvv:
#0 0.784 Loading configuration file /app/poetry.toml
#0 0.818 Skipping virtualenv creation, as specified in config file.
#0 0.998 Installing dependencies from lock file
#0 1.181
#0 1.181 Finding the necessary packages for the current system
#0 1.195
#0 1.195 Installing the current project: optimiser (0.1.0)
#0 1.195 - Building package optimiser in editable mode
#0 1.195 - Falling back on using a setup.py
#0 3.141
#0 3.141 Stack trace:
#0 3.141
#0 3.141 2 /opt/venv/lib/python3.9/site-packages/poetry/utils/env.py:1543 in _run
#0 3.206 1541│ return subprocess.call(cmd, stderr=stderr, env=env, **kwargs)
#0 3.206 1542│ else:
#0 3.206 → 1543│ output = subprocess.check_output(cmd, stderr=stderr, env=env, **kwargs)
#0 3.207 1544│ except CalledProcessError as e:
#0 3.207 1545│ raise EnvCommandError(e, input=input_)
#0 3.207
#0 3.207 1 /usr/local/lib/python3.9/subprocess.py:424 in check_output
#0 3.261 422│ kwargs['input'] = empty
#0 3.261 423│
#0 3.261 → 424│ return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
#0 3.261 425│ **kwargs).stdout
#0 3.261 426│
#0 3.261
#0 3.261 CalledProcessError
#0 3.261
#0 3.261 Command '['/opt/venv/bin/python', '-m', 'pip', 'install', '--disable-pip-version-check', '--isolated', '--no-input', '--prefix', '/opt/venv', '--upgrade', '--no-deps', '-e', '/app']' returned non-zero exit status 1.
#0 3.261
#0 3.261 at /usr/local/lib/python3.9/subprocess.py:528 in run
#0 3.317 524│ # We don't call process.wait() as .__exit__ does that for us.
#0 3.317 525│ raise
#0 3.317 526│ retcode = process.poll()
#0 3.317 527│ if check and retcode:
#0 3.317 → 528│ raise CalledProcessError(retcode, process.args,
#0 3.317 529│ output=stdout, stderr=stderr)
#0 3.317 530│ return CompletedProcess(process.args, retcode, stdout, stderr)
#0 3.317 531│
#0 3.317 532│
#0 3.317
#0 3.317 The following error occurred when trying to handle this error:
#0 3.317
#0 3.317
#0 3.317 Stack trace:
#0 3.317
#0 3.317 2 /opt/venv/lib/python3.9/site-packages/poetry/utils/pip.py:56 in pip_install
#0 3.319 54│
#0 3.319 55│ try:
#0 3.319 → 56│ return environment.run_pip(*args)
#0 3.319 57│ except EnvCommandError as e:
#0 3.319 58│ raise PoetryException(f"Failed to install {path.as_posix()}") from e
#0 3.319
#0 3.319 1 /opt/venv/lib/python3.9/site-packages/poetry/utils/env.py:1505 in run_pip
#0 3.379 1503│ pip = self.get_pip_command()
#0 3.379 1504│ cmd = pip + list(args)
#0 3.379 → 1505│ return self._run(cmd, **kwargs)
#0 3.379 1506│
#0 3.379 1507│ def run_python_script(self, content: str, **kwargs: Any) -> int | str:
#0 3.379
#0 3.379 EnvCommandError
#0 3.380
#0 3.380 Command ['/opt/venv/bin/python', '-m', 'pip', 'install', '--disable-pip-version-check', '--isolated', '--no-input', '--prefix', '/opt/venv', '--upgrade', '--no-deps', '-e', '/app'] errored with the following return code 1
#0 3.380
#0 3.380 Output:
#0 3.380 Obtaining file:///app
#0 3.380 Installing build dependencies: started
#0 3.380 Installing build dependencies: finished with status 'done'
#0 3.380 Checking if build backend supports build_editable: started
#0 3.380 Checking if build backend supports build_editable: finished with status 'done'
#0 3.380 Getting requirements to build editable: started
#0 3.380 Getting requirements to build editable: finished with status 'error'
#0 3.380 error: subprocess-exited-with-error
#0 3.380
#0 3.380 × Getting requirements to build editable did not run successfully.
#0 3.380 │ exit code: 1
#0 3.380 ╰─> [21 lines of output]
#0 3.380 Traceback (most recent call last):
#0 3.380 File "/opt/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
#0 3.380 main()
#0 3.380 File "/opt/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
#0 3.380 json_out['return_val'] = hook(**hook_input['kwargs'])
#0 3.380 File "/opt/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 132, in get_requires_for_build_editable
#0 3.380 return hook(config_settings)
#0 3.380 File "/tmp/pip-build-env-gt_yalkq/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 450, in get_requires_for_build_editable
#0 3.380 return self.get_requires_for_build_wheel(config_settings)
#0 3.380 File "/tmp/pip-build-env-gt_yalkq/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
#0 3.380 return self._get_build_requires(config_settings, requirements=['wheel'])
#0 3.380 File "/tmp/pip-build-env-gt_yalkq/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
#0 3.380 self.run_setup()
#0 3.380 File "/tmp/pip-build-env-gt_yalkq/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 487, in run_setup
#0 3.380 super(_BuildMetaLegacyBackend,
#0 3.380 File "/tmp/pip-build-env-gt_yalkq/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 338, in run_setup
#0 3.380 exec(code, locals())
#0 3.380 File "<string>", line 48, in <module>
#0 3.380 File "/app/builder.py", line 3, in <module>
#0 3.380 import numpy as np
#0 3.380 ModuleNotFoundError: No module named 'numpy'
#0 3.380 [end of output]
#0 3.380
#0 3.380 note: This error originates from a subprocess, and is likely not a problem with pip.
#0 3.380 error: subprocess-exited-with-error
#0 3.380
#0 3.380 × Getting requirements to build editable did not run successfully.
#0 3.380 │ exit code: 1
#0 3.380 ╰─> See above for output.
#0 3.380
#0 3.380 note: This error originates from a subprocess, and is likely not a problem with pip.
#0 3.380
#0 3.380
#0 3.380 at /opt/venv/lib/python3.9/site-packages/poetry/utils/env.py:1545 in _run
#0 3.440 1541│ return subprocess.call(cmd, stderr=stderr, env=env, **kwargs)
#0 3.440 1542│ else:
#0 3.440 1543│ output = subprocess.check_output(cmd, stderr=stderr, env=env, **kwargs)
#0 3.440 1544│ except CalledProcessError as e:
#0 3.440 → 1545│ raise EnvCommandError(e, input=input_)
#0 3.440 1546│
#0 3.441 1547│ return decode(output)
#0 3.441 1548│
#0 3.441 1549│ def execute(self, bin: str, *args: str, **kwargs: Any) -> int:
#0 3.441
#0 3.441 The following error occurred when trying to handle this error:
#0 3.441
#0 3.441
#0 3.441 Stack trace:
#0 3.441
#0 3.441 10 /opt/venv/lib/python3.9/site-packages/cleo/application.py:327 in run
#0 3.460 325│
#0 3.460 326│ try:
#0 3.460 → 327│ exit_code = self._run(io)
#0 3.460 328│ except BrokenPipeError:
#0 3.460 329│ # If we are piped to another process, it may close early and send a
#0 3.460
#0 3.460 9 /opt/venv/lib/python3.9/site-packages/poetry/console/application.py:190 in _run
#0 3.473 188│ self._load_plugins(io)
#0 3.473 189│
#0 3.473 → 190│ exit_code: int = super()._run(io)
#0 3.473 191│ return exit_code
#0 3.473 192│
#0 3.473
#0 3.473 8 /opt/venv/lib/python3.9/site-packages/cleo/application.py:431 in _run
#0 3.492 429│ io.input.interactive(interactive)
#0 3.492 430│
#0 3.492 → 431│ exit_code = self._run_command(command, io)
#0 3.492 432│ self._running_command = None
#0 3.492 433│
#0 3.492
#0 3.492 7 /opt/venv/lib/python3.9/site-packages/cleo/application.py:473 in _run_command
#0 3.512 471│
#0 3.512 472│ if error is not None:
#0 3.512 → 473│ raise error
#0 3.512 474│
#0 3.512 475│ return terminate_event.exit_code
#0 3.512
#0 3.512 6 /opt/venv/lib/python3.9/site-packages/cleo/application.py:457 in _run_command
#0 3.532 455│
#0 3.532 456│ if command_event.command_should_run():
#0 3.532 → 457│ exit_code = command.run(io)
#0 3.532 458│ else:
#0 3.532 459│ exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
#0 3.532
#0 3.532 5 /opt/venv/lib/python3.9/site-packages/cleo/commands/base_command.py:119 in run
#0 3.537 117│ io.input.validate()
#0 3.537 118│
#0 3.537 → 119│ status_code = self.execute(io)
#0 3.537 120│
#0 3.537 121│ if status_code is None:
#0 3.537
#0 3.537 4 /opt/venv/lib/python3.9/site-packages/cleo/commands/command.py:62 in execute
#0 3.546 60│
#0 3.546 61│ try:
#0 3.546 → 62│ return self.handle()
#0 3.546 63│ except KeyboardInterrupt:
#0 3.546 64│ return 1
#0 3.546
#0 3.546 3 /opt/venv/lib/python3.9/site-packages/poetry/console/commands/install.py:187 in handle
#0 3.551 185│ return 0
#0 3.551 186│
#0 3.551 → 187│ builder.build()
#0 3.551 188│
#0 3.551 189│ if overwrite:
#0 3.551
#0 3.551 2 /opt/venv/lib/python3.9/site-packages/poetry/masonry/builders/editable.py:63 in build
#0 3.560 61│ " - Falling back on using a setup.py"
#0 3.560 62│ )
#0 3.560 → 63│ self._setup_build()
#0 3.560 64│ path: Path = self._path
#0 3.560 65│ return path
#0 3.560
#0 3.560 1 /opt/venv/lib/python3.9/site-packages/poetry/masonry/builders/editable.py:112 in _setup_build
#0 3.569 110│ )
#0 3.569 111│ try:
#0 3.569 → 112│ pip_install(self._path, self._env, upgrade=True, editable=True)
#0 3.569 113│ finally:
#0 3.569 114│ shutil.move(
#0 3.569
#0 3.569 PoetryException
#0 3.569
#0 3.569 Failed to install /app
#0 3.569
#0 3.569 at /opt/venv/lib/python3.9/site-packages/poetry/utils/pip.py:58 in pip_install
#0 3.570 54│
#0 3.571 55│ try:
#0 3.571 56│ return environment.run_pip(*args)
#0 3.571 57│ except EnvCommandError as e:
#0 3.571 → 58│ raise PoetryException(f"Failed to install {path.as_posix()}") from e
#0 3.571 59│
------
Dockerfile:26
--------------------
24 | WORKDIR /app
25 | RUN rm -f /app/id_rsa && poetry build
26 | >>> RUN poetry install --only-root -vvv
27 |
28 |
--------------------
ERROR: failed to solve: process "/bin/sh -c poetry install --only-root -vvv" did not complete successfully: exit code: 1
make: *** [Makefile:21: build_image] Error 1
The exact same issue was described in #2789, which was marked as solved, but the issue is still present on Poetry 1.2.0b3. I didn't check if this is a regression from when #5401 was merged.
Not the same issue, only similar. #2789 descibes the use of a build script with generate-setup-file = false and #5401 fixed exactly that issue. However, this issue describes the use of a build script with generate-setup-file = true.
This is currently intentional -- Poetry has never respected the build-system entry for a Poetry-managed project. We might want to establish consensus on this being a desired behavior, since currently you can install any needed build dependencies using a Poetry group or similar (but this will result in duplication of deps in pyproject.toml).
Also, Poetry does not perform builds in an isolated/pep 517 environment, but instead uses the 'main' environment poetry install uses, as this is the only way to use lockfile versions during the build with the current architecture.
Maybe, that was true in the past, but it's not anymore for all kinds of Poetry-managed projects (at least since #5401). I think it's still true for projects without build scripts but in this case there are no build-system requirements except for poetry-core anyway.
As it seems projects with build scripts are built in an isolated environment (no matter if generate-setup-file is true of false).
Is this the same issue as [tool.poetry.dependencies] deps being unavailable to tool.poetry.build.script in 1.2.0 despite being installed?
Not the same, but it shows that neither locked dependencies nor build-system requirements are available. Locked dependencies are not available because an isolated environment is used instead of the project's environment.
#7975 looks like a sensible fix. It will make build-system requirements available.
It might still be surprising that locked dependencies are not available when building projects with build scripts but that's really something were consensus is needed (and that's not what this issue actually was about in the first place).
Activity
bilelomrani1 commentedon Aug 14, 2022
Same issue on macOS 12.5. A dirty hack is to add the following at the top of
build.py:The exact same issue was described in #2789, which was marked as solved, but the issue is still present on Poetry 1.2.0b3. I didn't check if this is a regression from when this PR was merged.
neersighted commentedon Aug 17, 2022
This is currently intentional -- Poetry has never respected the
build-systementry for a Poetry-managed project. We might want to establish consensus on this being a desired behavior, since currently you can install any needed build dependencies using a Poetry group or similar (but this will result in duplication of deps in pyproject.toml).neersighted commentedon Aug 17, 2022
Re: this being a regression, the changes in that PR were explicitly scoped to use of build scripts.
Also, Poetry does not perform builds in an isolated/pep 517 environment, but instead uses the 'main' environment
poetry installuses, as this is the only way to use lockfile versions during the build with the current architecture. It is possible to re-architect this so that a clean build environment is used and thebuild-systemdeps are only installed there (as opposed to polluting thedevgroup implicitly or similar) -- however that will require the implementation of a lockfile-awarepoetry-corefirst (which we have already discussed/planned).arcbtc commentedon Sep 16, 2022
+1, having exact same issue
tool.poetry.build.scriptis not using dependencies from[tool.poetry.dependencies]randolf-scholz commentedon Nov 13, 2022
@neersighted For me this issue occurs when I have a GIT-dependency that has
jupyter-packagingas a build dependency. (specifically this fork here: https://github.com/randolf-scholz/jupyterlab_templates)Also, it does seem poetry uses an isolated environment to build this package.
`/tmp/tmpx6y_j1ku/.venv/bin/pip list`
neersighted commentedon Nov 13, 2022
Your issue is entirely different @randolf-scholz -- this issue is about
build-system.requiresfor Poetry-managed projects, and not for dependencies that don't use Poetry. Please reach out via Discord or Discussions for support.adamgreig commentedon Mar 22, 2023
I believe @randolf-scholz's issue is what I've reported as a separate issue in #7702, I couldn't find any other issue about it.
Samreay commentedon May 12, 2023
I raised this at #7909 as a potentially separate issue, but it might be the same thing I'm encountering.
The pyproject.toml is available on the linked issue, but for a TLDR here, we have a
build.pythat compiles cython, and so our build requires include both cython and numpy. Apoetry buildworks fine. But apoetry installdoes not, because it seems when "Getting requirements to build editable",setuptools/build_meta.pyis run (via the--isolatedtag in the parent pip invocation) in an environment which does not respect the build requirements.Full stack from our failing
docker buildbelow:radoering commentedon Jun 10, 2023
Trying to clarify some statements:
Not the same issue, only similar. #2789 descibes the use of a build script with
generate-setup-file = falseand #5401 fixed exactly that issue. However, this issue describes the use of a build script withgenerate-setup-file = true.Maybe, that was true in the past, but it's not anymore for all kinds of Poetry-managed projects (at least since #5401). I think it's still true for projects without build scripts but in this case there are no build-system requirements except for poetry-core anyway.
As it seems projects with build scripts are built in an isolated environment (no matter if
generate-setup-fileis true of false).Not the same, but it shows that neither locked dependencies nor build-system requirements are available. Locked dependencies are not available because an isolated environment is used instead of the project's environment.
#7975 looks like a sensible fix. It will make build-system requirements available.
It might still be surprising that locked dependencies are not available when building projects with build scripts but that's really something were consensus is needed (and that's not what this issue actually was about in the first place).
github-actions commentedon Feb 29, 2024
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.