[build-system] requires = [ "cmake<4.0.0", # For building binary targets in the wheel. 4.0.0 breaks third-party CMake build so temporarily pin the version. "pip>=23", # For building the pip package. "pyyaml", # Imported by the kernel codegen tools. "setuptools>=63", # For building the pip package contents. "tomli", # Imported by extract_sources.py when using python < 3.11. "wheel", # For building the pip package archive. "zstd", # Imported by resolve_buck.py. ] build-backend = "setuptools.build_meta" [project] name = "executorch" dynamic = [ # setup.py will set the version. 'version', ] description = "On-device AI across mobile, embedded and edge for PyTorch" readme = "README-wheel.md" authors = [ {name="PyTorch Team", email="packages@pytorch.org"}, ] license = {file = "LICENSE"} keywords = ["pytorch", "machine learning"] # PyPI package information. classifiers = [ # How mature is this project? Common values are # 3 - Alpha # 4 - Beta # 5 - Production/Stable "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Programming Language :: C++", "Programming Language :: Python :: 3", # Update this as we support more versions of python. "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] # Python dependencies required for use. requires-python = ">=3.10" dependencies=[ "expecttest", "flatbuffers", "hypothesis", "mpmath==1.3.0", "numpy>=2.0.0; python_version >= '3.10'", "packaging", "pandas>=2.2.2; python_version >= '3.10'", "parameterized", "pytest", "pytest-xdist", "pytest-rerunfailures", "pyyaml", "ruamel.yaml", "sympy", "tabulate", "typing-extensions", # Keep this version in sync with: ./backends/apple/coreml/scripts/install_requirements.sh "coremltools==8.3; platform_system == 'Darwin'", ] [project.urls] # The keys are arbitrary but will be visible on PyPI. Homepage = "https://pytorch.org/executorch/" Repository = "https://github.com/pytorch/executorch" Issues = "https://github.com/pytorch/executorch/issues" Changelog = "https://github.com/pytorch/executorch/releases" # Tell setuptools to generate commandline wrappers for tools that we install # under data/bin in the pip package. This will put these commands on the user's # path. [project.scripts] flatc = "executorch.data.bin:flatc" # TODO(dbort): Could use py_modules to restrict the set of modules we # package, and package_data to restrict the set up non-python files we # include. See also setuptools/discovery.py for custom finders. [tool.setuptools.package-dir] # Tell setuptools to follow the symlink: src/executorch/* -> * for all first level # modules such as src/executorch/exir -> exir. This helps us to semi-compliant with # the "src layout" convention for python packages, which is also discussed in # https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/. # In the long term we should move all the modules under the src/executorch/ folder. # # Doing this also allows us to import from executorch.exir directly in # editable mode. "executorch" = "src/executorch" [tool.setuptools.package-data] # TODO(dbort): Prune /test[s]/ dirs, /third-party/ dirs, yaml files that we # don't need. "*" = [ # Some backends like XNNPACK need their .fbs files. "*.fbs", # Some kernel libraries need their .yaml files. "*.yaml", ] [tool.setuptools.exclude-package-data] "*" = ["*.pyc"] [tool.usort] # Do not try to put "first-party" imports in their own section. first_party_detection = false [tool.black] # Emit syntax compatible with older versions of python instead of only the range # specified by `requires-python`. TODO: Remove this once we support these older # versions of python and can expand the `requires-python` range. target-version = ["py38", "py39", "py310", "py311", "py312"]