Unified api to multiple typecheckers
Project description
typecheck-runner
A unified way to run globally installed typecheckers against a specified virtual environment.
Overview
I prefer to invoke globally managed type checkers against specified virtual
environments. For cases where python versions are checked against (with, for
example tox or nox), this prevents each virtual environment from having to
contain a type checker. Each type checker (mypy, pyright, basedpyright,
ty, and pyrefly) has it's own particular flags to specify the python
executable and the python version. typecheck-runner unifies these flags. Also,
by default, typecheck-runner invokes the type checker using
uvx, which installs the type
checker if needed.
Usage
Install into virtual environment
The easiest way to use typecheck-runner is to install it into the virtual
environment you'd like to test against using something like
pip install typecheck-runner
from the virtual environment of interest. To invoke a type checker against the
virtual environment, assuming the python executable of the virtual environment
is located at /path/to/venv/bin with python version 3.13, use
typecheck-runner --check mypy
# runs: uvx mypy --python-version=3.13 --python-executable=/path/to/venv/bin
Where the commented line shows the command run. Specifying --no-uvx will
instead invoke the type checker without uvx, so the type checker must already
be installed.
You can specify multiple checkers with multiple --check flags. To specify
options to uvx for each checker, pass options after --uvx-delimiter which
defaults to --. For example:
typecheck-runner --check "mypy --verbose -- --reinstall"
# runs: uvx --reinstall mypy --verbose
You can specify uvx options to all checkers using the --uvx-options flag.
Specify virtual environment
You can also use a globally installed typecheck-runner and specify which
virtual environment to test over using --venv or --infer-venv options. For
example, you can use:
uvx typecheck-runner --venv .venv --check mypy
# run for example (if .venv current directory with version 3.14)
# uvx mypy --python-version=3.14 --python-executable=.venv/bin/python
Using --infer-venv will attempt to infer the virtual environment from, in
order, environment variables VIRTUAL_ENV, CONDA_PREFIX, and finally .venv
in current directory.
Options
usage: typecheck-runner [-h] [--version] [-c CHECKERS]
[--python-executable PYTHON_EXECUTABLE]
[--python-version PYTHON_VERSION] [--no-python-executable]
[--no-python-version] [--venv VENV] [--infer-venv]
[--constraints CONSTRAINTS] [-v] [--allow-errors] [--fail-fast]
[--dry-run] [--no-uvx] [--uvx-options UVX_OPTIONS]
[--uvx-delimiter UVX_DELIMITER]
[args ...]
Run executable using uvx.
positional arguments:
args Extra files/arguments passed to all checkers.
options:
-h, --help show this help message and exit
--version Display version.
-c, --check CHECKERS Checker to run. This can be a string with options to the
checker. For example, ``--check "mypy --verbose"`` runs the
checker the command ``mypy --verbose``. Options after
``uvx_delimiter`` (default ``"--"``, see ``--uvx-delimiter``
options) are treated as ``uvx`` options. For example, passing
``--check "mypy --verbose -- --reinstall"`` will run ``uvx
--reinstall mypy --verbose``. Can be specified multiple times.
--python-executable PYTHON_EXECUTABLE
Path to python executable. Defaults to ``sys.executable``. This
is passed to ``--python-executable`` (mypy), ``--pythonpath`` in
((based)pyright), ``--python`` (ty), ``--python-interpreter-
path`` (pyrefly), and ignored for pylint.
--python-version PYTHON_VERSION
Python version (x.y) to typecheck against. Defaults to
``{sys.version_info.major}.{sys.version_info.minor}``. This is
passed to ``--pythonversion`` in pyright and ``--python-
version`` otherwise.
--no-python-executable
Do not infer ``python_executable``
--no-python-version Do not infer ``python_version``.
--venv VENV Use specified vitualenvironment location
--infer-venv Infer virtual environment location. Checks in order environment
variables ``VIRTUAL_ENV``, ``CONDA_PREFIX``, directory
``.venv``.
--constraints CONSTRAINTS
Constraints (requirements.txt) specs for checkers. Can specify
multiple times. Passed to ``uvx --constraints=...``.
-v, --verbose Set verbosity level. Pass multiple times to up level.
--allow-errors If passed, return ``0`` regardless of checker status.
--fail-fast Exit on first failed checker. Default is to run all checkers,
even if they fail.
--dry-run Perform dry run.
--no-uvx If ``--no-uvx`` is passed, assume typecheckers are in the
current python environment. Default is to invoke typecheckers
using `uvx`.
--uvx-options UVX_OPTIONS
Extra options to pass to ``uvx``. Note that you may have to
escape the first option. For example, ``--uvx-options
"\--verbose --reinstall"
--uvx-delimiter UVX_DELIMITER
Delimiter between typechecker command arguments and ``uvx``
arguments. See ``--check`` option.
Status
This package is actively used by the author. Please feel free to create a pull request for wanted features and suggestions!
Installation
Use one of the following
pip install typecheck-runner
uv pip install typecheck-runner
uv add typecheck-runner
...
What's new?
See changelog.
License
This is free software. See LICENSE.
Related work
Any other stuff to mention....
Contact
The author can be reached at wpk@nist.gov.
Credits
This package was created using Cookiecutter with the usnistgov/cookiecutter-nist-python template.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file typecheck_runner-0.1.0.tar.gz.
File metadata
- Download URL: typecheck_runner-0.1.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
554c4a41c5cb003ac2dcf58bd6d5f8e6cd85fc0c5d7e358794e5b21175632125
|
|
| MD5 |
8b11081e80fb2055b14b6796fb1e7c76
|
|
| BLAKE2b-256 |
4e2703eacd11d34f300d6297bfc7b7931ce660e3e8a5ab3b82674b165dafa562
|
File details
Details for the file typecheck_runner-0.1.0-py3-none-any.whl.
File metadata
- Download URL: typecheck_runner-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
800d82dc629a49f30dea43a7547ab67198a316cf3e04238012432bb6e8dd7c0c
|
|
| MD5 |
f4b91cff4ceb30acf91fccdeff234ac1
|
|
| BLAKE2b-256 |
4d5645d0771733c7158d450318709c38a58c878da8064b01db71501336f460f6
|