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.