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

feat(cli): fallback to build-in poetry-core on build #10092

Merged
merged 1 commit into from
Feb 1, 2025

Conversation

finswimmer
Copy link
Member

@finswimmer finswimmer commented Jan 22, 2025

Pull Request Check List

When we cannot find a [build-system] section or a build-backend within this section in a pyproject.toml we assume setuptools as the build backend This is fine according to PEP 517.

While this approach is valid for dependencies it would be surprising on poetry build, now that an isolated build happens if the build-system is not poetry-core.

Before #10059 poetry build had created the package even if no build backend was defined in the pyproject.toml. Now it would fallback to setuptools which would results in a broken package.

This PR checks if a there is a [build-system] section and has a build-backend defined in the pyproject.toml and will use the build-in poetry-core if none is define. In addition a warning is presented to the user to fix it.

  • Added tests for changed code.
  • Updated documentation for changed code.

Summary by Sourcery

Tests:

  • Added a test to verify that the build command fails when no build system is defined in the pyproject.toml file.

Summary by Sourcery

Tests:

  • Added a test to verify that the build command fails when no build system is defined in the pyproject.toml file.

Copy link

sourcery-ai bot commented Jan 22, 2025

Reviewer's Guide by Sourcery

This pull request ensures that a build backend is defined in the pyproject.toml file when running poetry build. It prevents the build process from falling back to setuptools, which could result in a broken package. The changes include adding a check for the build backend and a new test case to verify the behavior.

Sequence diagram for poetry build command with build backend check

sequenceDiagram
    actor User
    participant CLI
    participant BuildCommand
    participant PyProject

    User->>CLI: poetry build
    CLI->>BuildCommand: execute build
    BuildCommand->>PyProject: check build-backend
    alt No build backend defined
        PyProject-->>BuildCommand: build-backend not found
        BuildCommand-->>CLI: return error (1)
        CLI-->>User: Show error message
    else Build backend defined
        PyProject-->>BuildCommand: build-backend found
        BuildCommand->>BuildCommand: proceed with build
        BuildCommand-->>CLI: return success (0)
        CLI-->>User: Build completed
    end
Loading

File-Level Changes

Change Details Files
Added a check to ensure a build backend is defined in pyproject.toml.
  • Added a _has_build_backend_defined method to check for the presence of a build backend in the pyproject.toml file.
  • Modified the build method to check if a build backend is defined and abort the build if it is not.
src/poetry/console/commands/build.py
Added a test case to verify that the build command fails when no build system is defined.
  • Added a new test case test_build_handler_raise_on_no_build_system to verify that the build command fails when no build system is defined in the pyproject.toml file.
tests/console/commands/test_build.py
Added new fixtures for testing the build command.
  • Added a pyproject.toml file without a build backend.
  • Added a pyproject.toml file without a build system.
  • Added a README.md file for the no_build_backend fixture.
  • Added a README.md file for the no_build_system fixture.
tests/fixtures/build_systems/no_build_backend/pyproject.toml
tests/fixtures/build_systems/no_build_system/pyproject.toml
tests/fixtures/build_systems/no_build_backend/README.md
tests/fixtures/build_systems/no_build_system/README.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time. You can also use
    this command to specify where the summary should be inserted.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@finswimmer finswimmer force-pushed the no-build-system-defined branch from c1ce753 to 5634612 Compare January 22, 2025 05:59
Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @finswimmer - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Please update the documentation to explain this new validation check and behavior change, since this changes how Poetry handles projects without a build-system defined.
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@finswimmer finswimmer requested a review from a team January 22, 2025 06:05
@finswimmer finswimmer force-pushed the no-build-system-defined branch from 5634612 to 626abfc Compare January 22, 2025 06:19
@finswimmer finswimmer changed the title feat(cli): ensure build-system is defined when running poetry build feat(cli): ensure build backend is defined when running poetry build Jan 22, 2025
@finswimmer
Copy link
Member Author

@sourcery-ai review

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @finswimmer - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Please update the documentation to describe this new validation check for build backend configuration. This is a user-facing change that should be documented.
Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

def build(self, options: BuildOptions) -> int:
if not self.poetry.is_package_mode:
self.io.write_error_line(
"Building a package is not possible in non-package mode."
)
return 1

if not self._has_build_backend_defined():
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Consider making the error message more specific about whether the build-system section is missing or just the build-backend key

This would help users identify and fix configuration issues more quickly.

Suggested implementation:

    def _get_build_system_status(self) -> tuple[bool, bool]:
        pyproject_data = self.poetry.file.read()
        has_build_system = "build-system" in pyproject_data
        has_build_backend = "build-backend" in pyproject_data.get("build-system", {})
        return has_build_system, has_build_backend
        has_build_system, has_build_backend = self._get_build_system_status()
        if not has_build_system:
            self.io.write_error_line(
                "Missing [build-system] section in pyproject.toml. Please add this section with a build-backend."
            )
            return 1
        if not has_build_backend:
            self.io.write_error_line(
                "Missing build-backend key in [build-system] section. Please define one in pyproject.toml."
            )

