stubgen - Generate draft type hint stubs for Python modules
stubgen [-h] [-py2] [-m MODULE] [-p PACKAGE]
[OPTIONS...] [FILES...]
Mypy is a static type checker for Python 3 and Python 2.7. Mypy
includes the stubgen tool that can automatically generate stub files
(.pyi files) for Python modules and C extension modules.
A stub file (see PEP 484) contains only type hints for the public
interface of a module, with empty function bodies. Mypy can use a stub file
instead of the real implementation to provide type information for the
module. They are useful for third-party modules whose authors have not yet
added type hints (and when no stubs are available in typeshed) and C
extension modules (which mypy can’t directly process).
Stubgen generates draft stubs. The auto-generated stub
files often require some manual updates, and most types will default to
Any. The stubs will be much more useful if you add more precise type
annotations, at least for the most commonly used functionality.
NOTE:
The command-line flags may change between releases.
You can give stubgen paths of the source files for which you want
to generate stubs:
This generates stubs out/foo.pyi and out/bar.pyi.
The default output directory out can be overridden with -o
DIR.
You can also pass directories, and stubgen will recursively search
them for any .py files and generate stubs for all of them:
Alternatively, you can give module or package names using the
-m or -p options:
$ stubgen -m foo -m bar -p my_pkg_dir
Details of the options:
- -m MODULE, --module
MODULE
- Generate a stub file for the given module. This flag may be repeated
multiple times.
Stubgen will not recursively generate stubs for any
submodules of the provided module.
- -p PACKAGE, --package
PACKAGE
- Generate stubs for the given package. This flag maybe repeated multiple
times.
Stubgen will recursively generate stubs for all
submodules of the provided package. This flag is identical to
--module apart from this behavior.
NOTE:
You can't mix paths and -m/-p options in
the same stubgen invocation.
Stubgen applies heuristics to avoid generating stubs for
submodules that include tests or vendored third-party packages.
By default stubgen will try to import the target modules and
packages. This allows stubgen to use runtime introspection to generate stubs
for C extension modules and to improve the quality of the generated stubs.
By default, stubgen will also use mypy to perform light-weight semantic
analysis of any Python modules. Use the following flags to alter the default
behavior:
- --no-import
- Don't try to import modules. Instead only use mypy's normal search
mechanism to find sources. This does not support C extension modules. This
flag also disables runtime introspection functionality, which mypy uses to
find the value of __all__. As result the set of exported imported
names in stubs may be incomplete. This flag is generally only useful when
importing a module causes unwanted side effects, such as the running of
tests. Stubgen tries to skip test modules even without this option, but
this does not always work.
- --parse-only
- Don't perform semantic analysis of source files. This may generate worse
stubs -- in particular, some module, class, and function aliases may be
represented as variables with the Any type. This is generally only
useful if semantic analysis causes a critical mypy error.
- --doc-dir PATH
- Try to infer better signatures by parsing .rst documentation in
PATH. This may result in better stubs, but currently it only works
for C extension modules.
- --py2
- Run stubgen in Python 2 mode (the default is Python 3 mode).
- --ignore-errors
- If an exception was raised during stub generation, continue to process any
remaining modules instead of immediately failing with an error.
- --include-private
- Include definitions that are considered private in stubs (with names such
as _foo with single leading underscore and no trailing
underscores).
- --export-less
- Don't export all names imported from other modules within the same
package. Instead, only export imported names that are not referenced in
the module that contains the import.
- --search-path
PATH
- Specify module search directories, separated by colons (only used if
--no-import is given).
- --python-executable
PATH
- Use Python interpreter at PATH for importing modules and runtime
introspection. This has no effect with --no-import, and this only
works in Python 2 mode. In Python 3 mode the Python interpreter used to
run stubgen will always be used.
- -o PATH, --output
PATH
- Change the output directory. By default the stubs are written in the
./out directory. The output directory will be created if it doesn't
exist. Existing stubs in the output directory will be overwritten without
warning.
- MYPYPATH
- Additional module search path entries. The format is the same as the
shell's $PATH: one or more directory pathnames separated by
colons.
mypy(1)
Full documentation is available online at:
https://mypy.readthedocs.io/en/latest/stubgen.html or locally at:
/usr/share/doc/mypy/html (requires mypy-doc package).
Jukka Lehtosalo and contributors