Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

poetry build --directory with relative path broken #9877

Closed
Angivare opened this issue Nov 28, 2024 · 2 comments
Closed

poetry build --directory with relative path broken #9877

Angivare opened this issue Nov 28, 2024 · 2 comments
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged

Comments

@Angivare
Copy link

Description

poetry build -C <path> does not work if path is relative.

Example:

mkdir foobar
cd foobar
poetry init
mkdir foobar
touch README.md foobar/script.py
cd ..
poetry build -C foobar

Gives:

Building foobar (0.1.0)
  - Building sdist

[Errno 2] No such file or directory: '/home/angivare/foobar/foobar/foobar/script.py'

Workarounds

Use absolute path, or just cd and do not use -C

Poetry Installation Method

pip

Operating System

Ubuntu 22.04

Poetry Version

1.8.4

Poetry Configuration

cache-dir = "/home/angivare/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/angivare/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

Python Sysconfig

No response

Example pyproject.toml

No response

Poetry Runtime Logs

angivare@angivare:~$ poetry build -C foobar -vvv
Loading configuration file /home/angivare/.config/pypoetry/config.toml
Loading configuration file /home/angivare/.config/pypoetry/auth.toml
Using virtualenv: /home/angivare/.pyenv/versions/3.12.3/envs/poetry-debug
Building foobar (0.1.0)
  - Building sdist
  - Adding: foobar/foobar/script.py
  - Adding: README.md
  - Adding: pyproject.toml

  Stack trace:

  10  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/application.py:327 in run
       325│ 
       326│             try:
     → 327│                 exit_code = self._run(io)
       328│             except BrokenPipeError:
       329│                 # If we are piped to another process, it may close early and send a

   9  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/poetry/console/application.py:190 in _run
       188│         self._load_plugins(io)
       189│ 
     → 190│         exit_code: int = super()._run(io)
       191│         return exit_code
       192│ 

   8  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/application.py:431 in _run
       429│             io.input.interactive(interactive)
       430│ 
     → 431│         exit_code = self._run_command(command, io)
       432│         self._running_command = None
       433│ 

   7  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/application.py:473 in _run_command
       471│ 
       472│         if error is not None:
     → 473│             raise error
       474│ 
       475│         return terminate_event.exit_code

   6  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/application.py:457 in _run_command
       455│ 
       456│             if command_event.command_should_run():
     → 457│                 exit_code = command.run(io)
       458│             else:
       459│                 exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED

   5  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/commands/base_command.py:117 in run
       115│         io.input.validate()
       116│ 
     → 117│         return self.execute(io) or 0
       118│ 
       119│     def merge_application_definition(self, merge_args: bool = True) -> None:

   4  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/cleo/commands/command.py:61 in execute
        59│ 
        60│         try:
     →  61│             return self.handle()
        62│         except KeyboardInterrupt:
        63│             return 1

   3  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/poetry/console/commands/build.py:66 in handle
        64│             if not dist_dir.is_absolute():
        65│                 dist_dir = self.poetry.pyproject_path.parent / dist_dir
     →  66│             self._build(fmt, executable=env.python, target_dir=dist_dir)
        67│ 
        68│         return 0

   2  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/poetry/console/commands/build.py:49 in _build
        47│ 
        48│         for builder in builders:
     →  49│             builder(self.poetry, executable=executable).build(target_dir)
        50│ 
        51│     def handle(self) -> int:

   1  ~/.pyenv/versions/3.12.3/envs/poetry-debug/lib/python3.12/site-packages/poetry/core/masonry/builders/sdist.py:83 in build
        81│ 
        82│             for file in sorted(files_to_add, key=lambda x: x.relative_to_source_root()):
     →  83│                 tar_info = tar.gettarinfo(
        84│                     str(file.path),
        85│                     arcname=pjoin(tar_dir, str(file.relative_to_source_root())),

  FileNotFoundError

  [Errno 2] No such file or directory: '/home/angivare/foobar/foobar/foobar/script.py'

  at ~/.pyenv/versions/3.12.3/lib/python3.12/tarfile.py:2037 in gettarinfo
      2033│ 
      2034│         # Use os.stat or os.lstat, depending on if symlinks shall be resolved.
      2035│         if fileobj is None:
      2036│             if not self.dereference:
    → 2037│                 statres = os.lstat(name)
      2038│             else:
      2039│                 statres = os.stat(name)
      2040│         else:
      2041│             statres = os.fstat(fileobj.fileno())
@Angivare Angivare added kind/bug Something isn't working as expected status/triage This issue needs to be triaged labels Nov 28, 2024
@finswimmer
Copy link
Member

Hey @Angivare,

thanks for your report and your reproducible example 👍

This is fixed by #9831 and will be available with Poetry 2.0.

fin swimmer

Copy link

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.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 29, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged
Projects
None yet
Development

No branches or pull requests

2 participants