Skip to content

Execute "build" before "scripts" #8856

@weisslj

Description

@weisslj

I noticed that the undocumented build.py step is executed after tool.poetry.scripts. This is bad if build.py is used to generate one of those scripts. My proposal is to run build.py before tool.poetry.scripts.

Example

pyproject.toml:

[tool.poetry]
name = "sample"
version = "0.1.0"
description = ""
authors = []

[tool.poetry.build]
generate-setup-file = true
script = "build.py"  # generates sample/sample_script

[tool.poetry.scripts]
generated_script = { reference = "sample/sample_script", type = "file" }

[build-system]
requires = ["poetry-core", "setuptools"]
build-backend = "poetry.core.masonry.api"

build.py:

import os

def build(_setup_kwargs):
    script_dir = os.path.dirname(os.path.realpath(__file__))
    output_file = os.path.join(script_dir, 'sample/sample_script')
    with open(output_file, 'w') as stream:
        stream.write('#!/usr/bin/env bash\necho "Sample Script"\n')
    os.chmod(output_file, 0o755)

Current output:

tmp/sample$ poetry --version
Poetry (version 1.8.2)
tmp/sample$ mkdir -p sample
tmp/sample$ touch sample/__init__.py
tmp/sample$ poetry build
Preparing build environment with build-system requirements poetry-core, setuptools
Building sample (0.1.0)
  - Building sdist

/home/weisslj/tmp/sample/sample/sample_script in script specification (generated_script) is not found.

Expected output:

tmp/sample$ poetry --version
Poetry (version 1.8.2)
tmp/sample$ mkdir -p sample
tmp/sample$ touch sample/__init__.py
tmp/sample$ poetry build
Preparing build environment with build-system requirements poetry-core, setuptools
Building sample (0.1.0)
  - Building sdist
  - Built sample-0.1.0.tar.gz
  - Building wheel
running build
running build_py
creating /home/weisslj/tmp/sample/build
creating /home/weisslj/tmp/sample/build/lib
creating /home/weisslj/tmp/sample/build/lib/sample
copying sample/__init__.py -> /home/weisslj/tmp/sample/build/lib/sample
copying sample/__init__.py -> /home/weisslj/tmp/sample/build/lib/sample
copying sample/sample_script -> /home/weisslj/tmp/sample/build/lib/sample
running build_scripts
creating /home/weisslj/tmp/sample/build/scripts-3.11
copying sample/sample_script -> /home/weisslj/tmp/sample/build/scripts-3.11
  - Built sample-0.1.0-cp311-cp311-manylinux_2_36_x86_64.whl

The wheel should contain sample_script as script:

tmp/sample$ unzip -l dist/sample-0.1.0-cp311-cp311-manylinux_2_36_x86_64.whl | grep sample_script
       41  1980-01-01 00:00   sample/sample_script
       41  1980-01-01 00:00   sample-0.1.0.data/scripts/sample_script

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/featureFeature requests/implementationsstatus/triageThis issue needs to be triaged

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions