pixelmatch-py, a Python library I maintained for comparing images, received a Pull Request to add type hints about 10 months ago. After merging this PR & releasing a new version, I thought the library's users will magically get their type working.

Until today, I was reading cryptography's Changelog and a line got my attention:

Added a py.typed file so that mypy will know to use our type annotations.

After reading PEP-561 and mypy documentation I'm sure that I didn't publish the package right: I should include a py.typed file, or the type checker won't use the type hints provided by the package.

Adding py.typed

It's faily simple to include this file: just touch a py.typed file in your package directory and include it in your distribution.
I'm using poetry, so I added

packages = [
  {include = "pixelmatch"},
  {include = "pixelmatch/py.typed"},

under the [tool.poetry] section of pyproject.toml.

Update: As pointed out by J├╝rgen Gmach, poetry includes all files in your packages (including py.typed file!) by default, so there's no need to include the file manually.

If you're using, you can add package_data to setup call:

    package_data={"pixelmatch": ["py.typed"]},

Release a new version for your package then type informations from your packages should works.


If you're a Python package maintainer, be sure to include py.typed file for your typed package!