Announcing Poetry 1.1.0

Published on October 1, 2020 in Releases with tags 1.X 1.1

The Poetry team is pleased to announce the immediate availability of Poetry 1.1.0.

Thanks to the maintainers, community and everyone involved in making this release possible.

This release brings a lot of new features and improvements.

If you have a previous version of Poetry installed via the official installer, getting Poetry 1.1.0 is as easy as:

$ poetry self update
Note
This release brings significant changes, the most notable ones being a change in the lock file format and a brand new and faster installer. So, special care should be taken when upgrading.
Warning
The 1.1 branch of Poetry will be the last to support Python 2.7 and Python 3.5. Future minor releases, starting with 1.2, will be only compatible with Python 3.6+.

This article will highlight the most important features and changes but the full list is available in the change log.

Brand new installer #

This release brings a brand new, faster installer that supports parallel operations.

The user experience has also been improved by displaying each step of the installation process so users know the progress of the operation.

Note that since it’s a fundamental internal change, it’s still considered experimental.

Note

If you encounter issues with the new installer, you can report them on the Bug tracker.

If these issues are blocking your workflow you can disable the new installer by setting the experimental.new-installer to false

poetry config experimental.new-installer false

Standalone build backend #

The PEP-517 build backend of Poetry has been extracted into its own, standalone, library.

This change allows for faster builds - via pip for instance - for Poetry-managed projects.

New projects created with Poetry will already use the proper build-system backend, but for existing projects, the build-system section must be changed from:

[build-system]
requires = ["poetry>=1.1.0"]
build-backend = "poetry.masonry.api"

to

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

UX improvements #

Errors are now better displayed and more intuitive so that they are easier to understand and debug.

Some of them will also be provided with possible solutions and links to the documentation.

Better errors

Dependency resolution improvements #

The dependency resolution algorithm has been further improved in order to fix some long standing issues.

It’s also now much more accurate for cases of multiple constraints dependencies.

Note

This improved accuracy came at the cost of speed in some cases.

It means that you might see a longer dependency resolution process depending of your set of dependencies.

Lock file format changes #

The format of the lock has changed slightly compared to previous versions to make improvements to the dependency resolution process and installation.

Warning

While this version can read previous lock files without issue, older versions of Poetry might not be able to read this new lock file format.

What this actually means is that Poetry 1.0 will not necessarily be able to read lock files generated by Poetry 1.1 and trying to do so might lead to infinite recursions.

Note that lock file formats are now versioned, so Poetry will now either display a warning or return an error if there are incompatibilities or it can’t read the lock file.

Improved install command #

The install command now supports a --remove-untracked option to keep your environment in sync with the poetry.lock file. This option ensures that you only have the packages that are strictly required by your project.

poetry install --remove-untracked

Improved publish command #

The publish command now supports a --dry-run option to check if everything is in order before uploading to a remote repository.

Publishing error handling and reporting have been improved to help debug issues when uploading packages.

poetry publish --dry-run

Directory dependencies are now non-editable by default #

In previous versions, directory dependencies were installed in “editable” mode by default.

However, this is no longer the case in Poetry 1.1 and they will now be installed fully in the environment.

If you still want to install them in editable mode you need to set the develop property to true:

[tool.poetry.dependencies]
my-package = {path = "../path/to/dependency", develop = true}