@@ -114,13 +114,22 @@ def _get_builder(self) -> Callable[..., None]:

return self._build

def _has_build_backend_defined(self) -> bool:
return "build-backend" in self.poetry.file.read().get("build-system", {})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be good to move this to be something like self.poetry.pytpoject.build_system.is_fallback.

But that will need an additional property in https://github.com/python-poetry/poetry-core/blob/d97577e664d59173482a78f70e8f743cc5468851/src/poetry/core/pyproject/tables.py#L12

But for now something like this should work.

Suggested change
return "build-backend" in self.poetry.file.read().get("build-system", {})
return "build-backend" in self.poetry.pyproject.data.get("build-system", {})

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I wasn't aware of the data attribute of pyproject 👍

I thought about a flag as well. But I don't wanted to change poetry-core before. And we would pollute again poetry-core with something we only need in poetry. Actually we only need it for poetry build.

def build(self, options: BuildOptions) -> int:
if not self.poetry.is_package_mode:
self.io.write_error_line(
"Building a package is not possible in non-package mode."
)
return 1

if not self._has_build_backend_defined():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't this also be a surprise to users as this breaks previous behavior in the same way setuptools are being used? Not sure how many people leave out the section intentionally.

That said, I'd also say that the current use of setuptools is in accordance with PEP518.

Tools should not require the existence of the [build-system] table. A pyproject.toml file may be used to store configuration details other than build-related data and thus lack a [build-system] table legitimately. If the file exists but is lacking the [build-system] table then the default values as specified above should be used. If the table is specified but is missing required fields then the tool should consider it an error.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't this also be a surprise to users as this breaks previous behavior in the same way setuptools are being used?

It will surprise people for sure. But now they get an error message. Without it poetry build would build a package, but it won't contain the data people expect. So "fail fast" is a better surprise ;)

Copy link
Member

@abn abn Jan 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem is, how do you determine if they intended to use setuptools by relying on PEP518 default?

It is not unreasonable to imagine that Poetry is used for dev but the package needs setuptools for build.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But this is an edge enough case that it might be okay to enforce a build-system definition.

@finswimmer finswimmer force-pushed the no-build-system-defined branch from 626abfc to 46f3513 Compare January 22, 2025 11:53
@dimbleby
Copy link
Contributor

dimbleby commented Jan 22, 2025

we assume setuptools as the build backend This is fine according to PEP 517.

it's not only "fine" - it's what PEP517 says tools should do.

Now it would fallback to setuptools which would results in a broken package.

only results in a broken package if the pyproject.toml is not understood by setuptools, presumably? In the new PEP621 world that is not going to be a problem.

Perhaps a warning would make sense, but I suggest that erroring out where the specs say tools should not error out is overshooting.

@finswimmer
Copy link
Member Author

finswimmer commented Jan 22, 2025

In the new PEP621 world that is not going to be a problem.

In the PEP 621 world, yes. But if the project doesn't (fully) use the project section it is a problem.

As an alternative we could trigger a non-isolated build if no build-backend is given and (optional) show a warning that it would be good idea to add one to the pyproject.toml. Than poetry would behave just like before #10059.

@abn
Copy link
Member

abn commented Jan 22, 2025

Allowing the build to continue into isolated with a warning is safe enough, I reckon.

Let's not add more logic unless we need it.

That said I can already see the issues titled "why is poetry using setuptools" etc.

@radoering
Copy link
Member

I am in favor of being backward compatible to the point of using poetry-core by default if no backend is defined. Printing a warning is fine.

It will be far more common that people have no backend defined and still used poetry build than that people that have no backend defined will be wondering that poetry-core is used instead of setuptools.

@abn
Copy link
Member

abn commented Jan 22, 2025

I am okay with defaulting to poetry-core too to maintain backwards compat.

