|
| 1 | +--- |
| 2 | +layout: single |
| 3 | +title: "Announcing Poetry 2.3.0" |
| 4 | +date: 2026-01-18 |
| 5 | +categories: [releases] |
| 6 | +tags: ["2.x", "2.3"] |
| 7 | +--- |
| 8 | + |
| 9 | +The Poetry team is pleased to announce the immediate availability of Poetry **2.3.0**. |
| 10 | + |
| 11 | +<!--more--> |
| 12 | + |
| 13 | +If you have a previous version of Poetry installed via `pipx`, |
| 14 | +getting Poetry **2.3.0** is as easy as: |
| 15 | + |
| 16 | +```bash |
| 17 | +$ pipx upgrade poetry |
| 18 | +``` |
| 19 | + |
| 20 | +If you used the [official installer](/docs/#installation), you can run: |
| 21 | + |
| 22 | +```bash |
| 23 | +$ poetry self update |
| 24 | +``` |
| 25 | + |
| 26 | +## Highlights |
| 27 | + |
| 28 | +### Changing the default of `installer.re-resolve` from `true` to `false` |
| 29 | + |
| 30 | +With Poetry 2.0.0, the new `installer.re-resolve` config setting was [introduced](/blog/announcing-poetry-2.0.0/#locking-resulting-markers-and-groups). |
| 31 | +The default of this setting is changed from `true` to `false` in Poetry 2.3.0. |
| 32 | + |
| 33 | +By default, Poetry will now evaluate the locked groups and markers to decide |
| 34 | +if a package should be installed. This makes it clearer and easier to understand |
| 35 | +why a package is (or is not) installed in certain environments. |
| 36 | +It also fixes some shortcomings of the previous default behavior. |
| 37 | + |
| 38 | +If you encounter any issues, you can still restore the old default behavior by setting `installer.re-resolve` to `true`. |
| 39 | +Then, Poetry will ignore the locked markers and groups and re-resolve the dependencies |
| 40 | +with the packages from the lock file being the only source for packages. |
| 41 | + |
| 42 | +### Adding support for exporting `pylock.toml` files with `poetry-plugin-export` |
| 43 | + |
| 44 | +[PEP 751](https://peps.python.org/pep-0751/) defines a standard format for lock files named `pylock.toml`. |
| 45 | +Poetry is not yet able to replace `poetry.lock` with `pylock.toml`, but it now provides all necessary information |
| 46 | +for [poetry-plugin-export](https://github.com/python-poetry/poetry-plugin-export) to export `pylock.toml` files. |
| 47 | +Exporting `pylock.toml` requires at least Poetry 2.3.0 and poetry-plugin-export 1.10.0. |
| 48 | + |
| 49 | +## Other important Changes |
| 50 | + |
| 51 | +### Considering PEP 735 dependency groups in the lock file hash |
| 52 | + |
| 53 | +Poetry 2.2.0 introduced support for [PEP 735](https://peps.python.org/pep-0735/) dependency groups. |
| 54 | +Unfortunately, it was forgotten to consider such groups in the lock file hash so that Poetry is not able to determine |
| 55 | +that a change to such groups is not yet reflected in the lock file. This has been fixed in Poetry 2.3.0. |
| 56 | +While Poetry 2.3.0 is fine with lock files created by Poetry 2.2.x, Poetry 2.2.x will recognize lock files |
| 57 | +created by Poetry 2.3.0 as outdated. Therefore, it is recommended to [require](/docs/pyproject/#requires-poetry) |
| 58 | +Poetry 2.3.0 or later when using PEP 735 dependency groups. |
| 59 | + |
| 60 | +## Upcoming Changes |
| 61 | + |
| 62 | +### Defaulting to `setuptools` instead of `poetry-core` if no build system is defined |
| 63 | + |
| 64 | +Per [PEP 517](https://peps.python.org/pep-0517/), a build tool should fall back to `setuptools` if no build system is |
| 65 | +defined in the `[build-system]` section of `pyproject.toml`. However, to avoid immediate disruption, Poetry will |
| 66 | +currently issue a **warning** in such cases and continue using the built-in `poetry-core` backend by default. |
| 67 | +This behavior will change in a future minor release so that Poetry will default to `setuptools` |
| 68 | +if no `[build-system]` section is defined. |
| 69 | + |
| 70 | +## Changelog |
| 71 | + |
| 72 | +### Added |
| 73 | + |
| 74 | +- **Add support for exporting `pylock.toml` files with `poetry-plugin-export`** ([#10677](https://github.com/python-poetry/poetry/pull/10677)). |
| 75 | +- Add support for specifying build constraints for dependencies ([#10388](https://github.com/python-poetry/poetry/pull/10388)). |
| 76 | +- Add support for publishing artifacts whose version is determined dynamically by the build-backend ([#10644](https://github.com/python-poetry/poetry/pull/10644)). |
| 77 | +- Add support for editable project plugins ([#10661](https://github.com/python-poetry/poetry/pull/10661)). |
| 78 | +- Check `requires-poetry` before any other validation ([#10593](https://github.com/python-poetry/poetry/pull/10593)). |
| 79 | +- Validate the content of `project.readme` when running `poetry check` ([#10604](https://github.com/python-poetry/poetry/pull/10604)). |
| 80 | +- Add the option to clear all caches by making the cache name in `poetry cache clear` optional ([#10627](https://github.com/python-poetry/poetry/pull/10627)). |
| 81 | +- Automatically update the cache for packages where the locked files differ from cached files ([#10657](https://github.com/python-poetry/poetry/pull/10657)). |
| 82 | +- Suggest to clear the cache if running a command with `--no-cache` solves an issue ([#10585](https://github.com/python-poetry/poetry/pull/10585)). |
| 83 | +- Propose `poetry init` when trying `poetry new` for an existing directory ([#10563](https://github.com/python-poetry/poetry/pull/10563)). |
| 84 | +- Add support for `poetry publish --skip-existing` for new Nexus OSS versions ([#10603](https://github.com/python-poetry/poetry/pull/10603)). |
| 85 | +- Show Poetry's own Python's path in `poetry debug info` ([#10588](https://github.com/python-poetry/poetry/pull/10588)). |
| 86 | + |
| 87 | +### Changed |
| 88 | + |
| 89 | +- **Drop support for Python 3.9** ([#10634](https://github.com/python-poetry/poetry/pull/10634)). |
| 90 | +- **Change the default of `installer.re-resolve` from `true` to `false`** ([#10622](https://github.com/python-poetry/poetry/pull/10622)). |
| 91 | +- **PEP 735 dependency groups are considered in the lock file hash** ([#10621](https://github.com/python-poetry/poetry/pull/10621)). |
| 92 | +- Deprecate `poetry.utils._compat.metadata`, which is sometimes used in plugins, in favor of `importlib.metadata` ([#10634](https://github.com/python-poetry/poetry/pull/10634)). |
| 93 | +- Improve managing free-threaded Python versions with `poetry python` ([#10606](https://github.com/python-poetry/poetry/pull/10606)). |
| 94 | +- Prefer JSON API to HTML API in legacy repositories ([#10672](https://github.com/python-poetry/poetry/pull/10672)). |
| 95 | +- When running `poetry init`, only add the readme field in the `pyproject.toml` if the readme file exists ([#10679](https://github.com/python-poetry/poetry/pull/10679)). |
| 96 | +- Raise an error if no hash can be determined for any distribution link of a package ([#10673](https://github.com/python-poetry/poetry/pull/10673)). |
| 97 | +- Require `dulwich>=0.25.0` ([#10674](https://github.com/python-poetry/poetry/pull/10674)). |
| 98 | + |
| 99 | +### Fixed |
| 100 | + |
| 101 | +- Fix an issue where `poetry remove` did not work for PEP 735 dependency groups with `include-group` items ([#10587](https://github.com/python-poetry/poetry/pull/10587)). |
| 102 | +- Fix an issue where `poetry remove` caused dangling `include-group` references in PEP 735 dependency groups ([#10590](https://github.com/python-poetry/poetry/pull/10590)). |
| 103 | +- Fix an issue where `poetry add` did not work for PEP 735 dependency groups with `include-group` items ([#10636](https://github.com/python-poetry/poetry/pull/10636)). |
| 104 | +- Fix an issue where PEP 735 dependency groups were not considered in the lock file hash ([#10621](https://github.com/python-poetry/poetry/pull/10621)). |
| 105 | +- Fix an issue where wrong markers were locked for a dependency that was required by several groups with different markers ([#10613](https://github.com/python-poetry/poetry/pull/10613)). |
| 106 | +- Fix an issue where non-deterministic markers were created in a method used by `poetry-plugin-export` ([#10667](https://github.com/python-poetry/poetry/pull/10667)). |
| 107 | +- Fix an issue where wrong wheels were chosen for installation in free-threaded Python environments if Poetry itself was not installed with free-threaded Python ([#10614](https://github.com/python-poetry/poetry/pull/10614)). |
| 108 | +- Fix an issue where `poetry publish` used the metadata of the project instead of the metadata of the build artifact ([#10624](https://github.com/python-poetry/poetry/pull/10624)). |
| 109 | +- Fix an issue where `poetry env use` just used another Python version instead of failing when the requested version was not supported by the project ([#10685](https://github.com/python-poetry/poetry/pull/10685)). |
| 110 | +- Fix an issue where `poetry env activate` returned the wrong command for `dash` ([#10696](https://github.com/python-poetry/poetry/pull/10696)). |
| 111 | +- Fix an issue where `data-dir` and `python.installation-dir` could not be set ([#10595](https://github.com/python-poetry/poetry/pull/10595)). |
| 112 | +- Fix an issue where Python and pip executables were not correctly detected on Windows ([#10645](https://github.com/python-poetry/poetry/pull/10645)). |
| 113 | +- Fix an issue where invalid template variables in `virtualenvs.prompt` caused an incomprehensible error message ([#10648](https://github.com/python-poetry/poetry/pull/10648)). |
| 114 | + |
| 115 | +### Docs |
| 116 | + |
| 117 | +- Add a warning about `~/.netrc` for Poetry credential configuration ([#10630](https://github.com/python-poetry/poetry/pull/10630)). |
| 118 | +- Clarify that the local configuration takes precedence over the global configuration ([#10676](https://github.com/python-poetry/poetry/pull/10676)). |
| 119 | +- Add an explanation in which cases `packages` are automatically detected ([#10680](https://github.com/python-poetry/poetry/pull/10680)). |
| 120 | + |
| 121 | +### poetry-core ([`2.3.0`](https://github.com/python-poetry/poetry-core/releases/tag/2.3.0)) |
| 122 | + |
| 123 | +- Normalize versions ([#893](https://github.com/python-poetry/poetry-core/pull/893)). |
| 124 | +- Fix an issue where unsatisfiable requirements did not raise an error ([#891](https://github.com/python-poetry/poetry-core/pull/891)). |
| 125 | +- Fix an issue where the implicit main group did not exist if it was explicitly declared as not having any dependencies ([#892](https://github.com/python-poetry/poetry-core/pull/892)). |
| 126 | +- Fix an issue where `python_full_version` markers with pre-release versions were parsed incorrectly ([#893](https://github.com/python-poetry/poetry-core/pull/893)). |
0 commit comments