diff --git a/README.md b/README.md index cec3816e..c4c93c99 100644 --- a/README.md +++ b/README.md @@ -40,194 +40,6 @@ Usage `cibuildwheel` is not intended to run on your development machine. It will try to install packages globally; this is no good. Travis CI, CircleCI, and AppVeyor run their builds in isolated environments, so are ideal for this kind of script. -### Minimal setup - -
- Azure Pipelines - - - - - -- Using Azure pipelines, you can build all three platforms on the same service. Create a `azure-pipelines.yml` file in your repo. - -**azure-pipelines.yml** -```yaml -jobs: -- job: linux - pool: {vmImage: 'Ubuntu-16.04'} - steps: - - task: UsePythonVersion@0 - - bash: | - python -m pip install --upgrade pip - pip install cibuildwheel==0.12.0 - cibuildwheel --output-dir wheelhouse . - - task: PublishBuildArtifacts@1 - inputs: {pathtoPublish: 'wheelhouse'} -- job: macos - pool: {vmImage: 'macOS-10.13'} - steps: - - task: UsePythonVersion@0 - - bash: | - python -m pip install --upgrade pip - pip install cibuildwheel==0.12.0 - cibuildwheel --output-dir wheelhouse . - - task: PublishBuildArtifacts@1 - inputs: {pathtoPublish: 'wheelhouse'} -- job: windows - pool: {vmImage: 'vs2017-win2016'} - steps: - - {task: UsePythonVersion@0, inputs: {versionSpec: '2.7', architecture: x86}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '2.7', architecture: x64}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.5', architecture: x86}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.5', architecture: x64}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.6', architecture: x86}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.6', architecture: x64}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.7', architecture: x86}} - - {task: UsePythonVersion@0, inputs: {versionSpec: '3.7', architecture: x64}} - - script: choco install vcpython27 -f -y - displayName: Install Visual C++ for Python 2.7 - - bash: | - python -m pip install --upgrade pip - pip install cibuildwheel==0.12.0 - cibuildwheel --output-dir wheelhouse . - - task: PublishBuildArtifacts@1 - inputs: {pathtoPublish: 'wheelhouse'} -``` - -
- -
- Travis CI - - - - -- To build Linux and Mac wheels on Travis CI, create a `.travis.yml` file in your repo. - - ``` - language: python - - matrix: - include: - - sudo: required - services: - - docker - env: PIP=pip - - os: osx - language: generic - env: PIP=pip2 - - script: - - $PIP install cibuildwheel==0.12.0 - - cibuildwheel --output-dir wheelhouse - ``` - - Then setup a deployment method by following the [Travis CI deployment docs](https://docs.travis-ci.com/user/deployment/), or see [Delivering to PyPI](#delivering-to-pypi) below. - -
- -
- CircleCI - - - - -- To build Linux and Mac wheels on CircleCI, create a `.circleci/config.yml` file in your repo, - - ``` - version: 2 - - jobs: - linux-wheels: - working_directory: ~/linux-wheels - docker: - - image: circleci/python:3.6 - steps: - - checkout - - setup_remote_docker - - run: - name: Build the Linux wheels. - command: | - pip install --user cibuildwheel - cibuildwheel --output-dir wheelhouse - - store_artifacts: - path: wheelhouse/ - - osx-wheels: - working_directory: ~/osx-wheels - macos: - xcode: "10.0.0" - steps: - - checkout - - run: - name: Build the OS X wheels. - command: | - pip install --user cibuildwheel - cibuildwheel --output-dir wheelhouse - - store_artifacts: - path: wheelhouse/ - - workflows: - version: 2 - all-tests: - jobs: - - linux-wheels - - osx-wheels - ``` - - Note: CircleCI doesn't enable free macOS containers for open source by default, but you can ask for access. See [here](https://circleci.com/docs/2.0/oss/#overview) for more information. - - CircleCI will store the built wheels for you - you can access them from the project console. - -
- - -
- AppVeyor - - - -- To build Windows wheels on AppVeyor, create an `appveyor.yml` file in your repo. - - ``` - build_script: - - pip install cibuildwheel==0.12.0 - - cibuildwheel --output-dir wheelhouse - artifacts: - - path: "wheelhouse\\*.whl" - name: Wheels - ``` - - AppVeyor will store the built wheels for you - you can access them from the project console. Alternatively, you may want to store them in the same place as the Travis CI build. See [AppVeyor deployment docs](https://www.appveyor.com/docs/deployment/) for more info, or see [Delivering to PyPI](#delivering-to-pypi) below. - -
- -- Commit those files, enable building of your repo on Travis CI and AppVeyor, and push. - -All being well, you should get wheels delivered to you in a few minutes. - -> ⚠️ Got an error? Check the [checklist](#it-didnt-work) below. - -### Configuration overview - -`cibuildwheel` allows for easy customization of the various phases of the build process demonstrated above: - -| | Option | | -|---|---|---| -| **Target wheels** | `CIBW_PLATFORM` | Override the auto-detected target platform | -| | `CIBW_BUILD` | Build only certain Python versions | -| | `CIBW_SKIP` | Skip certain Python versions | -| **Build parameters** | `CIBW_BUILD_VERBOSITY` | Increase or decrease the output of `pip wheel` | -| **Build environment** | `CIBW_ENVIRONMENT` | Set environment variables needed during the build | -| | `CIBW_BEFORE_BUILD` | Execute a shell command preparing each wheel's build | -| | `CIBW_MANYLINUX1_X86_64_IMAGE` | Specify an alternative manylinx1 x86_64 docker image | -| | `CIBW_MANYLINUX1_I686_IMAGE` | Specify an alternative manylinux1 i686 docker image | -| **Tests** | `CIBW_TEST_COMMAND` | Execute a shell command to test all built wheels | -| | `CIBW_TEST_REQUIRES` | Install Python dependencies before running the tests | -| | `CIBW_TEST_EXTRAS` | Install Python dependencies before running the tests using ``extras_require``| - -A more detailed description of the options, the allowed values, and some examples can be found in the [Options](#options) section. ### Linux builds on Docker @@ -269,170 +81,6 @@ optional arguments: ``` -Most of the config is via environment variables. These go into `.travis.yml`, `appveyor.yml`, and `.circleci/config.yml` nicely. - -*** - -| Environment variable: `CIBW_PLATFORM` | Command line argument: `--platform` -| --- | --- - -Options: `auto` `linux` `macos` `windows` - -Default: `auto` - -`auto` will auto-detect platform using environment variables, such as `TRAVIS_OS_NAME`/`APPVEYOR`/`CIRCLECI`. - -For `linux` you need Docker running, on Mac or Linux. For `macos`, you need a Mac machine, and note that this script is going to automatically install MacPython on your system, so don't run on your development machine. For `windows`, you need to run in Windows, and it will build and test for all versions of Python at `C:\PythonXX[-x64]`. - -*** - -| Environment variables: `CIBW_BUILD` and `CIBW_SKIP` -| --- - -Optional. - -Space-separated list of builds to build and skip. Each build has an identifier like `cp27-manylinux1_x86_64` or `cp34-macosx_10_6_intel` - you can list specific ones to build and `cibuildwheel` will only build those, and/or list ones to skip and `cibuildwheel` won't try to build them. - -When both options are specified, both conditions are applied and only builds with a tag that matches `CIBW_BUILD` and does not match `CIBW_SKIP` will be built. - -The format is `python_tag-platform_tag`. The tags are as defined in [PEP 0425](https://www.python.org/dev/peps/pep-0425/#details). - -Python tags look like `cp27` `cp34` `cp35` `cp36` `cp37` - -Platform tags look like `macosx_10_6_intel` `manylinux1_x86_64` `manylinux1_i686` `win32` `win_amd64` - -You can also use shell-style globbing syntax (as per `fnmatch`) - -Examples: -- Only build on Python 3.6: `CIBW_BUILD`:`cp36-*` -- Skip building on Python 2.7 on the Mac: `CIBW_SKIP`:`cp27-macosx_10_6_intel` -- Skip building on Python 2.7 on all platforms: `CIBW_SKIP`:`cp27-*` -- Skip Python 2.7 on Windows: `CIBW_SKIP`:`cp27-win*` -- Skip Python 2.7 on 32-bit Windows: `CIBW_SKIP`:`cp27-win32` -- Skip Python 3.4 and Python 3.5: `CIBW_SKIP`:`cp34-* cp35-*` -- Skip Python 3.6 on Linux: `CIBW_SKIP`:`cp36-manylinux*` -- Only build on Python 3 and skip 32-bit builds: `CIBW_BUILD`:`cp3?-*` and `CIBW_SKIP`:`*-win32 *-manylinux1_i686` - -*** - -| Environment variable: `CIBW_BUILD_VERBOSITY` -| --- - -Optional. - -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` - -*** - -| Environment variable: `CIBW_ENVIRONMENT` -| --- - -Optional. - -A space-separated list of environment variables to set during the build. Bash syntax should be used (even on Windows!). - -You must set this variable to pass variables to Linux builds (since they execute in a Docker container). It also works for the other platforms. - -You can use `$PATH` syntax to insert other variables, or the `$(pwd)` syntax to insert the output of other shell commands. - -Example: `CFLAGS="-g -Wall" CXXFLAGS="-Wall"` -Example: `PATH=$PATH:/usr/local/bin` -Example: `BUILD_TIME="$(date)"` -Example: `PIP_EXTRA_INDEX_URL="https://pypi.myorg.com/simple"` - -Platform-specific variants also available: -`CIBW_ENVIRONMENT_MACOS` | `CIBW_ENVIRONMENT_WINDOWS` | `CIBW_ENVIRONMENT_LINUX` - -In addition to the above, `cibuildwheel` always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](https://github.com/joerick/cibuildwheel/wiki/Building-packages-with-optional-C-extensions). - -*** - -| Environment variable: `CIBW_BEFORE_BUILD` -| --- - -Optional. - -A shell command to run before building the wheel. This option allows you to run a command in **each** Python environment before the `pip wheel` command. This is useful if you need to set up some dependency so it's available during the build. - -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. - -Example: `pip install .` -Example: `pip install pybind11` -Example: `yum install -y libffi-dev && pip install .` - -Platform-specific variants also available: - `CIBW_BEFORE_BUILD_MACOS` | `CIBW_BEFORE_BUILD_WINDOWS` | `CIBW_BEFORE_BUILD_LINUX` - -*** - -| Environment variables: `CIBW_MANYLINUX1_X86_64_IMAGE` and `CIBW_MANYLINUX1_I686_IMAGE` -| --- - -Optional. - -An alternative docker image to be used for building [`manylinux1`](https://github.com/pypa/manylinux) wheels. `cibuildwheel` will then pull these instead of the official images, [`quay.io/pypa/manylinux1_x86_64`](https://quay.io/pypa/manylinux1_i686) and [`quay.io/pypa/manylinux1_i686`](https://quay.io/pypa/manylinux1_i686). - -Beware to specify a valid docker image that can be used the same as the official, default docker images: all necessary Python and pip versions need to be present in `/opt/python/`, and the `auditwheel` tool needs to be present for `cibuildwheel` to work. Apart from that, the architecture and relevant shared system libraries need to be manylinux1-compatible in order to produce valid `manylinux1` wheels (see https://github.com/pypa/manylinux and [PEP 513](https://www.python.org/dev/peps/pep-0513/) for more details). - -Example: `dockcross/manylinux-x64` -Example: `dockcross/manylinux-x86` - -*** - -| Environment variable: `CIBW_TEST_COMMAND` -| --- - -Optional. - -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`. - -Example: `nosetests {project}/tests` - -Platform-specific variants also available: -`CIBW_TEST_COMMAND_MACOS` | `CIBW_TEST_COMMAND_WINDOWS` | `CIBW_TEST_COMMAND_LINUX` - -*** - -| Environment variable: `CIBW_TEST_REQUIRES` -| --- - -Optional. - -Space-separated list of dependencies required for running the tests. - -Example: `pytest` -Example: `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` - -*** - -| Environment variable: `CIBW_TEST_EXTRAS` -| --- - -Optional. - -Comma-separated list of -[extras_require](https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies) -options that should be included when installing the wheel prior to running the -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`. - -Example: `test,qt` (will cause the wheel to be installed with `pip install [test,qt]`) - - -Platform-specific variants also available: -`CIBW_TEST_EXTRAS_MACOS` | `CIBW_TEST_EXTRAS_WINDOWS` | `CIBW_TEST_EXTRAS_LINUX` - ### Example YML syntax diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..01e0d0cd --- /dev/null +++ b/docs/index.md @@ -0,0 +1,39 @@ +Home +==== + +Python wheels are great. Building them across **Mac, Linux, Windows**, on **multiple versions of Python**, is not. + +`cibuildwheel` is here to help. `cibuildwheel` runs on your CI server - currently it supports Azure Pipelines, Travis CI, AppVeyor, and CircleCI - and it builds and tests your wheels across all of your platforms. + +**`cibuildwheel` is in beta**. It's brand new - I'd love for you to try it and help make it better! + +What does it do? +---------------- + +| | macOS 10.6+ | manylinux i686 | manylinux x86_64 | Windows 32bit | Windows 64bit | +|---|---|---|---|---|---| +| Python 2.7 | ✅ | ✅ | ✅ | ✅ | ✅ | +| Python 3.4 | ✅ | ✅ | ✅ | ✅* | ✅* | +| Python 3.5 | ✅ | ✅ | ✅ | ✅ | ✅ | +| Python 3.6 | ✅ | ✅ | ✅ | ✅ | ✅ | +| Python 3.7 | ✅ | ✅ | ✅ | ✅ | ✅ | + +> \* Not supported on Azure Pipelines + +- Builds manylinux, macOS and Windows (32 and 64bit) wheels using Azure Pipelines, Travis CI, AppVeyor, and CircleCI +- Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate) +- Runs the library test suite against the wheel-installed version of your library + +Usage +----- + +`cibuildwheel` currently works **Travis CI** and **CircleCI** to build Linux and Mac wheels, and **AppVeyor** to build Windows wheels. **Azure Pipelines** supports all three. + +| | Linux | macOS | Windows | +|-----------------|-------|-------|---------| +| Azure Pipelines | ✅ | ✅ | ✅ | +| Travis CI | ✅ | ✅ | | +| AppVeyor | | | ✅ | +| CircleCI | ✅ | ✅ | | + +`cibuildwheel` is not intended to run on your development machine. It will try to install packages globally; this is no good. Travis CI, CircleCI, and AppVeyor run their builds in isolated environments, so are ideal for this kind of script. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml deleted file mode 100644 index 3fe64b17..00000000 --- a/docs/mkdocs.yml +++ /dev/null @@ -1,2 +0,0 @@ -site_name: My Docs -docs_dir: pages diff --git a/docs/options.md b/docs/options.md new file mode 100644 index 00000000..6174e1b9 --- /dev/null +++ b/docs/options.md @@ -0,0 +1,178 @@ +## Options summary + +`cibuildwheel` allows for easy customization of the various phases of the build process demonstrated above: + +| | Option | | +|---|---|---| +| **Target wheels** | `CIBW_PLATFORM` | Override the auto-detected target platform | +| | `CIBW_BUILD` | Build only certain Python versions | +| | `CIBW_SKIP` | Skip certain Python versions | +| **Build parameters** | `CIBW_BUILD_VERBOSITY` | Increase or decrease the output of `pip wheel` | +| **Build environment** | `CIBW_ENVIRONMENT` | Set environment variables needed during the build | +| | `CIBW_BEFORE_BUILD` | Execute a shell command preparing each wheel's build | +| | `CIBW_MANYLINUX1_X86_64_IMAGE` | Specify an alternative manylinx1 x86_64 docker image | +| | `CIBW_MANYLINUX1_I686_IMAGE` | Specify an alternative manylinux1 i686 docker image | +| **Tests** | `CIBW_TEST_COMMAND` | Execute a shell command to test all built wheels | +| | `CIBW_TEST_REQUIRES` | Install Python dependencies before running the tests | +| | `CIBW_TEST_EXTRAS` | Install Python dependencies before running the tests using ``extras_require``| + +Most of the config is via environment variables. These go into `.travis.yml`, `appveyor.yml`, and `.circleci/config.yml` nicely. + +## Build selection + +### CIBW_PLATFORM + +Options: `auto` `linux` `macos` `windows` + +Default: `auto` + +`auto` will auto-detect platform using environment variables, such as `TRAVIS_OS_NAME`/`APPVEYOR`/`CIRCLECI`. + +For `linux` you need Docker running, on Mac or Linux. For `macos`, you need a Mac machine, and note that this script is going to automatically install MacPython on your system, so don't run on your development machine. For `windows`, you need to run in Windows, and it will build and test for all versions of Python at `C:\PythonXX[-x64]`. + +### CIBW_BUILD and CIBW_SKIP + +Space-separated list of builds to build and skip. Each build has an identifier like `cp27-manylinux1_x86_64` or `cp34-macosx_10_6_intel` - you can list specific ones to build and `cibuildwheel` will only build those, and/or list ones to skip and `cibuildwheel` won't try to build them. + +When both options are specified, both conditions are applied and only builds with a tag that matches `CIBW_BUILD` and does not match `CIBW_SKIP` will be built. + +The format is `python_tag-platform_tag`. The tags are as defined in [PEP 0425](https://www.python.org/dev/peps/pep-0425/#details). + +Python tags look like `cp27` `cp34` `cp35` `cp36` `cp37` + +Platform tags look like `macosx_10_6_intel` `manylinux1_x86_64` `manylinux1_i686` `win32` `win_amd64` + +You can also use shell-style globbing syntax (as per `fnmatch`) + +Examples: + +- Only build on Python 3.6: `CIBW_BUILD=cp36-*` +- Skip building on Python 2.7 on the Mac: `CIBW_SKIP=cp27-macosx_10_6_intel` +- Skip building on Python 2.7 on all platforms: `CIBW_SKIP=cp27-*` +- Skip Python 2.7 on Windows: `CIBW_SKIP=cp27-win*` +- Skip Python 2.7 on 32-bit Windows: `CIBW_SKIP=cp27-win32` +- Skip Python 3.4 and Python 3.5: `CIBW_SKIP=cp34-* cp35-*` +- Skip Python 3.6 on Linux: `CIBW_SKIP=cp36-manylinux*` +- Only build on Python 3 and skip 32-bit builds: `CIBW_BUILD=cp3?-*` and `CIBW_SKIP=*-win32 *-manylinux1_i686` + +## Build environment + +### CIBW_ENVIRONMENT + +A space-separated list of environment variables to set during the build. Bash syntax should be used (even on Windows!). + +You must set this variable to pass variables to Linux builds (since they execute in a Docker container). It also works for the other platforms. + +You can use `$PATH` syntax to insert other variables, or the `$(pwd)` syntax to insert the output of other shell commands. + +Example: `CFLAGS="-g -Wall" CXXFLAGS="-Wall"` +Example: `PATH=$PATH:/usr/local/bin` +Example: `BUILD_TIME="$(date)"` +Example: `PIP_EXTRA_INDEX_URL="https://pypi.myorg.com/simple"` + +Platform-specific variants also available: +`CIBW_ENVIRONMENT_MACOS` | `CIBW_ENVIRONMENT_WINDOWS` | `CIBW_ENVIRONMENT_LINUX` + +In addition to the above, `cibuildwheel` always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](https://github.com/joerick/cibuildwheel/wiki/Building-packages-with-optional-C-extensions). + +### CIBW_BEFORE_BUILD + +A shell command to run before building the wheel. This option allows you to run a command in **each** Python environment before the `pip wheel` command. This is useful if you need to set up some dependency so it's available during the build. + +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. + +Example: `pip install .` +Example: `pip install pybind11` +Example: `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_MANYLINUX1_X86_64_IMAGE and CIBW_MANYLINUX1_I686_IMAGE + +An alternative docker image to be used for building [`manylinux1`](https://github.com/pypa/manylinux) wheels. `cibuildwheel` will then pull these instead of the official images, [`quay.io/pypa/manylinux1_x86_64`](https://quay.io/pypa/manylinux1_i686) and [`quay.io/pypa/manylinux1_i686`](https://quay.io/pypa/manylinux1_i686). + +Beware to specify a valid docker image that can be used the same as the official, default docker images: all necessary Python and pip versions need to be present in `/opt/python/`, and the `auditwheel` tool needs to be present for `cibuildwheel` to work. Apart from that, the architecture and relevant shared system libraries need to be manylinux1-compatible in order to produce valid `manylinux1` wheels (see https://github.com/pypa/manylinux and [PEP 513](https://www.python.org/dev/peps/pep-0513/) for more details). + +Example: `dockcross/manylinux-x64` +Example: `dockcross/manylinux-x86` + +## Testing + +### CIBW_TEST_COMMAND + +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`. + +Example: `nosetests {project}/tests` + +Platform-specific variants also available: +`CIBW_TEST_COMMAND_MACOS` | `CIBW_TEST_COMMAND_WINDOWS` | `CIBW_TEST_COMMAND_LINUX` + +### CIBW_TEST_REQUIRES + +Space-separated list of dependencies required for running the tests. + +Example: `pytest` +Example: `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 + +Comma-separated list of +[extras_require](https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies) +options that should be included when installing the wheel prior to running the +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`. + +Example: `test,qt` (will cause the wheel to be installed with `pip install [test,qt]`) + + +Platform-specific variants also available: +`CIBW_TEST_EXTRAS_MACOS` | `CIBW_TEST_EXTRAS_WINDOWS` | `CIBW_TEST_EXTRAS_LINUX` + +## Other + +### CIBW_BUILD_VERBOSITY + +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` + +## Command line options + +``` +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: + project_dir Path to the project that you want wheels for. + Default: the current directory. + +optional arguments: + -h, --help show this help message and exit + --platform {auto,linux,macos,windows} + Platform to build for. For "linux" you need docker + running, on Mac or Linux. For "macos", you need a Mac + machine, and note that this script is going to + automatically install MacPython on your system, so + don't run on your development machine. For "windows", + you need to run in Windows, and it will build and test + for all versions of Python at C:\PythonXX[-x64]. + --output-dir OUTPUT_DIR + Destination folder for the wheels. + --print-build-identifiers + Print the build identifiers matched by the current + invocation and exit. + +``` diff --git a/docs/pages/index.md b/docs/pages/index.md deleted file mode 100644 index d3880397..00000000 --- a/docs/pages/index.md +++ /dev/null @@ -1,17 +0,0 @@ -# Welcome to MkDocs - -For full documentation visit [mkdocs.org](https://mkdocs.org). - -## Commands - -* `mkdocs new [dir-name]` - Create a new project. -* `mkdocs serve` - Start the live-reloading docs server. -* `mkdocs build` - Build the documentation site. -* `mkdocs help` - Print this help message. - -## Project layout - - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. diff --git a/docs/setup.md b/docs/setup.md new file mode 100644 index 00000000..5fb1c3ac --- /dev/null +++ b/docs/setup.md @@ -0,0 +1,141 @@ +## Azure Pipelines [linux/mac/windows] + +Using Azure pipelines, you can build all three platforms on the same service. Create a `azure-pipelines.yml` file in your repo. + +**azure-pipelines.yml** +```yaml +jobs: +- job: linux + pool: {vmImage: 'Ubuntu-16.04'} + steps: + - task: UsePythonVersion@0 + - bash: | + python -m pip install --upgrade pip + pip install cibuildwheel==0.12.0 + cibuildwheel --output-dir wheelhouse . + - task: PublishBuildArtifacts@1 + inputs: {pathtoPublish: 'wheelhouse'} +- job: macos + pool: {vmImage: 'macOS-10.13'} + steps: + - task: UsePythonVersion@0 + - bash: | + python -m pip install --upgrade pip + pip install cibuildwheel==0.12.0 + cibuildwheel --output-dir wheelhouse . + - task: PublishBuildArtifacts@1 + inputs: {pathtoPublish: 'wheelhouse'} +- job: windows + pool: {vmImage: 'vs2017-win2016'} + steps: + - {task: UsePythonVersion@0, inputs: {versionSpec: '2.7', architecture: x86}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '2.7', architecture: x64}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.5', architecture: x86}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.5', architecture: x64}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.6', architecture: x86}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.6', architecture: x64}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.7', architecture: x86}} + - {task: UsePythonVersion@0, inputs: {versionSpec: '3.7', architecture: x64}} + - script: choco install vcpython27 -f -y + displayName: Install Visual C++ for Python 2.7 + - bash: | + python -m pip install --upgrade pip + pip install cibuildwheel==0.12.0 + cibuildwheel --output-dir wheelhouse . + - task: PublishBuildArtifacts@1 + inputs: {pathtoPublish: 'wheelhouse'} +``` + +## Travis CI [linux/mac] + +To build Linux and Mac wheels on Travis CI, create a `.travis.yml` file in your repo. + +```yaml +language: python + +matrix: + include: + - sudo: required + services: + - docker + env: PIP=pip + - os: osx + language: generic + env: PIP=pip2 + +script: + - $PIP install cibuildwheel==0.12.0 + - cibuildwheel --output-dir wheelhouse +``` + +Then setup a deployment method by following the [Travis CI deployment docs](https://docs.travis-ci.com/user/deployment/), or see [Delivering to PyPI](#delivering-to-pypi) below. + +## CircleCI [linux/mac] + +To build Linux and Mac wheels on CircleCI, create a `.circleci/config.yml` file in your repo, + +```yaml +version: 2 + +jobs: + linux-wheels: + working_directory: ~/linux-wheels + docker: + - image: circleci/python:3.6 + steps: + - checkout + - setup_remote_docker + - run: + name: Build the Linux wheels. + command: | + pip install --user cibuildwheel + cibuildwheel --output-dir wheelhouse + - store_artifacts: + path: wheelhouse/ + + osx-wheels: + working_directory: ~/osx-wheels + macos: + xcode: "10.0.0" + steps: + - checkout + - run: + name: Build the OS X wheels. + command: | + pip install --user cibuildwheel + cibuildwheel --output-dir wheelhouse + - store_artifacts: + path: wheelhouse/ + +workflows: + version: 2 + all-tests: + jobs: + - linux-wheels + - osx-wheels +``` + +Note: CircleCI doesn't enable free macOS containers for open source by default, but you can ask for access. See [here](https://circleci.com/docs/2.0/oss/#overview) for more information. + +CircleCI will store the built wheels for you - you can access them from the project console. + +## AppVeyor [windows] + +To build Windows wheels on AppVeyor, create an `appveyor.yml` file in your repo. + +```yaml +build_script: + - pip install cibuildwheel==0.12.0 + - cibuildwheel --output-dir wheelhouse +artifacts: + - path: "wheelhouse\\*.whl" + name: Wheels +``` + +AppVeyor will store the built wheels for you - you can access them from the project console. Alternatively, you may want to store them in the same place as the Travis CI build. See [AppVeyor deployment docs](https://www.appveyor.com/docs/deployment/) for more info, or see [Delivering to PyPI](#delivering-to-pypi) below. + +Commit those files, enable building of your repo on Travis CI and AppVeyor, and push. + +All being well, you should get wheels delivered to you in a few minutes. + +> ⚠️ Got an error? Check the [checklist](#it-didnt-work) below. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..5d5bb2fb --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,10 @@ +site_name: cibuildwheel +docs_dir: docs +theme: readthedocs +nav: + - Home: index.md + - "Setup guide": setup.md + - "Options": options.md +markdown_extensions: +- codehilite +- fenced_code \ No newline at end of file