Although I was looking forward to just being able to build arbitrary setuptool projects (which a lot of times do not have the build-system specified by simply calling poetry build. But that is a niche use case.

@finswimmer finswimmer force-pushed the no-build-system-defined branch from 46f3513 to 1f08e99 Compare January 22, 2025 16:47
@finswimmer finswimmer changed the title feat(cli): ensure build backend is defined when running poetry build feat(cli): fallback to build-in poetry-core on build Jan 22, 2025
@finswimmer finswimmer force-pushed the no-build-system-defined branch from 1f08e99 to e9e227d Compare January 22, 2025 16:50
@finswimmer
Copy link
Member Author

@sourcery-ai review

@dimbleby
Copy link
Contributor

I think this is a wrong direction, the specs are explicit about what the behaviour should be in case there is no backend defined.

It is not "fall back to poetry-core", and it is not "report an error". It is "use setuptools.build_meta:__legacy__".

Anyway you will want to have an answer ready for when folk turn up complaining that poetry is not behaving as it is supposed to.

@dimbleby
Copy link
Contributor

eg poetry build will now give different results than building with any other front end. (Consider someone installing from a source distribution on PyPI.)

@finswimmer finswimmer force-pushed the no-build-system-defined branch from e9e227d to 5f134b9 Compare January 22, 2025 17:57
@finswimmer
Copy link
Member Author

eg poetry build will now give different results than building with any other front end. (Consider someone installing from a source distribution on PyPI.)

This was always the case until now, because poetry build always used poetry-core to build the package, no matter if and what build-system was given in the pyproject.toml.

It's arguable to not throw in error in the future, if no build-system is given and instead use setuptools. But doing it now would be a breaking change and we should give people time to fix there packages and/or make the transition to PEP 621.

@dimbleby
Copy link
Contributor

dimbleby commented Jan 22, 2025

This was always the case until now

this is not correct, I think there are two cases and we are perhaps talking slightly past one another

In the case of a pyproject.toml with metadata defined in tool.poetry, the only build-backend that ever would have worked was poetry-core. You are right that poetry build always used that backend regardless. Other front-ends would almost certainly fail to produce anything at all if the backend was not specified. (Edit: this is not correct, they use setuptools and produce undesirable wheels)

In the case of a PEP-621 variant pyproject.toml, poetry is unambiguously going against the spec by falling back to poetry-core. And in this case other front-ends will use setuptools, and they likely will get a wheel but not a good one, and by not going with what the spec says we are introducing this confusion.

In the tool.poetry case, there is an argument for falling back to poetry-core: I agree anyway that this is preserving the old behaviour (though not necessarily that this is a good thing!)

In the PEP-621 case I really think that there is not a good argument for falling back to poetry-core and even that it is clearly the wrong thing to do.

@radoering
Copy link
Member

I think there is one (and probably the only) good argument: backwards compatibility. As of now (no matter if PEP 621 or not) all released versions do use poetry-core as build-backend, no matter what is defined.

In my opinion, it still makes sense to default to poetry-core with a warning that this is deprecated and you should define a build-backend and in future we will fall back to setuptools because that is what the spec says.

I do not think that it is that important to be compatible with projects that do not define a build-backend (and expect setuptools) - famous last words. If you manage a project with poetry you should define a build-backend. Maybe, poetry check should give an error/warning if package-mode is true and no build-backend is defined.

@dimbleby
Copy link
Contributor

dimbleby commented Jan 23, 2025

If you manage a project with poetry you should define a build-backend.

Sure - we can go further - if you manage a project with anything at all, you should define a build backend.

So far as I know no-one thinks that omitting a build backend is the right thing to do, even the PEP517 stuff about how to handle that is (as I understand it) really aimed at projects that have not yet added a build backend.

The question is whether we are justified in overruling the specs and choosing a different fallback than we "should".

Defaulting to poetry-core clearly made sense pre-PE517 and pre-PEP621. If nothing else: poetry was here first, and it is hardly poetry's fault if the specs retrospectively asked it to do something else.

But anyway the poetry-core default made sense where there was no reasonable expectation of successfully building a poetry project except with poetry-core; and where there was definitely no hope of using poetry to build a project that used another backend. It wasn't really even a default: it was just "always use poetry-core".

But the world has moved on:

  • poetry has adopted the standard format, it is now totally reasonable to use poetry for project management while choosing a different backend eg for projects with build scripts
  • on the main branch poetry is now build-system-agnostic

IMO those changes really both drive big holes through "default to poetry-core": it is time to get in line with the standards.

(I think I've said my piece - possibly too many times, sorry! - and will leave it there)

@abn
Copy link
Member

abn commented Jan 30, 2025

I agree with

In my opinion, it still makes sense to default to poetry-core with a warning that this is deprecated and you should define a build-backend and in future we will fall back to setuptools because that is what the spec says.

And that is my vote for now. We do a hard deprecation.

  1. Issue a warning during build in the next release and fallback iff no build-backend is defined.
  2. Call attention to this in the blog post.
  3. Next release + 1 conform to spec (because in the long run this is the right thing to do).

@finswimmer finswimmer force-pushed the no-build-system-defined branch from 5f134b9 to ec51461 Compare January 30, 2025 17:47
@radoering radoering force-pushed the no-build-system-defined branch from ec51461 to a6fa788 Compare February 1, 2025 06:10
@radoering radoering enabled auto-merge (squash) February 1, 2025 06:11
@radoering radoering merged commit 1f85e6f into python-poetry:main Feb 1, 2025
53 checks passed
@radoering radoering mentioned this pull request Feb 9, 2025
4 tasks
mwalbeck pushed a commit to mwalbeck/docker-python-poetry that referenced this pull request Feb 16, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [poetry](https://github.com/python-poetry/poetry) ([changelog](https://python-poetry.org/history/)) | major | `1.8.5` -> `2.1.0` |

---

### Release Notes

<details>
<summary>python-poetry/poetry (poetry)</summary>

### [`v2.1.0`](https://github.com/python-poetry/poetry/blob/HEAD/CHANGELOG.md#210---2025-02-15)

[Compare Source](python-poetry/poetry@2.0.1...2.1.0)

##### Added

-   **Make `build` command build-system agnostic** ([#&#8203;10059](python-poetry/poetry#10059),
    [#&#8203;10092](python-poetry/poetry#10092)).
-   Add a `--config-settings` option to `poetry build` ([#&#8203;10059](python-poetry/poetry#10059)).
-   Add support for defining `config-settings` when building dependencies ([#&#8203;10129](python-poetry/poetry#10129)).
-   **Add (experimental) commands to manage Python installations** ([#&#8203;10112](python-poetry/poetry#10112)).
-   Use `findpython` to find the Python interpreters ([#&#8203;10097](python-poetry/poetry#10097)).
-   Add a `--no-truncate` option to `poetry show` ([#&#8203;9580](python-poetry/poetry#9580)).
-   Re-add support for passwords with empty usernames ([#&#8203;10088](python-poetry/poetry#10088)).
-   Add better error messages ([#&#8203;10053](python-poetry/poetry#10053),
    [#&#8203;10065](python-poetry/poetry#10065),
    [#&#8203;10126](python-poetry/poetry#10126),
    [#&#8203;10127](python-poetry/poetry#10127),
    [#&#8203;10132](python-poetry/poetry#10132)).

##### Changed

-   **`poetry new` defaults to "src" layout by default** ([#&#8203;10135](python-poetry/poetry#10135)).
-   Improve performance of locking dependencies ([#&#8203;10111](python-poetry/poetry#10111),
    [#&#8203;10114](python-poetry/poetry#10114),
    [#&#8203;10138](python-poetry/poetry#10138),
    [#&#8203;10146](python-poetry/poetry#10146)).
-   Deprecate adding sources without specifying `--priority` ([#&#8203;10134](python-poetry/poetry#10134)).

##### Fixed

-   Fix an issue where global options were not handled correctly when positioned after command options ([#&#8203;10021](python-poetry/poetry#10021),
    [#&#8203;10067](python-poetry/poetry#10067),
    [#&#8203;10128](python-poetry/poetry#10128)).
-   Fix an issue where building a dependency from source failed because of a conflict between build-system dependencies that were not required for the target environment ([#&#8203;10048](python-poetry/poetry#10048)).
-   Fix an issue where `poetry init` was not able to find a package on PyPI while adding dependencies interactively ([#&#8203;10055](python-poetry/poetry#10055)).
-   Fix an issue where the `@latest` descriptor was incorrectly passed to the core requirement parser ([#&#8203;10069](python-poetry/poetry#10069)).
-   Fix an issue where Boolean environment variables set to `True` (in contrast to `true`) were interpreted as `false` ([#&#8203;10080](python-poetry/poetry#10080)).
-   Fix an issue where `poetry env activate` reported a misleading error message ([#&#8203;10087](python-poetry/poetry#10087)).
-   Fix an issue where adding an optional dependency with `poetry add --optional` would not correctly update the lock file ([#&#8203;10076](python-poetry/poetry#10076)).
-   Fix an issue where `pip` was not installed/updated before other dependencies resulting in a race condition ([#&#8203;10102](python-poetry/poetry#10102)).
-   Fix an issue where Poetry freezes when multiple threads attempt to unlock the `keyring` simultaneously ([#&#8203;10062](python-poetry/poetry#10062)).
-   Fix an issue where markers with extras were not locked correctly ([#&#8203;10119](python-poetry/poetry#10119)).
-   Fix an issue where self-referential extras were not resolved correctly ([#&#8203;10106](python-poetry/poetry#10106)).
-   Fix an issue where Poetry could not be run from a `zipapp` ([#&#8203;10074](python-poetry/poetry#10074)).
-   Fix an issue where installation failed with a permission error when using the system environment as a user without write access to system site packages ([#&#8203;9014](python-poetry/poetry#9014)).
-   Fix an issue where a version of a dependency that is not compatible with the project's python constraint was locked. ([#&#8203;10141](python-poetry/poetry#10141)).
-   Fix an issue where Poetry wrongly reported that the current project's supported Python range is not compatible with some of the required packages Python requirement ([#&#8203;10157](python-poetry/poetry#10157)).
-   Fix an issue where the requested extras of a dependency were ignored if the same dependency (with same extras) was specified in multiple groups ([#&#8203;10158](python-poetry/poetry#10158)).

##### Docs

-   Sort commands by name in the CLI reference ([#&#8203;10035](python-poetry/poetry#10035)).
-   Add missing documentation for `env` commands ([#&#8203;10027](python-poetry/poetry#10027)).
-   Clarify that the `name` and `version` fields are always required if the `project` section is specified ([#&#8203;10033](python-poetry/poetry#10033)).
-   Add a note about restarting the shell for tab completion changes to take effect ([#&#8203;10070](python-poetry/poetry#10070)).
-   Fix the example for `project.gui-scripts` [#&#8203;10121](python-poetry/poetry#10121).
-   Explain how to include files as scripts in the project configuration ([#&#8203;9572](python-poetry/poetry#9572),
    [#&#8203;10133](python-poetry/poetry#10133)).
-   Add additional information on specifying required python versions ([#&#8203;10104](python-poetry/poetry#10104)).

##### poetry-core ([`2.1.0`](https://github.com/python-poetry/poetry-core/releases/tag/2.1.0))

-   Fix an issue where inclusive ordering with post releases was inconsistent with PEP 440 ([#&#8203;379](python-poetry/poetry-core#379)).
-   Fix an issue where invalid URI tokens in PEP 508 requirement strings were silently discarded ([#&#8203;817](python-poetry/poetry-core#817)).
-   Fix an issue where wrong markers were calculated when removing parts covered by the project's python constraint ([#&#8203;824](python-poetry/poetry-core#824)).
-   Fix an issue where optional dependencies that are not part of an extra were included in the wheel metadata ([#&#8203;830](python-poetry/poetry-core#830)).
-   Fix an issue where the `__pycache__` directory and `*.pyc` files were included in sdists and wheels ([#&#8203;835](python-poetry/poetry-core#835)).

### [`v2.0.1`](https://github.com/python-poetry/poetry/blob/HEAD/CHANGELOG.md#201---2025-01-11)

[Compare Source](python-poetry/poetry@2.0.0...2.0.1)

##### Added

-   Add support for `poetry search` in legacy sources ([#&#8203;9949](python-poetry/poetry#9949)).
-   Add a message in the `poetry source show` output when PyPI is implicitly enabled ([#&#8203;9974](python-poetry/poetry#9974)).

##### Changed

-   Improve performance for merging markers from overrides at the end of dependency resolution ([#&#8203;10018](python-poetry/poetry#10018)).

##### Fixed

-   Fix an issue where `poetry sync` did not remove packages that were not requested ([#&#8203;9946](python-poetry/poetry#9946)).
-   Fix an issue where `poetry check` failed even though there were just warnings and add a `--strict` option to fail on warnings ([#&#8203;9983](python-poetry/poetry#9983)).
-   Fix an issue where `poetry update`, `poetry add` and `poetry remove` with `--only` uninstalled packages from other groups ([#&#8203;10014](python-poetry/poetry#10014)).
-   Fix an issue where `poetry update`, `poetry add` and `poetry remove` uninstalled all extra packages ([#&#8203;10016](python-poetry/poetry#10016)).
-   Fix an issue where `poetry self update` did not recognize Poetry's own environment ([#&#8203;9995](python-poetry/poetry#9995)).
-   Fix an issue where read-only system site-packages were not considered when loading an environment with system site-packages ([#&#8203;9942](python-poetry/poetry#9942)).
-   Fix an issue where an error message in `poetry install` started with `Warning:` instead of `Error:` ([#&#8203;9945](python-poetry/poetry#9945)).
-   Fix an issue where `Command.set_poetry`, which is used by plugins, was removed ([#&#8203;9981](python-poetry/poetry#9981)).
-   Fix an issue where the help text of `poetry build --clean` showed a malformed short option instead of the description ([#&#8203;9994](python-poetry/poetry#9994)).

##### Docs

-   Add a FAQ entry for the migration from Poetry-specific fields to the `project` section ([#&#8203;9996](python-poetry/poetry#9996)).
-   Fix examples for `project.readme` and `project.urls` ([#&#8203;9948](python-poetry/poetry#9948)).
-   Add a warning that package sources are a Poetry-specific feature that is not included in core metadata ([#&#8203;9935](python-poetry/poetry#9935)).
-   Replace `poetry install --sync` with `poetry sync` in the section about synchronizing dependencies ([#&#8203;9944](python-poetry/poetry#9944)).
-   Replace `poetry shell` with `poetry env activate` in the basic usage section ([#&#8203;9963](python-poetry/poetry#9963)).
-   Mention that `project.name` is always required when the `project` section is used ([#&#8203;9989](python-poetry/poetry#9989)).
-   Fix the constraint of `poetry-plugin-export` in the section about `poetry export` ([#&#8203;9954](python-poetry/poetry#9954)).

##### poetry-core ([`2.0.1`](https://github.com/python-poetry/poetry-core/releases/tag/2.0.1))

-   Replace the deprecated core metadata field `Home-page` with `Project-URL: Homepage` ([#&#8203;807](python-poetry/poetry-core#807)).
-   Fix an issue where includes from `tool.poetry.packages` without a specified `format` were not initialized with the default value resulting in a `KeyError` ([#&#8203;805](python-poetry/poetry-core#805)).
-   Fix an issue where some `project.urls` entries were not processed correctly resulting in a `KeyError` ([#&#8203;807](python-poetry/poetry-core#807)).
-   Fix an issue where dynamic `project.dependencies` via `tool.poetry.dependencies` were ignored if `project.optional-dependencies` were defined ([#&#8203;811](python-poetry/poetry-core#811)).

### [`v2.0.0`](https://github.com/python-poetry/poetry/blob/HEAD/CHANGELOG.md#200---2025-01-05)

[Compare Source](python-poetry/poetry@1.8.5...2.0.0)

##### Added

-   **Add support for the `project` section in the `pyproject.toml` file according to PEP 621** ([#&#8203;9135](python-poetry/poetry#9135),
    [#&#8203;9917](python-poetry/poetry#9917)).
-   **Add support for defining Poetry plugins that are required by the project and automatically installed if not present** ([#&#8203;9547](python-poetry/poetry#9547)).
-   **Lock resulting markers and groups and add a `installer.re-resolve` option (default: `true`) to allow installation without re-resolving** ([#&#8203;9427](python-poetry/poetry#9427)).
-   Add a `--local-version` option to `poetry build` ([#&#8203;9064](python-poetry/poetry#9064)).
-   Add a `--clean` option to `poetry build` ([#&#8203;9067](python-poetry/poetry#9067)).
-   Add FIPS support for `poetry publish` ([#&#8203;9101](python-poetry/poetry#9101)).
-   Add the option to use `poetry new` interactively and configure more fields ([#&#8203;9101](python-poetry/poetry#9101)).
-   Add a config option `installer.only-binary` to enforce the use of binary distribution formats ([#&#8203;9150](python-poetry/poetry#9150)).
-   Add backend support for legacy repository search ([#&#8203;9132](python-poetry/poetry#9132)).
-   Add support to resume downloads from connection resets ([#&#8203;9422](python-poetry/poetry#9422)).
-   Add the option to define a constraint for the required Poetry version to manage the project ([#&#8203;9547](python-poetry/poetry#9547)).
-   Add an `--all-groups` option to `poetry install` ([#&#8203;9744](python-poetry/poetry#9744)).
-   Add an `poetry env activate` command as replacement of `poetry shell` ([#&#8203;9763](python-poetry/poetry#9763)).
-   Add a `--markers` option to `poetry add` to add a dependency with markers ([#&#8203;9814](python-poetry/poetry#9814)).
-   Add a `--migrate` option to `poetry config` to migrate outdated configs ([#&#8203;9830](python-poetry/poetry#9830)).
-   Add a `--project` option to search the `pyproject.toml` file in another directory without switching the directory ([#&#8203;9831](python-poetry/poetry#9831)).
-   Add support for shortened hashes to define git dependencies ([#&#8203;9748](python-poetry/poetry#9748)).
-   Add partial support for conflicting extras ([#&#8203;9553](python-poetry/poetry#9553)).
-   Add a `poetry sync` command as replacement of `poetry install --sync` ([#&#8203;9801](python-poetry/poetry#9801)).

##### Changed

-   **Change the default behavior of `poetry lock` to `--no-update` and introduce a `--regenerate` option for the old default behavior** ([#&#8203;9327](python-poetry/poetry#9327)).
-   **Remove the dependency on `poetry-plugin-export` so that `poetry export` is not included per default** ([#&#8203;5980](python-poetry/poetry#5980)).
-   **Outsource `poetry shell` into `poetry-plugin-shell`** ([#&#8203;9763](python-poetry/poetry#9763)).
-   **Change the interface of `poetry add --optional` to require an extra the optional dependency is added to** ([#&#8203;9135](python-poetry/poetry#9135)).
-   **Actually switch the directory when using `--directory`/`-C`** ([#&#8203;9831](python-poetry/poetry#9831)).
-   **Drop support for Python 3.8** ([#&#8203;9692](python-poetry/poetry#9692)).
-   Rename `experimental.system-git-client` to `experimental.system-git` ([#&#8203;9787](python-poetry/poetry#9787), [#&#8203;9795](python-poetry/poetry#9795)).
-   Replace `virtualenvs.prefer-active-python` by the inverse setting `virtualenvs.use-poetry-python` and prefer the active Python by default ([#&#8203;9786](python-poetry/poetry#9786)).
-   Deprecate several fields in the `tool.poetry` section in favor of the respective fields in the `project` section in the `pyproject.toml` file ([#&#8203;9135](python-poetry/poetry#9135)).
-   Deprecate `poetry install --sync` in favor of `poetry sync` ([#&#8203;9801](python-poetry/poetry#9801)).
-   Upgrade the warning if the current project cannot be installed to an error ([#&#8203;9333](python-poetry/poetry#9333)).
-   Remove special handling for `platformdirs 2.0` macOS config directory ([#&#8203;8916](python-poetry/poetry#8916)).
-   Tweak PEP 517 builds ([#&#8203;9094](python-poetry/poetry#9094)).
-   Use Poetry instead of pip to manage dependencies in isolated build environments ([#&#8203;9168](python-poetry/poetry#9168),
    [#&#8203;9227](python-poetry/poetry#9227)).
-   Trust empty `Requires-Dist` with modern metadata ([#&#8203;9078](python-poetry/poetry#9078)).
-   Do PEP 517 builds instead of parsing `setup.py` to determine dependencies ([#&#8203;9099](python-poetry/poetry#9099)).
-   Drop support for reading lock files prior version 1.0 (created with Poetry prior 1.1) ([#&#8203;9345](python-poetry/poetry#9345)).
-   Default to `>=` instead of `^` for the Python requirement when initializing a new project ([#&#8203;9558](python-poetry/poetry#9558)).
-   Limit `build-system` to the current major version of `poetry-core` when initializing a new project ([#&#8203;9812](python-poetry/poetry#9812)).
-   Remove pip-based installation, i.e. `installer.modern-installation = false` ([#&#8203;9392](python-poetry/poetry#9392)).
-   Remove `virtualenvs.options.no-setuptools` config option and never include `setuptools` per default ([#&#8203;9331](python-poetry/poetry#9331)).
-   Rename exceptions to have an `Error` suffix ([#&#8203;9705](python-poetry/poetry#9705)).
-   Remove deprecated CLI options and methods and revoke the deprecation of `--dev` ([#&#8203;9732](python-poetry/poetry#9732)).
-   Ignore installed packages during dependency resolution ([#&#8203;9851](python-poetry/poetry#9851)).
-   Improve the error message on upload failure ([#&#8203;9701](python-poetry/poetry#9701)).
-   Improve the error message if the current project cannot be installed to include another root cause ([#&#8203;9651](python-poetry/poetry#9651)).
-   Improve the output of `poetry show <package>` ([#&#8203;9750](python-poetry/poetry#9750)).
-   Improve the error message for build errors ([#&#8203;9870](python-poetry/poetry#9870)).
-   Improve the error message when trying to remove a package from a project without any dependencies ([#&#8203;9918](python-poetry/poetry#9918)).
-   Drop the direct dependency on `crashtest` ([#&#8203;9108](python-poetry/poetry#9108)).
-   Require `keyring>=23.3.1` ([#&#8203;9167](python-poetry/poetry#9167)).
-   Require `build>=1.2.1` ([#&#8203;9283](python-poetry/poetry#9283)).
-   Require `dulwich>=0.22.6` ([#&#8203;9748](python-poetry/poetry#9748)).

##### Fixed

-   Fix an issue where git dependencies with extras could only be cloned if a branch was specified explicitly ([#&#8203;7028](python-poetry/poetry#7028)).
-   Fix an issue where `poetry env remove` failed if `virtualenvs.in-project` was set to `true` ([#&#8203;9118](python-poetry/poetry#9118)).
-   Fix an issue where locking packages with a digit at the end of the name and non-standard sdist names failed ([#&#8203;9189](python-poetry/poetry#9189)).
-   Fix an issue where credentials where not passed when trying to download an URL dependency ([#&#8203;9202](python-poetry/poetry#9202)).
-   Fix an issue where using uncommon group names with `poetry add` resulted in a broken `pyproject.toml` ([#&#8203;9277](python-poetry/poetry#9277)).
-   Fix an issue where an inconsistent entry regarding the patch version of Python was kept in `envs.toml` ([#&#8203;9286](python-poetry/poetry#9286)).
-   Fix an issue where relative paths were not resolved properly when using `poetry build --directory` ([#&#8203;9433](python-poetry/poetry#9433)).
-   Fix an issue where unrequested extras were not uninstalled when running `poetry install` without an existing lock file ([#&#8203;9345](python-poetry/poetry#9345)).
-   Fix an issue where the `poetry-check` pre-commit hook did not trigger if only `poetry.lock` has changed ([#&#8203;9504](python-poetry/poetry#9504)).
-   Fix an issue where files (rather than directories) could not be added as single page source ([#&#8203;9166](python-poetry/poetry#9166)).
-   Fix an issue where invalid constraints were generated when adding a package with a local version specifier ([#&#8203;9603](python-poetry/poetry#9603)).
-   Fix several encoding warnings ([#&#8203;8893](python-poetry/poetry#8893)).
-   Fix an issue where `virtualenvs.prefer-active-python` was not respected ([#&#8203;9278](python-poetry/poetry#9278)).
-   Fix an issue where the line endings of the lock file were changed ([#&#8203;9468](python-poetry/poetry#9468)).
-   Fix an issue where installing multiple dependencies from the same git repository failed sporadically due to a race condition ([#&#8203;9658](python-poetry/poetry#9658)).
-   Fix an issue where installing multiple dependencies from forked monorepos failed sporadically due to a race condition ([#&#8203;9723](python-poetry/poetry#9723)).
-   Fix an issue where an extra package was not installed if it is required by multiple extras ([#&#8203;9700](python-poetry/poetry#9700)).
-   Fix an issue where a `direct_url.json` with vcs URLs not compliant with PEP 610 was written ([#&#8203;9007](python-poetry/poetry#9007)).
-   Fix an issue where other files than wheels were recognized as wheels ([#&#8203;9770](python-poetry/poetry#9770)).
-   Fix an issue where `installer.max-workers` was ignored for the implicit PyPI source ([#&#8203;9815](python-poetry/poetry#9815)).
-   Fix an issue where local settings (from `poetry.toml`) were ignored for the implicit PyPI source ([#&#8203;9816](python-poetry/poetry#9816)).
-   Fix an issue where different `dulwich` versions resulted in different hashes for a git dependency from a tag ([#&#8203;9849](python-poetry/poetry#9849)).
-   Fix an issue where installing a yanked package with no dependencies failed with an `IndexError` ([#&#8203;9505](python-poetry/poetry#9505)).
-   Fix an issue where a package could not be added from a source that required an empty password ([#&#8203;9850](python-poetry/poetry#9850)).
-   Fix an issue where setting `allow-prereleases = false` still allowed pre-releases if no other solution was found ([#&#8203;9798](python-poetry/poetry#9798)).
-   Fix an issue where the wrong environment was used for checking if an installed package is from system site packages ([#&#8203;9861](python-poetry/poetry#9861)).
-   Fix an issue where build errors from builds to retrieve metadata information were hidden ([#&#8203;9870](python-poetry/poetry#9870)).
-   Fix an issue where `poetry check` falsely reported that an invalid source "pypi" is referenced in dependencies ([#&#8203;9475](python-poetry/poetry#9475)).
-   Fix an issue where `poetry install --sync` tried to uninstall system site packages if the virtual environment was created with `virtualenvs.options.system-site-packages = true` ([#&#8203;9863](python-poetry/poetry#9863)).
-   Fix an issue where HTTP streaming requests were not closed properly when not completely consumed ([#&#8203;9899](python-poetry/poetry#9899)).

##### Docs

-   Add information about getting test coverage in the contribution guide ([#&#8203;9726](python-poetry/poetry#9726)).
-   Mention `pre-commit-update` as an alternative to `pre-commit autoupdate` ([#&#8203;9716](python-poetry/poetry#9716)).
-   Improve the explanation of `exclude` and `include` ([#&#8203;9734](python-poetry/poetry#9734)).
-   Add information about compatible release requirements, i.e. `~=` ([#&#8203;9783](python-poetry/poetry#9783)).
-   Add documentation for using a build script to build extension modules ([#&#8203;9864](python-poetry/poetry#9864)).

##### poetry-core ([`2.0.0`](https://github.com/python-poetry/poetry-core/releases/tag/2.0.0))

-   Add support for non PEP440 compliant version in the `platform_release` marker ([#&#8203;722](python-poetry/poetry-core#722)).
-   Add support for string comparisons with `in` / `not in` in generic constraints ([#&#8203;722](python-poetry/poetry-core#722)).
-   Add support for script files that are generated by a build script ([#&#8203;710](python-poetry/poetry-core#710)).
-   Add support for `SOURCE_DATE_EPOCH` when building packages ([#&#8203;766](python-poetry/poetry-core#766),
    [#&#8203;781](python-poetry/poetry-core#781)).
-   Create `METADATA` files with version 2.3 instead of 2.2 ([#&#8203;707](python-poetry/poetry-core#707)).
-   Remove support for `x` in version constraints ([#&#8203;770](python-poetry/poetry-core#770)).
-   Remove support for scripts with extras ([#&#8203;708](python-poetry/poetry-core#708)).
-   Remove deprecated features and interfaces ([#&#8203;702](python-poetry/poetry-core#702),
    [#&#8203;769](python-poetry/poetry-core#769)).
-   Deprecate `tool.poetry.dev-dependencies` in favor of `tool.poetry.group.dev.dependencies` ([#&#8203;754](python-poetry/poetry-core#754)).
-   Fix an issue where the `platlib` directory of the wrong Python was used ([#&#8203;726](python-poetry/poetry-core#726)).
-   Fix an issue where building a wheel in a nested output directory results in an error ([#&#8203;762](python-poetry/poetry-core#762)).
-   Fix an issue where `+` was not allowed in git URL paths ([#&#8203;765](python-poetry/poetry-core#765)).
-   Fix an issue where the temporary directory was not cleaned up on error ([#&#8203;775](python-poetry/poetry-core#775)).
-   Fix an issue where the regular expression for author names was too restrictive ([#&#8203;517](python-poetry/poetry-core#517)).
-   Fix an issue where basic auth http(s) credentials could not be parsed ([#&#8203;791](python-poetry/poetry-core#791)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS44Ni4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTY0LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: https://git.walbeck.it/walbeck-it/docker-python-poetry/pulls/1319
Co-authored-by: renovate-bot <[email protected]>
Co-committed-by: renovate-bot <[email protected]>
Copy link

github-actions bot commented Mar 4, 2025

This pull request 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 Mar 4, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants