Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aeeac6725a | ||
|
|
41b4b092b1 | ||
|
|
28186bf142 | ||
|
|
4e10d9d897 | ||
|
|
2ab2d079ab | ||
|
|
5e529969ea | ||
|
|
b7a689e349 | ||
|
|
4f4fed06e0 | ||
|
|
45fcebf9d8 | ||
|
|
e67b3bc611 | ||
|
|
d8456a0ffa | ||
|
|
73681d9b24 | ||
|
|
02ed7b2262 | ||
|
|
ab86b8cd93 | ||
|
|
3a03df8ec9 | ||
|
|
0e78b2b1f5 | ||
|
|
5b14c8c0ec | ||
|
|
0627bd09d4 | ||
|
|
a5e64e216c | ||
|
|
23cf50614f | ||
|
|
1e08ff03b3 | ||
|
|
2216385c0b | ||
|
|
a1fc0cb117 | ||
|
|
430b71c767 | ||
|
|
14f14a24d3 | ||
|
|
b732026734 |
+8
-16
@@ -11,12 +11,10 @@ jobs:
|
|||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Prepare the environment.
|
name: Prepare the environment.
|
||||||
command: |
|
command: bash .circleci/prepare.sh
|
||||||
bash .circleci/prepare.sh
|
|
||||||
- run:
|
- run:
|
||||||
name: Test.
|
name: Test.
|
||||||
command: |
|
command: venv/bin/python ./bin/run_tests.py
|
||||||
venv/bin/python ./bin/run_tests.py
|
|
||||||
|
|
||||||
osx-python3:
|
osx-python3:
|
||||||
macos:
|
macos:
|
||||||
@@ -28,12 +26,10 @@ jobs:
|
|||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Prepare the environment.
|
name: Prepare the environment.
|
||||||
command: |
|
command: bash .circleci/prepare.sh
|
||||||
bash .circleci/prepare.sh
|
|
||||||
- run:
|
- run:
|
||||||
name: Test.
|
name: Test.
|
||||||
command: |
|
command: venv/bin/python ./bin/run_tests.py
|
||||||
venv/bin/python ./bin/run_tests.py
|
|
||||||
|
|
||||||
linux-python2:
|
linux-python2:
|
||||||
docker:
|
docker:
|
||||||
@@ -46,12 +42,10 @@ jobs:
|
|||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Prepare the environment.
|
name: Prepare the environment.
|
||||||
command: |
|
command: bash .circleci/prepare.sh
|
||||||
bash .circleci/prepare.sh
|
|
||||||
- run:
|
- run:
|
||||||
name: Test.
|
name: Test.
|
||||||
command: |
|
command: venv/bin/python ./bin/run_tests.py
|
||||||
venv/bin/python ./bin/run_tests.py
|
|
||||||
|
|
||||||
linux-python3:
|
linux-python3:
|
||||||
docker:
|
docker:
|
||||||
@@ -64,12 +58,10 @@ jobs:
|
|||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Prepare the environment.
|
name: Prepare the environment.
|
||||||
command: |
|
command: bash .circleci/prepare.sh
|
||||||
bash .circleci/prepare.sh
|
|
||||||
- run:
|
- run:
|
||||||
name: Test.
|
name: Test.
|
||||||
command: |
|
command: venv/bin/python ./bin/run_tests.py
|
||||||
venv/bin/python ./bin/run_tests.py
|
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ cibuildwheel
|
|||||||
|
|
||||||
Python wheels are great. Building them across **Mac, Linux, Windows**, on **multiple versions of Python**, is not.
|
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 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!
|
**`cibuildwheel` is in beta**. It's brand new - I'd love for you to try it and help make it better!
|
||||||
|
|
||||||
@@ -22,23 +22,23 @@ What does it do?
|
|||||||
|
|
||||||
> \* Not supported on Azure Pipelines
|
> \* Not supported on Azure Pipelines
|
||||||
|
|
||||||
- Builds manylinux, macOS and Windows (32 and 64bit) wheels using Azure Pipelines, Travis CI, Appveyor, and CircleCI
|
- 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)
|
- 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
|
- Runs the library test suite against the wheel-installed version of your library
|
||||||
|
|
||||||
Usage
|
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.
|
`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 |
|
| | Linux | macOS | Windows |
|
||||||
|-----------------|-------|-------|---------|
|
|-----------------|-------|-------|---------|
|
||||||
| Azure Pipelines | ✅ | ✅ | ✅ |
|
| Azure Pipelines | ✅ | ✅ | ✅ |
|
||||||
| Travis CI | ✅ | ✅ | |
|
| Travis CI | ✅ | ✅ | |
|
||||||
| Appveyor | | | ✅ |
|
| AppVeyor | | | ✅ |
|
||||||
| CircleCI | ✅ | ✅ | |
|
| 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.
|
`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
|
### Minimal setup
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ jobs:
|
|||||||
- task: UsePythonVersion@0
|
- task: UsePythonVersion@0
|
||||||
- bash: |
|
- bash: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==0.10.1
|
pip install cibuildwheel==0.12.0
|
||||||
cibuildwheel --output-dir wheelhouse .
|
cibuildwheel --output-dir wheelhouse .
|
||||||
- task: PublishBuildArtifacts@1
|
- task: PublishBuildArtifacts@1
|
||||||
inputs: {pathtoPublish: 'wheelhouse'}
|
inputs: {pathtoPublish: 'wheelhouse'}
|
||||||
@@ -70,7 +70,7 @@ jobs:
|
|||||||
- task: UsePythonVersion@0
|
- task: UsePythonVersion@0
|
||||||
- bash: |
|
- bash: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==0.10.1
|
pip install cibuildwheel==0.12.0
|
||||||
cibuildwheel --output-dir wheelhouse .
|
cibuildwheel --output-dir wheelhouse .
|
||||||
- task: PublishBuildArtifacts@1
|
- task: PublishBuildArtifacts@1
|
||||||
inputs: {pathtoPublish: 'wheelhouse'}
|
inputs: {pathtoPublish: 'wheelhouse'}
|
||||||
@@ -89,7 +89,7 @@ jobs:
|
|||||||
displayName: Install Visual C++ for Python 2.7
|
displayName: Install Visual C++ for Python 2.7
|
||||||
- bash: |
|
- bash: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==0.10.1
|
pip install cibuildwheel==0.12.0
|
||||||
cibuildwheel --output-dir wheelhouse .
|
cibuildwheel --output-dir wheelhouse .
|
||||||
- task: PublishBuildArtifacts@1
|
- task: PublishBuildArtifacts@1
|
||||||
inputs: {pathtoPublish: 'wheelhouse'}
|
inputs: {pathtoPublish: 'wheelhouse'}
|
||||||
@@ -119,7 +119,7 @@ jobs:
|
|||||||
env: PIP=pip2
|
env: PIP=pip2
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- $PIP install cibuildwheel==0.11.0
|
- $PIP install cibuildwheel==0.12.0
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -184,26 +184,26 @@ jobs:
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>Appveyor</b>
|
<summary><b>AppVeyor</b>
|
||||||
<img width="16" src="https://unpkg.com/simple-icons@latest/icons/windows.svg" />
|
<img width="16" src="https://unpkg.com/simple-icons@latest/icons/windows.svg" />
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
- To build Windows wheels on Appveyor, create an `appveyor.yml` file in your repo.
|
- To build Windows wheels on AppVeyor, create an `appveyor.yml` file in your repo.
|
||||||
|
|
||||||
```
|
```
|
||||||
build_script:
|
build_script:
|
||||||
- pip install cibuildwheel==0.11.0
|
- pip install cibuildwheel==0.12.0
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: "wheelhouse\\*.whl"
|
- path: "wheelhouse\\*.whl"
|
||||||
name: Wheels
|
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.
|
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.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
- Commit those files, enable building of your repo on Travis CI and Appveyor, and push.
|
- 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.
|
All being well, you should get wheels delivered to you in a few minutes.
|
||||||
|
|
||||||
@@ -225,6 +225,7 @@ All being well, you should get wheels delivered to you in a few minutes.
|
|||||||
| | `CIBW_MANYLINUX1_I686_IMAGE` | Specify an alternative manylinux1 i686 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 |
|
| **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_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.
|
A more detailed description of the options, the allowed values, and some examples can be found in the [Options](#options) section.
|
||||||
|
|
||||||
@@ -412,6 +413,25 @@ Example: `nose==1.3.7 moto==0.4.31`
|
|||||||
Platform-specific variants also available:
|
Platform-specific variants also available:
|
||||||
`CIBW_TEST_REQUIRES_MACOS` | `CIBW_TEST_REQUIRES_WINDOWS` | `CIBW_TEST_REQUIRES_LINUX`
|
`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 <wheel_file>[test,qt])
|
||||||
|
|
||||||
|
|
||||||
|
Platform-specific variants also available:
|
||||||
|
`CIBW_TEST_EXTRAS_MACOS` | `CIBW_TEST_EXTRAS_WINDOWS` | `CIBW_TEST_EXTRAS_LINUX`
|
||||||
|
|
||||||
### Example YML syntax
|
### Example YML syntax
|
||||||
|
|
||||||
@@ -486,6 +506,8 @@ Here are some repos that use cibuildwheel.
|
|||||||
- [KDEpy](https://github.com/tommyod/KDEpy)
|
- [KDEpy](https://github.com/tommyod/KDEpy)
|
||||||
- [AutoPy](https://github.com/autopilot-rs/autopy)
|
- [AutoPy](https://github.com/autopilot-rs/autopy)
|
||||||
- [apriltags2-ethz](https://github.com/safijari/apriltags2_ethz)
|
- [apriltags2-ethz](https://github.com/safijari/apriltags2_ethz)
|
||||||
|
- [TgCrypto](https://github.com/pyrogram/tgcrypto)
|
||||||
|
- [Twisted](https://github.com/twisted/twisted)
|
||||||
|
|
||||||
> Add repo here! Send a PR.
|
> Add repo here! Send a PR.
|
||||||
|
|
||||||
@@ -501,6 +523,25 @@ This is similar to static linking, so it might have some licence implications. C
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
### 0.11.1
|
||||||
|
|
||||||
|
_28 May 2019_
|
||||||
|
|
||||||
|
- 🐛 Fix missing file in the release tarball, that was causing problems with
|
||||||
|
Windows builds (#141)
|
||||||
|
|
||||||
|
### 0.11.0
|
||||||
|
|
||||||
|
_26 May 2019_
|
||||||
|
|
||||||
|
- ✨ Add support for building on Azure pipelines! This lets you build all
|
||||||
|
Linux, Mac and Windows wheels on one service, so it promises to be the
|
||||||
|
easiest to set up! Check out the quickstart in the docs, or
|
||||||
|
[cibuildwheel-azure-example](https://github.com/joerick/cibuildwheel-azure-example)
|
||||||
|
for an example project. (#126, #132)
|
||||||
|
- 🛠 Internal change - the end-to-end test projects format was updated, so we
|
||||||
|
can more precisely assert what should be produced for each one. (#136, #137).
|
||||||
|
|
||||||
### 0.10.2
|
### 0.10.2
|
||||||
|
|
||||||
_10 March 2019_
|
_10 March 2019_
|
||||||
@@ -610,7 +651,7 @@ _7 September 2017_
|
|||||||
_14 August 2017_
|
_14 August 2017_
|
||||||
|
|
||||||
- 🐛 Fixed a bug on Windows where subprocess' output was hidden (#23)
|
- 🐛 Fixed a bug on Windows where subprocess' output was hidden (#23)
|
||||||
- 🐛 Fixed a bug on Appveyor where logs would appear in the wrong order due to output buffering (#24, thanks @YannickJadoul!)
|
- 🐛 Fixed a bug on AppVeyor where logs would appear in the wrong order due to output buffering (#24, thanks @YannickJadoul!)
|
||||||
|
|
||||||
### 0.4.0
|
### 0.4.0
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = '0.11.0'
|
__version__ = '0.12.0'
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ def main():
|
|||||||
|
|
||||||
if platform is None:
|
if platform is None:
|
||||||
print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, '
|
print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, '
|
||||||
'Travis CI, Appveyor, and CircleCI are supported. You can run on your development '
|
'Travis CI, AppVeyor, and CircleCI are supported. You can run on your development '
|
||||||
'machine using the --platform argument. Check --help output for more '
|
'machine using the --platform argument. Check --help output for more '
|
||||||
'information.',
|
'information.',
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
@@ -91,12 +91,16 @@ def main():
|
|||||||
output_dir = args.output_dir
|
output_dir = args.output_dir
|
||||||
test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform)
|
test_command = get_option_from_environment('CIBW_TEST_COMMAND', platform=platform)
|
||||||
test_requires = get_option_from_environment('CIBW_TEST_REQUIRES', platform=platform, default='').split()
|
test_requires = get_option_from_environment('CIBW_TEST_REQUIRES', platform=platform, default='').split()
|
||||||
|
test_extras = get_option_from_environment('CIBW_TEST_EXTRAS', platform=platform, default='')
|
||||||
project_dir = args.project_dir
|
project_dir = args.project_dir
|
||||||
before_build = get_option_from_environment('CIBW_BEFORE_BUILD', platform=platform)
|
before_build = get_option_from_environment('CIBW_BEFORE_BUILD', platform=platform)
|
||||||
build_verbosity = get_option_from_environment('CIBW_BUILD_VERBOSITY', platform=platform, default='')
|
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', '')
|
build_config, skip_config = os.environ.get('CIBW_BUILD', '*'), os.environ.get('CIBW_SKIP', '')
|
||||||
environment_config = get_option_from_environment('CIBW_ENVIRONMENT', platform=platform, default='')
|
environment_config = get_option_from_environment('CIBW_ENVIRONMENT', platform=platform, default='')
|
||||||
|
|
||||||
|
if test_extras:
|
||||||
|
test_extras = '[{0}]'.format(test_extras)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
build_verbosity = min(3, max(-3, int(build_verbosity)))
|
build_verbosity = min(3, max(-3, int(build_verbosity)))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -129,6 +133,7 @@ def main():
|
|||||||
output_dir=output_dir,
|
output_dir=output_dir,
|
||||||
test_command=test_command,
|
test_command=test_command,
|
||||||
test_requires=test_requires,
|
test_requires=test_requires,
|
||||||
|
test_extras=test_extras,
|
||||||
before_build=before_build,
|
before_build=before_build,
|
||||||
build_verbosity=build_verbosity,
|
build_verbosity=build_verbosity,
|
||||||
build_selector=build_selector,
|
build_selector=build_selector,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ def get_python_configurations(build_selector):
|
|||||||
return [c for c in python_configurations if build_selector(c.identifier)]
|
return [c for c in python_configurations if build_selector(c.identifier)]
|
||||||
|
|
||||||
|
|
||||||
def build(project_dir, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment, manylinux1_images):
|
def build(project_dir, output_dir, test_command, test_requires, test_extras, before_build, build_verbosity, build_selector, environment, manylinux1_images):
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(['docker', '--version'])
|
subprocess.check_call(['docker', '--version'])
|
||||||
except:
|
except:
|
||||||
@@ -86,7 +86,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
delocated_wheel=(/tmp/delocated_wheel/*.whl)
|
delocated_wheel=(/tmp/delocated_wheel/*.whl)
|
||||||
|
|
||||||
# Install the wheel we just built
|
# Install the wheel we just built
|
||||||
"$PYBIN/pip" install "$delocated_wheel"
|
"$PYBIN/pip" install "$delocated_wheel"{test_extras}
|
||||||
|
|
||||||
# Install any requirements to run the tests
|
# Install any requirements to run the tests
|
||||||
if [ ! -z "{test_requires}" ]; then
|
if [ ! -z "{test_requires}" ]; then
|
||||||
@@ -107,6 +107,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
'''.format(
|
'''.format(
|
||||||
pybin_paths=' '.join(c.path+'/bin' for c in platform_configs),
|
pybin_paths=' '.join(c.path+'/bin' for c in platform_configs),
|
||||||
test_requires=' '.join(test_requires),
|
test_requires=' '.join(test_requires),
|
||||||
|
test_extras=test_extras,
|
||||||
test_command=shlex_quote(
|
test_command=shlex_quote(
|
||||||
prepare_command(test_command, project='/project') if test_command else ''
|
prepare_command(test_command, project='/project') if test_command else ''
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ def get_python_configurations(build_selector):
|
|||||||
PythonConfiguration(version='3.4', identifier='cp34-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.4.4/python-3.4.4-macosx10.6.pkg'),
|
PythonConfiguration(version='3.4', identifier='cp34-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.4.4/python-3.4.4-macosx10.6.pkg'),
|
||||||
PythonConfiguration(version='3.5', identifier='cp35-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg'),
|
PythonConfiguration(version='3.5', identifier='cp35-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg'),
|
||||||
PythonConfiguration(version='3.6', identifier='cp36-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.6.pkg'),
|
PythonConfiguration(version='3.6', identifier='cp36-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.6.pkg'),
|
||||||
PythonConfiguration(version='3.7', identifier='cp37-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.7.2/python-3.7.2-macosx10.6.pkg'),
|
PythonConfiguration(version='3.7', identifier='cp37-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.7.4/python-3.7.4-macosx10.6.pkg'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# skip builds as required
|
# skip builds as required
|
||||||
return [c for c in python_configurations if build_selector(c.identifier)]
|
return [c for c in python_configurations if build_selector(c.identifier)]
|
||||||
|
|
||||||
|
|
||||||
def build(project_dir, output_dir, test_command, test_requires, 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, environment):
|
||||||
python_configurations = get_python_configurations(build_selector)
|
python_configurations = get_python_configurations(build_selector)
|
||||||
get_pip_url = 'https://bootstrap.pypa.io/get-pip.py'
|
get_pip_url = 'https://bootstrap.pypa.io/get-pip.py'
|
||||||
get_pip_script = '/tmp/get-pip.py'
|
get_pip_script = '/tmp/get-pip.py'
|
||||||
@@ -58,7 +58,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
call(['sudo', 'installer', '-pkg', '/tmp/Python.pkg', '-target', '/'])
|
call(['sudo', 'installer', '-pkg', '/tmp/Python.pkg', '-target', '/'])
|
||||||
# patch open ssl
|
# patch open ssl
|
||||||
if config.version in ('3.4', '3.5'):
|
if config.version in ('3.4', '3.5'):
|
||||||
call(['curl', '-fsSLo', '/tmp/python-patch.tar.gz', 'https://github.com/mayeut/patch-macos-python-openssl/releases/download/v1.0.2r/patch-macos-python-%s-openssl-v1.0.2r.tar.gz' % config.version])
|
call(['curl', '-fsSLo', '/tmp/python-patch.tar.gz', 'https://github.com/mayeut/patch-macos-python-openssl/releases/download/v1.0.2t/patch-macos-python-%s-openssl-v1.0.2t.tar.gz' % config.version])
|
||||||
call(['sudo', 'tar', '-C', '/Library/Frameworks/Python.framework/Versions/%s/' % config.version, '-xmf', '/tmp/python-patch.tar.gz'])
|
call(['sudo', 'tar', '-C', '/Library/Frameworks/Python.framework/Versions/%s/' % config.version, '-xmf', '/tmp/python-patch.tar.gz'])
|
||||||
|
|
||||||
installation_bin_path = '/Library/Frameworks/Python.framework/Versions/{}/bin'.format(config.version)
|
installation_bin_path = '/Library/Frameworks/Python.framework/Versions/{}/bin'.format(config.version)
|
||||||
@@ -121,7 +121,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
delocated_wheel = glob('/tmp/delocated_wheel/*.whl')[0]
|
delocated_wheel = glob('/tmp/delocated_wheel/*.whl')[0]
|
||||||
|
|
||||||
# install the wheel
|
# install the wheel
|
||||||
call(['pip', 'install', delocated_wheel], env=env)
|
call(['pip', 'install', delocated_wheel + test_extras], env=env)
|
||||||
|
|
||||||
# test the wheel
|
# test the wheel
|
||||||
if test_requires:
|
if test_requires:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ def get_python_path(config):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
raise Exception('Could not find a Python install at ' + path_pattern)
|
raise Exception('Could not find a Python install at ' + path_pattern)
|
||||||
else:
|
else:
|
||||||
# Assume we're running on Appveyor
|
# Assume we're running on AppVeyor
|
||||||
major, minor = config.version.split('.')[:2]
|
major, minor = config.version.split('.')[:2]
|
||||||
return 'C:\\Python{major}{minor}{arch}'.format(
|
return 'C:\\Python{major}{minor}{arch}'.format(
|
||||||
major=major,
|
major=major,
|
||||||
@@ -56,7 +56,7 @@ def get_python_configurations(build_selector):
|
|||||||
return [c for c in python_configurations if build_selector(c.identifier)]
|
return [c for c in python_configurations if build_selector(c.identifier)]
|
||||||
|
|
||||||
|
|
||||||
def build(project_dir, output_dir, test_command, test_requires, 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, environment):
|
||||||
if IS_RUNNING_ON_AZURE:
|
if IS_RUNNING_ON_AZURE:
|
||||||
def shell(args, env=None, cwd=None):
|
def shell(args, env=None, cwd=None):
|
||||||
print('+ ' + ' '.join(args))
|
print('+ ' + ' '.join(args))
|
||||||
@@ -66,7 +66,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
run_with_env = os.path.abspath(os.path.join(os.path.dirname(__file__), 'resources', 'appveyor_run_with_env.cmd'))
|
run_with_env = os.path.abspath(os.path.join(os.path.dirname(__file__), 'resources', 'appveyor_run_with_env.cmd'))
|
||||||
|
|
||||||
# run_with_env is a cmd file that sets the right environment variables
|
# run_with_env is a cmd file that sets the right environment variables
|
||||||
# to build on Appveyor.
|
# to build on AppVeyor.
|
||||||
def shell(args, env=None, cwd=None):
|
def shell(args, env=None, cwd=None):
|
||||||
# print the command executing for the logs
|
# print the command executing for the logs
|
||||||
print('+ ' + ' '.join(args))
|
print('+ ' + ' '.join(args))
|
||||||
@@ -122,7 +122,7 @@ def build(project_dir, output_dir, test_command, test_requires, before_build, bu
|
|||||||
built_wheel = glob(built_wheel_dir+'/*.whl')[0]
|
built_wheel = glob(built_wheel_dir+'/*.whl')[0]
|
||||||
|
|
||||||
# install the wheel
|
# install the wheel
|
||||||
shell(['pip', 'install', built_wheel], env=env)
|
shell(['pip', 'install', built_wheel + test_extras], env=env)
|
||||||
|
|
||||||
# test the wheel
|
# test the wheel
|
||||||
if test_requires:
|
if test_requires:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.11.0
|
current_version = 0.12.0
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
message = Bump version
|
message = Bump version
|
||||||
@@ -12,3 +12,6 @@ message = Bump version
|
|||||||
search = cibuildwheel=={current_version}
|
search = cibuildwheel=={current_version}
|
||||||
replace = cibuildwheel=={new_version}
|
replace = cibuildwheel=={new_version}
|
||||||
|
|
||||||
|
[bdist_wheel]
|
||||||
|
universal = 1
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ except ImportError:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='cibuildwheel',
|
name='cibuildwheel',
|
||||||
version='0.11.0',
|
version='0.12.0',
|
||||||
install_requires=['bashlex!=0.13'],
|
install_requires=['bashlex!=0.13'],
|
||||||
description="Build Python wheels on CI with minimal configuration.",
|
description="Build Python wheels on CI with minimal configuration.",
|
||||||
long_description='For readme please see http://github.com/joerick/cibuildwheel',
|
long_description='For readme please see http://github.com/joerick/cibuildwheel',
|
||||||
@@ -18,6 +18,9 @@ setup(
|
|||||||
packages=['cibuildwheel',],
|
packages=['cibuildwheel',],
|
||||||
license="BSD",
|
license="BSD",
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
|
package_data={
|
||||||
|
'cibuildwheel': ['resources/*'],
|
||||||
|
},
|
||||||
keywords='ci wheel packaging pypi travis appveyor macos linux windows',
|
keywords='ci wheel packaging pypi travis appveyor macos linux windows',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
'Intended Audience :: Developers',
|
'Intended Audience :: Developers',
|
||||||
|
|||||||
@@ -17,3 +17,21 @@ def test():
|
|||||||
expected_wheels = utils.expected_wheels('spam', '0.1.0')
|
expected_wheels = utils.expected_wheels('spam', '0.1.0')
|
||||||
actual_wheels = os.listdir('wheelhouse')
|
actual_wheels = os.listdir('wheelhouse')
|
||||||
assert set(actual_wheels) == set(expected_wheels)
|
assert set(actual_wheels) == set(expected_wheels)
|
||||||
|
|
||||||
|
|
||||||
|
def test_extras_require():
|
||||||
|
project_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
# build and test the wheels
|
||||||
|
utils.cibuildwheel_run(project_dir, add_env={
|
||||||
|
'CIBW_TEST_EXTRAS': 'test',
|
||||||
|
# the 'false ||' bit is to ensure this command runs in a shell on
|
||||||
|
# mac/linux.
|
||||||
|
'CIBW_TEST_COMMAND': 'false || nosetests {project}/test',
|
||||||
|
'CIBW_TEST_COMMAND_WINDOWS': 'nosetests {project}/test',
|
||||||
|
})
|
||||||
|
|
||||||
|
# also check that we got the right wheels
|
||||||
|
expected_wheels = utils.expected_wheels('spam', '0.1.0')
|
||||||
|
actual_wheels = os.listdir('wheelhouse')
|
||||||
|
assert set(actual_wheels) == set(expected_wheels)
|
||||||
|
|||||||
@@ -3,5 +3,6 @@ from setuptools import setup, Extension
|
|||||||
setup(
|
setup(
|
||||||
name="spam",
|
name="spam",
|
||||||
ext_modules=[Extension('spam', sources=['spam.c'])],
|
ext_modules=[Extension('spam', sources=['spam.c'])],
|
||||||
|
extras_require={'test': ['nose']},
|
||||||
version="0.1.0",
|
version="0.1.0",
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user