In a previous article we went through the basic configuration and usage steps for Poetry. One thing that is often needed in professional setting is access to password-protected private package indexes, luckily Poetry can do that, lets see how we can go about it.
We will be reusing the Poetry example from the blog's examples repo as a base for this article. Any required changes wil be detailed.
Poetry uses configuration files to store custom indexes' credentials, so most of our work will be done using
poetry config and some changes to our pyproject.toml file.
First, let's add a reference to our repository in the pyproject.toml file (above the
tool.poetry.dependencies section), add the section below to your file and make sure to replace the
values to fit your setup.
[[tool.poetry.source]]
name = "my-custom-repo" # This name will be used in the configuration to retreive the proper credentials
url = "https://my.customrepo.com/simple/" # URL used to download your packages from
Then, configure the credentials for your repo. Note that this only needs to be done once per repo, not per project.
$ poetry config http-basic.my-custom-repo user1 secretp4ssword!
Once those two steps are done, you can use poetry add to install a package from your newly configured custom index.
So,
$ poetry add my_package
Poetry should find and install your package and update your pyproject.toml file with this new dependency.
You can add as many package indexes as you need without issue.
Now, chances are that if you have an internal package index you most likely will need a way to publish those packages.
Since Poetry does away with the setup.py file you need a new way to build and publish your custom packages, enter
poetry build and poetry publish.
The build command speaks for itself, when invoked it will build a source and a wheel release of your project in
the dist directory.
To use the publish command you will first need to configure your credentials (same as above, with http-basic) and
the repo's URL, where to upload your new files. You can do so with the command below:
$ poetry config repositories.my-custom-repo https://my.customrepo.com/simple/
Once those two configuration values are set you can invoke the publish command:
$ poetry publish -r my-custom-repo
This will take whatever is in the dist directory and upload it to your custom index (specified using -r).
You can skip the build command by adding the --build option to your publish command. This will build and publish
at the same time.
PRO TIP: You can also use the poetry version command to automatically change your project's version number!
That's it! You are done with installing and publishing private packages, for more information consult the official Poetry documentation.