2020-12-23 16:31:42 -05:00
[ build-system ]
2024-05-20 02:45:05 -04:00
requires = [ "hatchling" ]
build-backend = "hatchling.build"
2021-02-02 16:30:50 -05:00
2024-05-20 02:45:05 -04:00
[ project ]
name = "cibuildwheel"
2026-03-05 09:00:28 +00:00
version = "3.4.0"
2024-05-20 02:45:05 -04:00
description = "Build Python wheels on CI with minimal configuration."
readme = "README.md"
license = "BSD-2-Clause"
2025-06-02 23:36:28 -04:00
license-files = [ "LICENSE" ]
2025-01-16 16:45:18 +01:00
requires-python = ">=3.11"
2024-05-20 02:45:05 -04:00
authors = [
{ name = "Joe Rickerby" , email = "joerick@mac.com" },
]
keywords = [
"ci" ,
"linux" ,
"macos" ,
"packaging" ,
"pypi" ,
"wheel" ,
"windows" ,
]
classifiers = [
"Development Status :: 5 - Production/Stable" ,
"Intended Audience :: Developers" ,
"Natural Language :: English" ,
"Programming Language :: Python :: 3" ,
"Programming Language :: Python :: 3 :: Only" ,
"Programming Language :: Python :: 3.11" ,
"Programming Language :: Python :: 3.12" ,
2024-10-02 00:22:31 -04:00
"Programming Language :: Python :: 3.13" ,
2025-05-14 13:04:07 -04:00
"Programming Language :: Python :: 3.14" ,
2024-05-20 02:45:05 -04:00
"Programming Language :: Python :: Implementation :: CPython" ,
"Topic :: Software Development :: Build Tools" ,
]
dependencies = [
"bashlex!=0.13" ,
"bracex" ,
2025-07-23 22:18:33 +01:00
"build>=1.0.0" ,
2024-05-20 02:45:05 -04:00
"certifi" ,
2024-11-04 15:25:01 -05:00
"dependency-groups>=1.2" ,
2024-05-20 02:45:05 -04:00
"filelock" ,
2025-07-15 20:45:53 -07:00
"humanize" ,
2024-05-20 02:45:05 -04:00
"packaging>=20.9" ,
2025-08-13 08:52:44 -04:00
# patchelf is used for Android
"patchelf; (sys_platform == 'linux' or sys_platform == 'darwin') and (platform_machine == 'x86_64' or platform_machine == 'arm64' or platform_machine == 'aarch64')" ,
2025-07-23 22:18:33 +01:00
"platformdirs" ,
"pyelftools>=0.29" ,
"wheel>=0.33.6" ,
2024-05-20 02:45:05 -04:00
]
[ project . optional-dependencies ]
2024-11-19 13:30:06 -05:00
uv = [ "uv" ]
[ project . scripts ]
cibuildwheel = "cibuildwheel.__main__:main"
[ project . entry-points . "validate_pyproject.tool_schema" ]
cibuildwheel = "cibuildwheel.schema:get_schema"
[ project . urls ]
Changelog = "https://github.com/pypa/cibuildwheel#changelog"
Documentation = "https://cibuildwheel.pypa.io"
Homepage = "https://github.com/pypa/cibuildwheel"
[ dependency-groups ]
2024-05-20 02:45:05 -04:00
bin = [
"click" ,
"packaging>=21.0" ,
"pip-tools" ,
"pygithub" ,
"pyyaml" ,
"requests" ,
"rich>=9.6" ,
]
docs = [
"jinja2>=3.1.2" ,
2024-09-16 14:01:04 -04:00
"mkdocs-include-markdown-plugin==6.2.2" ,
2025-10-25 15:40:07 +02:00
"mkdocs-macros-plugin>=1.4.1" ,
2024-09-16 14:01:04 -04:00
"mkdocs==1.6.1" ,
2024-05-20 02:45:05 -04:00
"pymdown-extensions" ,
2025-06-01 01:34:20 -04:00
"rich" ,
2024-05-20 02:45:05 -04:00
]
test = [
"build" ,
2025-01-10 16:24:02 +01:00
"filelock" ,
2024-05-20 02:45:05 -04:00
"jinja2" ,
"pytest-timeout" ,
"pytest-xdist" ,
2025-09-06 15:22:22 +01:00
"pytest-rerunfailures!=16.0" ,
2026-03-13 15:44:48 -04:00
"pytest>=9" ,
2024-07-12 20:32:42 +02:00
"setuptools" ,
2024-05-20 02:45:05 -04:00
"tomli_w" ,
"validate-pyproject" ,
2025-08-12 09:06:12 -04:00
"xdoctest" ,
2024-05-20 02:45:05 -04:00
]
2024-11-19 13:30:06 -05:00
dev = [
{ include-group = "bin" },
{ include-group = "docs" },
{ include-group = "test" },
]
2024-05-20 02:45:05 -04:00
2021-06-12 11:40:33 -04:00
2026-03-13 15:44:48 -04:00
[ tool . pytest ]
minversion = "9.0"
addopts = [ "-ra" , "--showlocals" , "--xdoctest" , "--ignore-glob=*venv*" ]
strict = true
2021-06-12 11:40:33 -04:00
junit_family = "xunit2"
2022-02-22 17:27:20 -05:00
filterwarnings = [ "error" ]
2025-11-10 16:47:32 -05:00
log_level = "INFO"
2025-03-28 22:33:51 +08:00
markers = [
"serial: tests that must *not* be run in parallel (deselect with '-m \"not serial\"')" ,
2025-07-27 06:12:42 -04:00
"ios: tests that run on iOS" ,
"android: tests that run on Android" ,
"pyodide: tests that run on Pyodide" ,
2025-03-28 22:33:51 +08:00
]
2026-03-13 15:44:48 -04:00
required_plugins = [ "pytest-rerunfailures" ]
2021-06-12 11:40:33 -04:00
[ tool . mypy ]
2025-01-16 16:45:18 +01:00
python_version = "3.11"
2021-06-12 11:40:33 -04:00
files = [
"cibuildwheel/*.py" ,
"test/**/*.py" ,
"unit_test/**/*.py" ,
2021-10-26 15:56:35 -04:00
"bin/*.py" ,
"noxfile.py" ,
2021-06-12 11:40:33 -04:00
]
warn_unused_configs = true
2024-10-22 10:16:59 -04:00
strict = true
disallow_untyped_defs = false
2022-04-01 22:00:07 -04:00
enable_error_code = [ "ignore-without-code" , "redundant-expr" , "truthy-bool" ]
2024-10-22 10:16:59 -04:00
warn_unreachable = false
2022-04-01 22:00:07 -04:00
2021-06-12 14:02:06 -04:00
[[ tool . mypy . overrides ]]
module = "cibuildwheel.*"
disallow_untyped_defs = true
2021-06-12 11:40:33 -04:00
[[ tool . mypy . overrides ]]
module = [
2024-07-12 20:32:42 +02:00
"setuptools._distutils" , # needed even if only directly import setuptools._distutils.util
"setuptools._distutils.util" ,
2021-06-12 11:40:33 -04:00
"bashlex" ,
2022-09-17 11:15:00 +01:00
"bashlex.*" ,
2021-06-12 11:40:33 -04:00
"importlib_resources" ,
]
ignore_missing_imports = true
2021-09-25 05:41:09 -04:00
2021-10-26 12:06:09 -04:00
2022-02-27 14:16:37 -05:00
[ tool . pylint ]
2025-01-16 16:45:18 +01:00
py-version = "3.11"
2023-04-18 06:06:18 -07:00
jobs = "0"
fail-on = [ "E" , "F" ]
fail-under = "9.8"
2025-07-23 20:59:02 -04:00
max-positional-arguments = "7"
2022-02-27 14:16:37 -05:00
reports . output-format = "colorized"
messages_control . enable = [
"useless-suppression" ,
]
messages_control . disable = [
"abstract-class-instantiated" , # filelock triggers this
"duplicate-code" ,
"fixme" ,
"invalid-name" ,
"line-too-long" ,
"missing-class-docstring" ,
"missing-function-docstring" ,
"missing-module-docstring" ,
"no-else-break" ,
"no-else-return" ,
"protected-access" ,
"too-few-public-methods" ,
"too-many-arguments" ,
"too-many-branches" ,
"too-many-instance-attributes" ,
"too-many-lines" ,
"too-many-locals" ,
"too-many-nested-blocks" ,
"too-many-return-statements" ,
"too-many-statements" ,
"unsubscriptable-object" ,
"wrong-import-position" ,
2023-01-30 15:53:44 -05:00
"unused-argument" , # Handled by Ruff
2025-06-24 09:48:01 -04:00
"import-outside-toplevel" , # Handled by Ruff
2023-02-28 08:43:58 -05:00
"broad-exception-raised" , # Could be improved eventually
2024-06-09 15:45:31 -04:00
"consider-using-in" , # MyPy can't narrow "in"
2022-02-27 14:16:37 -05:00
]
2023-01-30 15:53:44 -05:00
[ tool . ruff ]
2026-03-24 23:51:49 -04:00
show-fixes = true
2023-10-27 01:21:20 -04:00
line-length = 100
2023-10-26 10:57:23 -04:00
[ tool . ruff . lint ]
extend-select = [
2023-04-18 12:00:35 -04:00
"B" , # flake8-bugbear
"I" , # isort
"ARG" , # flake8-unused-arguments
"C4" , # flake8-comprehensions
"EM" , # flake8-errmsg
"ICN" , # flake8-import-conventions
"ISC" , # flake8-implicit-str-concat
2023-04-18 12:01:08 -04:00
"G" , # flake8-logging-format
2023-04-18 12:00:35 -04:00
"PGH" , # pygrep-hooks
"PIE" , # flake8-pie
"PL" , # pylint
"PT" , # flake8-pytest-style
2025-02-28 11:56:29 -05:00
"PTH" , # flake8-use-pathlib
2023-04-18 12:00:35 -04:00
"RET" , # flake8-return
"RUF" , # Ruff-specific
"SIM" , # flake8-simplify
2023-04-18 12:38:21 -04:00
"TID251" , # flake8-tidy-imports.banned-api
2026-03-24 09:20:41 -04:00
"TID252" , # flake8-tidy-imports.relative-imports
2023-04-18 12:00:35 -04:00
"UP" , # pyupgrade
"YTT" , # flake8-2020
"EXE" , # flake8-executable
2023-10-26 10:57:23 -04:00
"PYI" , # flake8-pyi
2025-04-13 07:06:33 +02:00
"PERF101" , "PERF102" , "PERF401" , "PERF402" , "PERF403" , # A selection of perflint codes
2025-11-07 18:48:20 -05:00
"DTZ" , # flake8-datetimez
"FA" , # flake8-future-annotations
"FLY" , # flynt
"FURB" , # refurb
"LOG" , # flake8-logging
"Q" , # flake8-quotes
"SLOT" , # flake8-slots
"T10" , # flake8-debugger
"TC" , # flake8-type-checking
2023-01-30 15:53:44 -05:00
]
2023-10-26 10:57:23 -04:00
ignore = [
2026-03-24 23:51:49 -04:00
"PLR09" , # Design related pylint codes
"PLR2004" , # Magic value in comparison
2023-01-30 15:53:44 -05:00
"RET504" , "RET505" , "RET508" , # else after control flow
2025-02-25 01:43:09 -05:00
"PT007" , # Lists of tuples in Pytest
"PYI025" , # Set as AbstractSet
2025-02-28 11:56:29 -05:00
"PTH123" , # open -> Path.open
2023-01-30 15:53:44 -05:00
]
flake8-unused-arguments . ignore-variadic-names = true
2026-03-24 09:20:41 -04:00
flake8-tidy-imports . ban-relative-imports = "all"
2023-03-14 15:22:17 -04:00
2023-10-26 10:57:23 -04:00
[ tool . ruff . lint . flake8-tidy-imports . banned-api ]
2023-04-18 12:38:21 -04:00
"typing.Mapping" . msg = "Use collections.abc.Mapping instead."
"typing.Callable" . msg = "Use collections.abc.Callable instead."
"typing.Iterator" . msg = "Use collections.abc.Iterator instead."
"typing.Sequence" . msg = "Use collections.abc.Sequence instead."
"typing.Set" . msg = "Use collections.abc.Set instead."
2023-03-14 15:22:17 -04:00
2023-10-26 10:57:23 -04:00
[ tool . ruff . lint . per-file-ignores ]
2026-03-24 09:20:41 -04:00
"unit_test/*" = [ "PLC1901" , "TID252" ]
"test/*" = [ "TID252" ]
2024-05-20 02:45:05 -04:00
"bin/*" = [ "TID251" ]
2025-02-28 11:56:29 -05:00
"cibuildwheel/resources/install_certifi.py" = [ "PTH" ]
2024-02-02 21:02:42 -05:00
[ tool . repo-review ]
ignore = [ "PC170" , "PP303" ]
2024-10-02 14:52:36 -04:00
[ tool . check-wheel-contents ]
2025-02-28 11:56:29 -05:00
ignore = [ "W002" ] # constraints-*.txt are allowed to be duplicates of one another
2025-05-25 07:58:13 -04:00
[ tool . codespell ]
ignore-words-list = [
"sur" ,
"assertin" ,
]
skip = [
'^docs/working-examples\.md' ,
'htmlcov' ,
'all_known_setup.yaml' ,
]