Skip to content

How to build a WHL package for pypi

You can create a pypi-package to distribute your app/tool ! It's really easy with poetry

First of all : create your package, from a console :

poetry new myapp

Edit your newly myapp/pyproject.toml to match :

[tool.poetry]
name = "myapp"
version = "0.1.0"
description = ""
authors = ["you <you@gmail.com>"]

[tool.poetry.scripts]            # <-- create a 'myapp' command
myapp = 'myapp:main'

[tool.poetry.dependencies]
python = "^3.7"
guy = "^0.4"                     # <-- add a dependency to guy

[tool.poetry.dev-dependencies]
pytest = "^3.0"

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

I've setuped a console script in section [tool.poetry.scripts]. And I've added a dependency to guy in [tool.poetry.dependencies].

Now, you just need to add the entry point main() (and the core app ;-) in your package ...

Edit the file myapp/myapp/__init__.py like that :

__version__ = '0.1.0'

from guy import Guy

class App(Guy):
    """ hello """

def main():          # <-- the entry point for the script !!
    App().run()

if __name__=="__main__":
    main()

Info

If you plan to declare your html in a static html file : just put your static datas in the myapp/myapp/static folder, and they will be be embbeded in the package (as package_data). Guy (>=0.4.0) will be able to resolve them in the installed package.

And you are ! Just build your package (place you in the folder where pyproject.toml sits)

poetry build

And it's done !

You can distribute your package (dist/myapp-0.1.0-py3-none-any.whl), publish it to pypi.org ...

... or install it :

python3.7 -m pip install --user --force dist/myapp-0.1.0-py3-none-any.whl