Poetry
Project configuration
New project
$ poetry new my-app
Existing project
$ cd my-app
$ poetry init
Package mode
Disable package mode, useful for if you intend to run directly and not as an installed package.
[tool.poetry]
package-mode = false
Otherwise you have to add this flag in the CLI:
$ poetry install --no-root
Dependencies
Add dependency
$ poetry add PACKAGE
$ poetry add PACKAGE==VERSION
Dev package:
$ poetry add -D PACKAGE
$ poetry add --dev PACKAGE
$ poetry add -G dev PACKAGE
For extras, make sure to quote the hard brackets:
$ poetry add 'lxml[html-clean]'
Result:
lxml = { extras = ["html-clean"], version = "^5.3.0" }
Prod vs dev dependencies
[tool.poetry.dependencies]
python = "..."
abc = "..."
[tool.poetry.group.dev.dependencies]
def = "..."
Locking
Lock minor version
[tool.poetry.dependencies]
python = "^3.10"
Lock patch version
[tool.poetry.dependencies]
python = "^3.10.1"
Lock a range
[tool.poetry.dependencies]
python = ">=3.10,<3.13"
Virtual environments
Location
Default location
By default, Poetry creates an environment here in a central locatiion:
{cache-dir}/virtualenvs
That uses the Cache directory.
- macOS -
~/Library/Application Support/pypoetry
- Windows -
C:\Users\<username>\AppData\Roaming\pypoetry
In project
You can choose to create a virtual environment in the project. This makes it easier for configuring your IDE to recognize it for new terminal sessions and loading dependencies when viewing Python files.
poetry.toml
(notpyproject.toml
)[virtualenvs] in-project = true
Activate environment
This creates a subshell, so when you exit the subshell no changes are persisted.
$ poetry env activate
The old way for Poetry v1 was poetry shell
and now you need a plugin for this for v2.
Or if you made the virtual env in your project.
$ source {path_to_venv}/bin/activate
> source {path_to_venv}\Scripts\activate.bat
And deactivate with:
$ deactivate
Get path to virtual env
$ poetry env info --path
Run commands in the environment
Interactive console:
$ poetry run python
Run a script:
$ poetry run python your_script.py
Run a CLI tool from the installed packages:
$ poetry run pytest