Skip to content

Commit 0c7c737

Browse files
authored
blog: announce Poetry 2.3.0 (#197)
1 parent 9b68b7f commit 0c7c737

File tree

3 files changed

+188
-3
lines changed

3 files changed

+188
-3
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
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)).

content/history.md

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,64 @@ layout: single
44
title: History
55
---
66

7+
## [2.3.0] - 2026-01-18
8+
9+
### Added
10+
11+
- **Add support for exporting `pylock.toml` files with `poetry-plugin-export`** ([#10677](https://github.com/python-poetry/poetry/pull/10677)).
12+
- Add support for specifying build constraints for dependencies ([#10388](https://github.com/python-poetry/poetry/pull/10388)).
13+
- Add support for publishing artifacts whose version is determined dynamically by the build-backend ([#10644](https://github.com/python-poetry/poetry/pull/10644)).
14+
- Add support for editable project plugins ([#10661](https://github.com/python-poetry/poetry/pull/10661)).
15+
- Check `requires-poetry` before any other validation ([#10593](https://github.com/python-poetry/poetry/pull/10593)).
16+
- Validate the content of `project.readme` when running `poetry check` ([#10604](https://github.com/python-poetry/poetry/pull/10604)).
17+
- 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)).
18+
- Automatically update the cache for packages where the locked files differ from cached files ([#10657](https://github.com/python-poetry/poetry/pull/10657)).
19+
- Suggest to clear the cache if running a command with `--no-cache` solves an issue ([#10585](https://github.com/python-poetry/poetry/pull/10585)).
20+
- Propose `poetry init` when trying `poetry new` for an existing directory ([#10563](https://github.com/python-poetry/poetry/pull/10563)).
21+
- Add support for `poetry publish --skip-existing` for new Nexus OSS versions ([#10603](https://github.com/python-poetry/poetry/pull/10603)).
22+
- Show Poetry's own Python's path in `poetry debug info` ([#10588](https://github.com/python-poetry/poetry/pull/10588)).
23+
24+
### Changed
25+
26+
- **Drop support for Python 3.9** ([#10634](https://github.com/python-poetry/poetry/pull/10634)).
27+
- **Change the default of `installer.re-resolve` from `true` to `false`** ([#10622](https://github.com/python-poetry/poetry/pull/10622)).
28+
- **PEP 735 dependency groups are considered in the lock file hash** ([#10621](https://github.com/python-poetry/poetry/pull/10621)).
29+
- 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)).
30+
- Improve managing free-threaded Python versions with `poetry python` ([#10606](https://github.com/python-poetry/poetry/pull/10606)).
31+
- Prefer JSON API to HTML API in legacy repositories ([#10672](https://github.com/python-poetry/poetry/pull/10672)).
32+
- 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)).
33+
- 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)).
34+
- Require `dulwich>=0.25.0` ([#10674](https://github.com/python-poetry/poetry/pull/10674)).
35+
36+
### Fixed
37+
38+
- 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)).
39+
- 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)).
40+
- 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)).
41+
- 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)).
42+
- 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)).
43+
- 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)).
44+
- 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)).
45+
- 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)).
46+
- 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)).
47+
- Fix an issue where `poetry env activate` returned the wrong command for `dash` ([#10696](https://github.com/python-poetry/poetry/pull/10696)).
48+
- Fix an issue where `data-dir` and `python.installation-dir` could not be set ([#10595](https://github.com/python-poetry/poetry/pull/10595)).
49+
- Fix an issue where Python and pip executables were not correctly detected on Windows ([#10645](https://github.com/python-poetry/poetry/pull/10645)).
50+
- Fix an issue where invalid template variables in `virtualenvs.prompt` caused an incomprehensible error message ([#10648](https://github.com/python-poetry/poetry/pull/10648)).
51+
52+
### Docs
53+
54+
- Add a warning about `~/.netrc` for Poetry credential configuration ([#10630](https://github.com/python-poetry/poetry/pull/10630)).
55+
- Clarify that the local configuration takes precedence over the global configuration ([#10676](https://github.com/python-poetry/poetry/pull/10676)).
56+
- Add an explanation in which cases `packages` are automatically detected ([#10680](https://github.com/python-poetry/poetry/pull/10680)).
57+
58+
### poetry-core ([`2.3.0`](https://github.com/python-poetry/poetry-core/releases/tag/2.3.0))
59+
60+
- Normalize versions ([#893](https://github.com/python-poetry/poetry-core/pull/893)).
61+
- Fix an issue where unsatisfiable requirements did not raise an error ([#891](https://github.com/python-poetry/poetry-core/pull/891)).
62+
- 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)).
63+
- 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)).
64+
765
## [2.2.1] - 2025-09-21
866

967
### Fixed
@@ -2461,7 +2519,8 @@ This release **must** be downloaded via the `get-poetry.py` script and not via t
24612519

24622520
Initial release
24632521

2464-
[Unreleased]: https://github.com/python-poetry/poetry/compare/2.2.1...main
2522+
[Unreleased]: https://github.com/python-poetry/poetry/compare/2.3.0...main
2523+
[2.3.0]: https://github.com/python-poetry/poetry/releases/tag/2.3.0
24652524
[2.2.1]: https://github.com/python-poetry/poetry/releases/tag/2.2.1
24662525
[2.2.0]: https://github.com/python-poetry/poetry/releases/tag/2.2.0
24672526
[2.1.4]: https://github.com/python-poetry/poetry/releases/tag/2.1.4

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ tags = "/blog/tag/:title/"
6363
description = "Python dependency management and packaging made easy"
6464

6565
[tool.website.config.params.documentation]
66-
defaultVersion = "2.2"
66+
defaultVersion = "2.3"
6767

6868
[tool.website.config.markup.goldmark.renderer]
6969
unsafe = true
@@ -72,7 +72,7 @@ unsafe = true
7272
keepWhitespace = true
7373

7474
[tool.website.versions]
75-
"2.2" = "2.2"
75+
"2.3" = "2.3"
7676
"1.8" = "1.8"
7777

7878
[build-system]

0 commit comments

Comments
 (0)