Python version
The Python version affects allowed syntax, type definitions of the standard library, and type definitions of first- and third-party modules that are conditional on the Python version.
For example, Python 3.10 introduced support for match
statements and added the
sys.stdlib_module_names
symbol to the standard library. Syntactic features always
need to be available in the lowest supported Python version, but symbols may be used
in a sys.version_info
conditional branch:
import sys
# `invalid-syntax` error if `python-version` is set to 3.9 or lower:
match "echo hello".split():
case ["echo", message]:
print(message)
case _:
print("unknown command")
# `unresolved-attribute` error if `python-version` is set to 3.9 or lower:
print(sys.stdlib_module_names)
if sys.version_info >= (3, 10):
# ok, because the usage is guarded by a version check:
print(sys.stdlib_module_names)
By default, the lower bound of the project's requires-python
field (from the pyproject.toml
) is
used as the target Python version, ensuring that features and symbols only available in newer Python
versions are not used.
If the requires-python
field is not available but a virtual environment has been
configured or detected, ty will try to infer the Python version being used from the virtual
environment's metadata.
If no virtual environment is present or inferring the Python version from the metadata fails, ty will fall back to the latest stable Python version supported by ty (currently 3.13).
The Python version may also be explicitly specified using the
python-version
setting or the
--python-version
flag.