diff --git a/README.md b/README.md
index 84e9cc44..050b8a55 100644
--- a/README.md
+++ b/README.md
@@ -95,8 +95,9 @@ Options
| | [`CIBW_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) [`CIBW_SKIP`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) | Choose the Python versions to build |
| **Build environment** | [`CIBW_ENVIRONMENT`](https://cibuildwheel.readthedocs.io/en/stable/options/#environment) | Set environment variables needed during the build |
| | [`CIBW_BEFORE_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-build) | Execute a shell command preparing each wheel's build |
+| | [`CIBW_REPAIR_WHEEL_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#repair-wheel-command) | Execute a shell command to repair each (non-pure Python) built wheel |
| | [`CIBW_MANYLINUX_X86_64_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) [`CIBW_MANYLINUX_I686_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) | Specify alternative manylinux docker images |
-| **Testing** | [`CIBW_TEST_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-command) | Execute a shell command to test all built wheels |
+| **Testing** | [`CIBW_TEST_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-command) | Execute a shell command to test each built wheel |
| | [`CIBW_TEST_REQUIRES`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-requires) | Install Python dependencies before running the tests |
| | [`CIBW_TEST_EXTRAS`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-extras) | Install your wheel for testing using extras_require |
| **Other** | [`CIBW_BUILD_VERBOSITY`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-extras) | Increase/decrease the output of pip wheel |
@@ -122,7 +123,7 @@ Here are some repos that use cibuildwheel.
Legal note
----------
-Since `cibuildwheel` runs the wheel through delocate or auditwheel, it might automatically bundle dynamically linked libraries from the build machine.
+Since `cibuildwheel` repairs the wheel with `delocate` or `auditwheel`, it might automatically bundle dynamically linked libraries from the build machine.
It helps ensure that the library can run without any dependencies outside of the pip toolchain.
diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py
index a10bcee4..9b237f76 100644
--- a/cibuildwheel/__main__.py
+++ b/cibuildwheel/__main__.py
@@ -89,6 +89,13 @@ def main():
before_build = get_option_from_environment('CIBW_BEFORE_BUILD', platform=platform)
build_verbosity = get_option_from_environment('CIBW_BUILD_VERBOSITY', platform=platform, default='')
build_config, skip_config = os.environ.get('CIBW_BUILD', '*'), os.environ.get('CIBW_SKIP', '')
+ if platform == 'linux':
+ repair_command_default = 'auditwheel repair -w {dest_dir} {wheel}'
+ elif platform == 'macos':
+ repair_command_default = 'delocate-listdeps {wheel} && delocate-wheel -w {dest_dir} {wheel}'
+ else:
+ repair_command_default = ''
+ repair_command = get_option_from_environment('CIBW_REPAIR_WHEEL_COMMAND', platform=platform, default=repair_command_default)
environment_config = get_option_from_environment('CIBW_ENVIRONMENT', platform=platform, default='')
if test_extras:
@@ -130,6 +137,7 @@ def main():
before_build=before_build,
build_verbosity=build_verbosity,
build_selector=build_selector,
+ repair_command=repair_command,
environment=environment,
)
diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py
index 7605c943..eb420516 100644
--- a/cibuildwheel/linux.py
+++ b/cibuildwheel/linux.py
@@ -30,7 +30,7 @@ def get_python_configurations(build_selector):
return [c for c in python_configurations if build_selector(c.identifier)]
-def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, environment, manylinux_images):
+def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment, manylinux_images):
try:
subprocess.check_call(['docker', '--version'])
except:
@@ -60,30 +60,28 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
{environment_exports}
for PYBIN in {pybin_paths}; do
- # Setup
- rm -rf /tmp/built_wheel
- rm -rf /tmp/delocated_wheels
- mkdir /tmp/built_wheel
- mkdir /tmp/delocated_wheels
-
if [ ! -z {before_build} ]; then
PATH="$PYBIN:$PATH" sh -c {before_build}
fi
- # Build that wheel
+ # Build the wheel
+ rm -rf /tmp/built_wheel
+ mkdir /tmp/built_wheel
PATH="$PYBIN:$PATH" "$PYBIN/pip" wheel . -w /tmp/built_wheel --no-deps {build_verbosity_flag}
built_wheel=(/tmp/built_wheel/*.whl)
- # Delocate the wheel
+ # repair the wheel
+ rm -rf /tmp/repaired_wheels
+ mkdir /tmp/repaired_wheels
# NOTE: 'built_wheel' here is a bash array of glob matches; "$built_wheel" returns
# the first element
- if [[ "$built_wheel" == *none-any.whl ]]; then
- # pure python wheel - just copy
- mv "$built_wheel" /tmp/delocated_wheels
+ if [[ "$built_wheel" == *none-any.whl ]] || [ -z {repair_command} ]; then
+ # pure Python wheel or empty repair command
+ mv "$built_wheel" /tmp/repaired_wheels
else
- auditwheel repair "$built_wheel" -w /tmp/delocated_wheels
+ sh -c {repair_command} repair_command "$built_wheel"
fi
- delocated_wheels=(/tmp/delocated_wheels/*.whl)
+ repaired_wheels=(/tmp/repaired_wheels/*.whl)
if [ ! -z {test_command} ]; then
# Set up a virtual environment to install and test from, to make sure
@@ -105,7 +103,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
# functionally the same, differing only in name, wheel metadata, and possibly include
# different external shared libraries. so it doesn't matter which one we run the tests on.
# Let's just pick the first one.
- pip install "${{delocated_wheels[0]}}"{test_extras}
+ pip install "${{repaired_wheels[0]}}"{test_extras}
# Install any requirements to run the tests
if [ ! -z "{test_requires}" ]; then
@@ -127,8 +125,8 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
fi
# we're all done here; move it to output
- mv "${{delocated_wheels[@]}}" /output
- for delocated_wheel in "${{delocated_wheels[@]}}"; do chown {uid}:{gid} "/output/$(basename "$delocated_wheel")"; done
+ mv "${{repaired_wheels[@]}}" /output
+ for repaired_wheel in "${{repaired_wheels[@]}}"; do chown {uid}:{gid} "/output/$(basename "$repaired_wheel")"; done
done
'''.format(
pybin_paths=' '.join(c.path+'/bin' for c in platform_configs),
@@ -141,6 +139,9 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
prepare_command(before_build, project='/project') if before_build else ''
),
build_verbosity_flag=' '.join(get_build_verbosity_extra_flags(build_verbosity)),
+ repair_command=shlex_quote(
+ prepare_command(repair_command, wheel='"$1"', dest_dir='/tmp/repaired_wheels') if repair_command else ''
+ ),
environment_exports='\n'.join(environment.as_shell_commands()),
uid=os.getuid(),
gid=os.getgid(),
diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py
index 40e59a86..1344c9ff 100644
--- a/cibuildwheel/macos.py
+++ b/cibuildwheel/macos.py
@@ -25,7 +25,12 @@ def get_python_configurations(build_selector):
return [c for c in python_configurations if build_selector(c.identifier)]
-def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, environment):
+def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
+ abs_project_dir = os.path.abspath(project_dir)
+ temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')
+ built_wheel_dir = os.path.join(temp_dir, 'built_wheel')
+ repaired_wheel_dir = os.path.join(temp_dir, 'repaired_wheel')
+
python_configurations = get_python_configurations(build_selector)
get_pip_url = 'https://bootstrap.pypa.io/get-pip.py'
get_pip_script = '/tmp/get-pip.py'
@@ -44,8 +49,6 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
return subprocess.check_call(args, env=env, cwd=cwd, shell=shell)
- abs_project_dir = os.path.abspath(project_dir)
-
# get latest pip once and for all
call(['curl', '-L', '-o', get_pip_script, get_pip_url])
@@ -94,32 +97,29 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
call(['pip', '--version'], env=env)
call(['pip', 'install', '--upgrade', 'setuptools', 'wheel', 'delocate'], env=env)
- # setup dirs
- if os.path.exists('/tmp/built_wheel'):
- shutil.rmtree('/tmp/built_wheel')
- os.makedirs('/tmp/built_wheel')
- if os.path.exists('/tmp/delocated_wheel'):
- shutil.rmtree('/tmp/delocated_wheel')
- os.makedirs('/tmp/delocated_wheel')
-
# run the before_build command
if before_build:
before_build_prepared = prepare_command(before_build, project=abs_project_dir)
call(before_build_prepared, env=env, shell=True)
# build the wheel
- call(['pip', 'wheel', abs_project_dir, '-w', '/tmp/built_wheel', '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
- built_wheel = glob('/tmp/built_wheel/*.whl')[0]
+ if os.path.exists(built_wheel_dir):
+ shutil.rmtree(built_wheel_dir)
+ os.makedirs(built_wheel_dir)
+ call(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
+ built_wheel = glob(os.path.join(built_wheel_dir, '*.whl'))[0]
- if built_wheel.endswith('none-any.whl'):
- # pure python wheel - just move
- shutil.move(built_wheel, '/tmp/delocated_wheel')
+ # repair the wheel
+ if os.path.exists(repaired_wheel_dir):
+ shutil.rmtree(repaired_wheel_dir)
+ os.makedirs(repaired_wheel_dir)
+ if built_wheel.endswith('none-any.whl') or not repair_command:
+ # pure Python wheel or empty repair command
+ shutil.move(built_wheel, repaired_wheel_dir)
else:
- # list the dependencies
- call(['delocate-listdeps', built_wheel], env=env)
- # rebuild the wheel with shared libraries included and place in output dir
- call(['delocate-wheel', '-w', '/tmp/delocated_wheel', built_wheel], env=env)
- delocated_wheel = glob('/tmp/delocated_wheel/*.whl')[0]
+ repair_command_prepared = prepare_command(repair_command, wheel=built_wheel, dest_dir=repaired_wheel_dir)
+ call(repair_command_prepared, env=env, shell=True)
+ repaired_wheel = glob(os.path.join(repaired_wheel_dir, '*.whl'))[0]
if test_command:
# set up a virtual environment to install and test from, to make sure
@@ -141,7 +141,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
call(['which', 'python'], env=virtualenv_env)
# install the wheel
- call(['pip', 'install', delocated_wheel + test_extras], env=virtualenv_env)
+ call(['pip', 'install', repaired_wheel + test_extras], env=virtualenv_env)
# test the wheel
if test_requires:
@@ -157,5 +157,5 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
shutil.rmtree(venv_dir)
# we're all done here; move it to output (overwrite existing)
- dst = os.path.join(output_dir, os.path.basename(delocated_wheel))
- shutil.move(delocated_wheel, dst)
+ dst = os.path.join(output_dir, os.path.basename(repaired_wheel))
+ shutil.move(repaired_wheel, dst)
diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py
index 160e8c20..ccbe57c0 100644
--- a/cibuildwheel/util.py
+++ b/cibuildwheel/util.py
@@ -2,14 +2,14 @@ from fnmatch import fnmatch
import warnings
-def prepare_command(command, project):
+def prepare_command(command, **kwargs):
'''
- Preprocesses a command by expanding variables like {project}.
+ Preprocesses a command by expanding variables like {python}.
- For example, used in the test_command option, to specify the path to the
- tests directory.
+ For example, used in the test_command option to specify the path to the
+ project's root.
'''
- return command.format(python='python', pip='pip', project=project)
+ return command.format(python='python', pip='pip', **kwargs)
def get_build_verbosity_extra_flags(level):
diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py
index 4b1bea8b..e5d3240d 100644
--- a/cibuildwheel/windows.py
+++ b/cibuildwheel/windows.py
@@ -57,8 +57,7 @@ def get_python_configurations(build_selector):
return python_configurations
-
-def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, environment):
+def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
def simple_shell(args, env=None, cwd=None):
print('+ ' + ' '.join(args))
args = ['cmd', '/E:ON', '/V:ON', '/C'] + args
@@ -90,6 +89,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
abs_project_dir = os.path.abspath(project_dir)
temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')
built_wheel_dir = os.path.join(temp_dir, 'built_wheel')
+ repaired_wheel_dir = os.path.join(temp_dir, 'repaired_wheel')
# install nuget as best way to provide python
nuget = 'C:\\cibw\\nuget.exe'
@@ -132,19 +132,29 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
simple_shell(['pip', '--version'], env=env)
simple_shell(['pip', 'install', '--upgrade', 'setuptools', 'wheel'], env=env)
- # setup dirs
- if os.path.exists(built_wheel_dir):
- shutil.rmtree(built_wheel_dir)
- os.makedirs(built_wheel_dir)
-
# run the before_build command
if before_build:
before_build_prepared = prepare_command(before_build, project=abs_project_dir)
shell([before_build_prepared], env=env)
# build the wheel
+ if os.path.exists(built_wheel_dir):
+ shutil.rmtree(built_wheel_dir)
+ os.makedirs(built_wheel_dir)
shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
- built_wheel = glob(built_wheel_dir+'/*.whl')[0]
+ built_wheel = glob(os.path.join(built_wheel_dir, '*.whl'))[0]
+
+ # repair the wheel
+ if os.path.exists(repaired_wheel_dir):
+ shutil.rmtree(repaired_wheel_dir)
+ os.makedirs(repaired_wheel_dir)
+ if built_wheel.endswith('none-any.whl') or not repair_command:
+ # pure Python wheel or empty repair command
+ shutil.move(built_wheel, repaired_wheel_dir)
+ else:
+ repair_command_prepared = prepare_command(repair_command, wheel=built_wheel, dest_dir=repaired_wheel_dir)
+ shell([repair_command_prepared], env=env)
+ repaired_wheel = glob(os.path.join(repaired_wheel_dir, '*.whl'))[0]
if test_command:
# set up a virtual environment to install and test from, to make sure
@@ -163,7 +173,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
shell(['which', 'python'], env=virtualenv_env)
# install the wheel
- shell(['pip', 'install', built_wheel + test_extras], env=virtualenv_env)
+ shell(['pip', 'install', repaired_wheel + test_extras], env=virtualenv_env)
# test the wheel
if test_requires:
@@ -179,7 +189,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef
shutil.rmtree(venv_dir)
# we're all done here; move it to output (remove if already exists)
- dst = os.path.join(output_dir, os.path.basename(built_wheel))
+ dst = os.path.join(output_dir, os.path.basename(repaired_wheel))
if os.path.isfile(dst):
os.remove(dst)
- shutil.move(built_wheel, dst)
+ shutil.move(repaired_wheel, dst)
diff --git a/docs/options.md b/docs/options.md
index edbc9939..f703d063 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -4,7 +4,7 @@
## Setting options
-cibuildwheel is configured using environment variables, that can be set using
+cibuildwheel is configured using environment variables, that can be set using
your CI config.
For example, to configure cibuildwheel to run tests, add the following YAML to
@@ -120,7 +120,7 @@ CIBW_SKIP: "*-win32 *-manylinux_i686"
font-size: 90%;
white-space: nowrap;
}
- .rst-content .build-id-table-marker + table td,
+ .rst-content .build-id-table-marker + table td,
.rst-content .build-id-table-marker + table th {
padding: 4px 4px;
}
@@ -148,6 +148,9 @@ You must set this variable to pass variables to Linux builds (since they execute
You can use `$PATH` syntax to insert other variables, or the `$(pwd)` syntax to insert the output of other shell commands.
+Platform-specific variants also available:
+`CIBW_ENVIRONMENT_MACOS` | `CIBW_ENVIRONMENT_WINDOWS` | `CIBW_ENVIRONMENT_LINUX`
+
#### Examples
```yaml
# Set some compiler flags
@@ -163,9 +166,6 @@ CIBW_ENVIRONMENT: "BUILD_TIME=$(date)"
CIBW_ENVIRONMENT: "PIP_EXTRA_INDEX_URL=https://pypi.myorg.com/simple"
```
-Platform-specific variants also available:
-`CIBW_ENVIRONMENT_MACOS` | `CIBW_ENVIRONMENT_WINDOWS` | `CIBW_ENVIRONMENT_LINUX`
-
!!! note
`cibuildwheel` always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](faq.md#building-packages-with-optional-c-extensions).
@@ -177,7 +177,12 @@ A shell command to run before building the wheel. This option allows you to run
If dependencies are required to build your wheel (for example if you include a header from a Python module), set this to `pip install .`, and the dependencies will be installed automatically by pip. However, this means your package will be built twice - if your package takes a long time to build, you might wish to manually list the dependencies here instead.
-The active Python binary can be accessed using `python`, and pip with `pip`; `cibuildwheel` makes sure the right version of Python and pip will be executed. `{project}` can be used as a placeholder for the absolute path to the project's root.
+The active Python binary can be accessed using `python`, and pip with `pip`; `cibuildwheel` makes sure the right version of Python and pip will be executed. `{project}` can be used as a placeholder for the absolute path to the project's root and will be replaced by `cibuildwheel`.
+
+On Linux and macOS, the command is run in a shell, so you can write things like `cmd1 && cmd2`.
+
+Platform-specific variants also available:
+ `CIBW_BEFORE_BUILD_MACOS` | `CIBW_BEFORE_BUILD_WINDOWS` | `CIBW_BEFORE_BUILD_LINUX`
#### Examples
```yaml
@@ -191,12 +196,42 @@ CIBW_BEFORE_BUILD: pip install pybind11
CIBW_BEFORE_BUILD: yum install -y libffi-dev && pip install .
```
-Platform-specific variants also available:
- `CIBW_BEFORE_BUILD_MACOS` | `CIBW_BEFORE_BUILD_WINDOWS` | `CIBW_BEFORE_BUILD_LINUX`
+
+### `CIBW_REPAIR_WHEEL_COMMAND` {: #repair-wheel-command}
+> Execute a shell command to repair each (non-pure Python) built wheel
+
+Default:
+
+- on Linux: `'auditwheel repair -w {dest_dir} {wheel}'`
+- on macOS: `'delocate-listdeps {wheel} && delocate-wheel -w {dest_dir} {wheel}'`
+- on Windows: `''`
+
+A shell command to repair a built wheel by copying external library dependencies into the wheel tree and relinking them.
+The command is run on each built wheel (except for pure Python ones) before testing it.
+
+The following placeholders must be used inside the command and will be replaced by `cibuildwheel`:
+
+- `{wheel}` for the absolute path to the built wheel
+- `{dest_dir}` for the absolute path of the directory where to create the repaired wheel.
+
+On Linux and macOS, the command is run in a shell, so you can write things like `cmd1 && cmd2`.
+
+Platform-specific variants also available:
+`CIBW_REPAIR_WHEEL_COMMAND_MACOS` | `CIBW_REPAIR_WHEEL_COMMAND_WINDOWS` | `CIBW_REPAIR_WHEEL_COMMAND_LINUX`
+
+#### Examples
+
+```yaml
+# don't repair macOS wheels
+CIBW_REPAIR_WHEEL_COMMAND_MACOS: ""
+
+# pass the `--lib-sdir .` flag to auditwheel on Linux
+CIBW_REPAIR_WHEEL_COMMAND_LINUX: "auditwheel repair --lib-sdir . -w {dest_dir} {wheel}"
+```
### `CIBW_MANYLINUX_X86_64_IMAGE`, `CIBW_MANYLINUX_I686_IMAGE` {: #manylinux-image}
-> Specify alternative manylinux docker images
+> Specify alternative manylinux docker images
An alternative Docker image to be used for building [`manylinux`](https://github.com/pypa/manylinux) wheels. `cibuildwheel` will then pull these instead of the default images, [`quay.io/pypa/manylinux2010_x86_64`](https://quay.io/pypa/manylinux2010_x86_64) and [`quay.io/pypa/manylinux2010_i686`](https://quay.io/pypa/manylinux2010_i686).
@@ -221,11 +256,14 @@ CIBW_MANYLINUX_I686_IMAGE: dockcross/manylinux-x86
## Testing
### `CIBW_TEST_COMMAND` {: #test-command}
-> Execute a shell command to test all built wheels
+> Execute a shell command to test each built wheel
Shell command to run tests after the build. The wheel will be installed automatically and available for import from the tests. `{project}` can be used as a placeholder for the absolute path to the project's root and will be replaced by `cibuildwheel`.
-On Linux and Mac, the command runs in a shell, so you can write things like `cmd1 && cmd2`.
+On Linux and macOS, the command is run in a shell, so you can write things like `cmd1 && cmd2`.
+
+Platform-specific variants also available:
+`CIBW_TEST_COMMAND_MACOS` | `CIBW_TEST_COMMAND_WINDOWS` | `CIBW_TEST_COMMAND_LINUX`
#### Examples
@@ -237,27 +275,25 @@ CIBW_TEST_COMMAND: nosetests {project}/tests
CIBW_TEST_COMMAND: nosetests {project}/tests
```
-Platform-specific variants also available:
-`CIBW_TEST_COMMAND_MACOS` | `CIBW_TEST_COMMAND_WINDOWS` | `CIBW_TEST_COMMAND_LINUX`
-
### `CIBW_TEST_REQUIRES` {: #test-requires}
> Install Python dependencies before running the tests
Space-separated list of dependencies required for running the tests.
+Platform-specific variants also available:
+`CIBW_TEST_REQUIRES_MACOS` | `CIBW_TEST_REQUIRES_WINDOWS` | `CIBW_TEST_REQUIRES_LINUX`
+
#### Examples
```yaml
# install pytest before running CIBW_TEST_COMMAND
-CIBW_TEST_REQUIRES: pytest
+CIBW_TEST_REQUIRES: pytest
# install specific versions of test dependencies
CIBW_TEST_REQUIRES: nose==1.3.7 moto==0.4.31
```
-Platform-specific variants also available:
-`CIBW_TEST_REQUIRES_MACOS` | `CIBW_TEST_REQUIRES_WINDOWS` | `CIBW_TEST_REQUIRES_LINUX`
### `CIBW_TEST_EXTRAS` {: #test-extras}
> Install your wheel for testing using `extras_require`
@@ -269,15 +305,16 @@ tests. This can be used to avoid having to redefine test dependencies in
`CIBW_TEST_REQUIRES` if they are already defined in `setup.py` or
`setup.cfg`.
+Platform-specific variants also available:
+`CIBW_TEST_EXTRAS_MACOS` | `CIBW_TEST_EXTRAS_WINDOWS` | `CIBW_TEST_EXTRAS_LINUX`
+
#### Examples
```yaml
# will cause the wheel to be installed with `pip install [test,qt]`
-CIBW_TEST_EXTRAS: test,qt
+CIBW_TEST_EXTRAS: test,qt
```
-Platform-specific variants also available:
-`CIBW_TEST_EXTRAS_MACOS` | `CIBW_TEST_EXTRAS_WINDOWS` | `CIBW_TEST_EXTRAS_LINUX`
## Other
@@ -286,6 +323,9 @@ Platform-specific variants also available:
An number from 1 to 3 to increase the level of verbosity (corresponding to invoking pip with `-v`, `-vv`, and `-vvv`), between -1 and -3 (`-q`, `-qq`, and `-qqq`), or just 0 (default verbosity). These flags are useful while debugging a build when the output of the actual build invoked by `pip wheel` is required.
+Platform-specific variants also available:
+`CIBW_BUILD_VERBOSITY_MACOS` | `CIBW_BUILD_VERBOSITY_WINDOWS` | `CIBW_BUILD_VERBOSITY_LINUX`
+
#### Examples
```yaml
@@ -293,8 +333,6 @@ An number from 1 to 3 to increase the level of verbosity (corresponding to invok
CIBW_BUILD_VERBOSITY: 1
```
-Platform-specific variants also available:
-`CIBW_BUILD_VERBOSITY_MACOS` | `CIBW_BUILD_VERBOSITY_WINDOWS` | `CIBW_BUILD_VERBOSITY_LINUX`
## Command line options
@@ -302,7 +340,7 @@ Platform-specific variants also available:
usage: cibuildwheel [-h] [--platform {auto,linux,macos,windows}]
[--output-dir OUTPUT_DIR] [--print-build-identifiers]
[project_dir]
-
+
Build wheels for all the platforms.
positional arguments:
@@ -381,7 +419,7 @@ optional arguments:
options[header].push({name: optionName, description, id});
});
-
+
// write the table of contents
var tocTable = $('.options-toc');