Python is a great language for tinkering around. It’s quick and easy to implement your ideas into code, but it’s not always easy to turn your code into sharable packages.
One of the most popular package manager is pip, and it relies on the PyPI repository. If you want to share your package with an easy-to-use pip install command, you have to publish your code as a package on PyPI.
But the process is not usually that straight forward when it comes to publishing a package. You can take a look at PyPI’s official guide on publishing a package. It’s a little bit overwhelming to say the least, despite the guide’s authors attempt by trying to ease the tension a little by incorporating everyone’s favorite: emoji.
Congratulations, you’ve packaged and distributed a Python project! ✨ 🍰 ✨.Python Packaging User Guide, Tutorials
“There must be an easier way to do this.” You might think. And you are absolutely right to think so.
Introducing Poetry, a pip alternative that’s on steroid.
What does Poetry do? In short, it manages your packages for you: whether it’s managing your projects dependencies or packaging up your own packages.
That means Poetry can help you package up your project and publish it to PyPI, with minimal effort.
Installation of Poetry is relatively straight forward, however you must pay attention that Poetry is not installed using pip, and it is installed as a global package. When you are developing inside virtualenvs, you might want to instruct your virtualenv to copy global packages into the environment.
Poetry tries to automatically make use of the current Python version in the virtualenv, if there is one. So you generally don’t have to worry about weird compatibility issues or missing site-packages.
Publish Your Packages
Publishing your package is easy. If you already have a project that you have been working on for a while, you can initialize the environment by an interactive command:
# poetry init project-name
Poetry will ask you several questions relevant to the project. Examples include the type of license the project uses, the name of the authors, etc.
However, what Poetry asked here are the bare minimum. Oftentimes you want to include more information. You can add more information about the project by looking for the
pyproject.toml Poetry just created.
Here is a sample file that includes some more configuration options, only parts relevant to the project information is shown:
... name = "project-name" version = "0.1.0" description = "Some short descrption about the project." authors = ["Your Name", "Second Name"] license = "MIT License" readme = "README.md" homepage = "https://link-to-home-page.com" repository = "https://link-to-repository.com" keywords = ["Keyword1", "Keyword2"] classifiers = ["Development Status :: 4 - Beta"] ...
You can find a more detailed explanation of the options inside Poetry’s documentation. It’s worth noting that some of the options require specific values from a list of allowed values, so consulting the documentation will be a good idea whenever you are in doubt.
Now we have all the information needed to publish a package. But before we can actually publish the package, we need to build the package first. To do that, use this simple command:
# poetry build
It’s important that your Python code is all inside a folder that has the same name as the project name you specified when you initialized the project using Poetry.
And after building, we can publish the package to PyPI (by default) using another simple command:
# poetry publish
Poetry will ask for your PyPI username and password, and after some uploading, your package is now published!
It’s just that easy.
Hopefully now you no longer have any excuses to not publish your projects on PyPI. Happy coding!