RandomWalk

Hello, there!


Contact me

Email id-rahulr@iitk.ac.in show

Packaging and shipping your python tools using Poetry

19 Jan 2020 » python, bash

In this blog let’s see how we can package an application and distrubute it using tool called poetry.1


Step 1. Download and Install Poetry


$ curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
$ source $HOME/.poetry/env

Check the installation correctly by executing

poetry --version

If this throws and error regarding ‘threads’ like the one below

rahul@rahul-lap:~$ poetry --version
/home/rahul/.poetry/lib/poetry/_vendor/py2.7/subprocess32.py:149: RuntimeWarning: The _posixsubprocess module is not being used. Child process reliability may suffer if your program uses threads.
  "program uses threads.", RuntimeWarning)
Poetry version 1.0.2

, you might need to change the first line in configuration ~/.poetry/bin/poetry from #!/usr/bin/env python to #!/usr/bin/env python3. Save this file and execute poetry --version again to check for errors if any.


Step 2. Packaging


If you have a simple script written in python, something similar following ‘demo-tool’

def main():
	print("Hello World")

if __name__ == '__main__':
	main()

, you have to go the project directory, open up the terminal and execute, poetry init. This command will guide you to create the most important file called pyproject.toml, which will orchestrate the packaging for you. Once the interactive generation is finishied, this file will look like below

[tool.poetry]
name = "demo-tool"
version = "0.1.0"
description = "a demo tool for printing hello world"
authors = ["Your Name <you@example.com>"]
license = "MIT"

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]

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

You can add an entry point to the file using ‘console_script’ in poetry way. Following lines to be appended to our demo program.

[tool.poetry.scripts]
demo-tool = 'demo-tool:main'

In case your program has some dependecy, you can add it via poetry add <package-name>. For example, if your program depends on beautifulsoup webscrapping library, you have to add this dependency to the toml file by running the command poetry add beautifulsoup4


Step 3. Distributing


Once all your packages are ready to be shipped, you can publish it in PyPI, which is repo of python packages used by the popular tool pip 2 Run the following command to publish your package

poetry build

Then publish it(Here you have to enter your pyPI credentials)

peotry publish

Or you can do it with single command as below

poetry publish --username <YOUR-USERNAME> --password <YOUR-PASSWORD> --build

If you do not have an account in PyPI, go to pypi.org and create and account.

Now that your tool is available to outside world to use.


Step 4. Installation and Usage


Now anyone can install this tool by running,

$ sudo pip3 install demo-tool

This will create a system-wide availability of the command ‘demo-tool’ and can be run by simply executing demo-tool anywhere from the system.

If you want to locally install it, create a virtual environment using virtualenv venv and activate it using source /venv/bin/activate and then run pip install demo-tool. This will be available locally only to this virtual environment.3


References:


  1. https://python-poetry.org/ 

  2. https://pypi.org/ 

  3. https://packaging.python.org/guides/distributing-packages-using-setuptools/#setup-args