Compare commits

...
27 Commits
Author SHA1 Message Date
Joe Rickerby 7c635b4550 Bump version 2018-06-18 22:52:02 +01:00
Joe Rickerby 33433f0b21 Merge pull request #73 from lelit/py37
Add support for Python 3.7
2018-06-18 22:50:54 +01:00
Joe Rickerby e3981db2a6 Skip the custom docker image specifier for Python 3.7
We'll reenable this when 3.7 is released and dockcross updates :)
2018-06-18 22:35:05 +01:00
Joe Rickerby 0b21df216e update support matrix in readme 2018-06-17 20:52:46 +01:00
Lele Gaifax e5b9d1f586 Fix mistake in directory name 2018-06-16 15:23:26 +02:00
Lele Gaifax 9b31b5e6c9 Add support for Python 3.7
This enables building binary wheels for Python 3.7, now at its rc1 release.

It is included in the latest manylinux1 Docker image, see https://github.com/pypa/manylinux/pull/196.

Accordingly to https://www.appveyor.com/docs/build-environment/#python it is not yet available on Appveyor.
2018-06-16 13:42:11 +02:00
Yannick Jadoul 57a2259a00 Merge pull request #66 from mayeut/drop-linux-python3.3
Give ownership of the wheel files to the current user instead of root on Linux
2018-05-06 16:00:42 +02:00
mayeut d186b0bbb7 Use travis-ci provided python3 on Linux 2018-05-06 15:44:27 +02:00
mayeut 57cdb8711c linux: transfer ownership of the wheel to the current user 2018-05-06 15:44:27 +02:00
Joe Rickerby 7448ca3cf1 Update changelog 2018-05-04 10:21:34 -07:00
Joe Rickerby d93547d8be Bump version 2018-05-04 10:04:39 -07:00
Yannick Jadoul a863e21b14 Merge pull request #68 from mayeut/python-update
macOS: update to python 2.7.15
2018-05-04 17:43:36 +02:00
mayeut b4c0150d43 macOS/Windows: Update setuptools 2018-05-04 17:27:33 +02:00
Yannick Jadoul c8019dac1d Merge pull request #67 from mayeut/only-drop-linux-python3.3
Drop python 3.3 support on Linux
2018-05-04 12:12:48 +02:00
mayeut e6fa70a910 Drop python 3.3 support on Linux 2018-05-03 22:05:45 +02:00
mayeut b19e8b76f3 macOS: update to python 2.7.15 2018-05-02 22:01:53 +02:00
Yannick Jadoul 23ab1f780e Merge pull request #61 from YannickJadoul/pip-verbose
Adding an option to make the `pip wheel` invocation more or less verbose
2018-04-30 15:24:19 +02:00
Yannick Jadoul eedcd62753 Renaming util.get_build_verbosity_flag into util.get_build_verbosity_extra_flags 2018-04-30 15:07:56 +02:00
Joe Rickerby 3a4d611da1 Bump version 2018-04-25 23:03:14 +01:00
Joe Rickerby 8877990ec6 Merge pull request #62 from anthrotype/fix-pip-upgrade-windows
windows: upgrade pip with 'python -m pip'
2018-04-25 23:01:58 +01:00
Cosimo Lupo 0cc41fabba windows: upgrade pip with 'python -m pip'
this fixes an "ImportError: cannot import name main" when self-upgrading
pip to latest version 10

see https://github.com/pypa/pip/issues/5240#issuecomment-382989420
2018-04-20 10:48:42 +01:00
Yannick Jadoul 8d9d970874 Fixing empty verbosity flag argument to subprocess.check_call 2018-04-08 21:51:19 +02:00
Yannick Jadoul c563bca054 Adding an to make the pip wheel invocation more or less verbose 2018-04-08 21:37:40 +02:00
Joe Rickerby 71503b7143 Merge pull request #59 from YannickJadoul/prepare-test-command
Replacing {python} and {pip} in CIBW_TEST_COMMAND (and {project} in C…
2018-04-08 18:06:30 +01:00
Yannick Jadoul e33b6bed77 Replacing leftover test_command.format(...) by prepare_command(test_command, ...) in linux.py 2018-04-08 16:50:10 +02:00
Yannick Jadoul 99469087ed Replacing {python} and {pip} in CIBW_TEST_COMMAND (and {project} in CIBW_BEFORE_BUILD) for consistency 2018-04-07 23:57:58 +02:00
Joe Rickerby 3b847ab0aa Changelog updated 2018-04-02 15:50:59 +01:00
11 changed files with 90 additions and 58 deletions
+11 -25
View File
@@ -5,42 +5,28 @@ matrix:
# Linux Python 2 # Linux Python 2
- sudo: required - sudo: required
language: python language: python
services: python: 2.7
- docker services: docker
env: env: PYTHON=python
- "PYTHON=python2"
# Linux Python 3 # Linux Python 3
- sudo: required - sudo: required
language: python language: python
services: python: 3.4
- docker services: docker
env: env: PYTHON=python
- "PYTHON=python3"
before_install:
- sudo apt-get -qq update
- sudo apt-get install -y python3-pip
# macOS Python 2 # macOS Python 2
- os: osx - os: osx
env: env: PYTHON=python2
- "PYTHON=python2"
# macOS Python 3 # macOS Python 3
- os: osx - os: osx
env: env: PYTHON=python3
- "PYTHON=python3"
before_install: before_install:
- brew update - brew update
- brew outdated python || brew upgrade python - brew outdated python || brew upgrade python
script: install: $PYTHON -m pip install -r requirements-dev.txt
- |
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then script: $PYTHON ./bin/run_tests.py
$PYTHON -m pip install -r requirements-dev.txt
$PYTHON ./bin/run_tests.py
else
# linux test requires root to clean up the wheelhouse (docker runs as root)
sudo $PYTHON -m pip install -r requirements-dev.txt
sudo $PYTHON ./bin/run_tests.py
fi
+28 -6
View File
@@ -15,10 +15,11 @@ What does it do?
| | macOS 10.6+ | manylinux i686 | manylinux x86_64 | Windows 32bit | Windows 64bit | | | macOS 10.6+ | manylinux i686 | manylinux x86_64 | Windows 32bit | Windows 64bit |
|---|---|---|---|---|---| |---|---|---|---|---|---|
| Python 2.7 | ✅ | ✅ | ✅ | ✅ | ✅ | | Python 2.7 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.3 | | | | ✅ | ✅ | | Python 3.3 | | | | ✅ | ✅ |
| Python 3.4 | ✅ | ✅ | ✅ | ✅ | ✅ | | Python 3.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.5 | ✅ | ✅ | ✅ | ✅ | ✅ | | Python 3.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.6 | ✅ | ✅ | ✅ | ✅ | ✅ | | Python 3.6 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.7 | ✅ | ✅ | ✅ | | |
- Builds manylinux, macOS and Windows (32 and 64bit) wheels using Travis CI and Appveyor - Builds manylinux, macOS and Windows (32 and 64bit) wheels using Travis CI and Appveyor
- 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)
@@ -49,7 +50,7 @@ Usage
env: PIP=pip2 env: PIP=pip2
script: script:
- $PIP install cibuildwheel==0.7.1 - $PIP install cibuildwheel==0.9.0
- cibuildwheel --output-dir wheelhouse - cibuildwheel --output-dir wheelhouse
``` ```
@@ -59,7 +60,7 @@ Usage
``` ```
build_script: build_script:
- pip install cibuildwheel==0.7.1 - pip install cibuildwheel==0.9.0
- cibuildwheel --output-dir wheelhouse - cibuildwheel --output-dir wheelhouse
artifacts: artifacts:
- path: "wheelhouse\\*.whl" - path: "wheelhouse\\*.whl"
@@ -82,6 +83,7 @@ All being well, you should get wheels delivered to you in a few minutes.
|---|---|---| |---|---|---|
| **Target wheels** | `CIBW_PLATFORM` | Override the auto-detected target platform | | **Target wheels** | `CIBW_PLATFORM` | Override the auto-detected target platform |
| | `CIBW_SKIP` | Skip 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 | | **Build environment** | `CIBW_ENVIRONMENT` | Set environment variables needed during the build |
| | `CIBW_BEFORE_BUILD` | Execute a shell command preparing each wheel's 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_X86_64_IMAGE` | Specify an alternative manylinx1 x86_64 docker image |
@@ -151,7 +153,7 @@ Space-separated list of builds to skip. Each build has an identifier like `cp27-
The format is `python_tag-platform_tag`. The tags are as defined in [PEP 0425](https://www.python.org/dev/peps/pep-0425/#details). 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` 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` Platform tags look like `macosx_10_6_intel` `manylinux1_x86_64` `manylinux1_i686` `win32` `win_amd64`
@@ -166,6 +168,16 @@ Examples:
- Skip Python 3.6 on Linux: `cp36-manylinux*` - Skip Python 3.6 on Linux: `cp36-manylinux*`
- Only build on Python 3.6: `cp27-* cp34-* cp35-*` - Only build on Python 3.6: `cp27-* cp34-* cp35-*`
| 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` | Environment variable: `CIBW_ENVIRONMENT`
| --- | ---
@@ -196,7 +208,7 @@ 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. 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}`. These are useful when you need to write `python3` or `pip3` on a Python 3.x build. The active Python binary can be accessed using `{python}`, and pip with `{pip}`. These are useful when you need to write `python3` or `pip3` on a Python 3.x build. `{project}` can be used as a placeholder for the absolute path to the project's root.
Example: `{pip} install .` Example: `{pip} install .`
Example: `{pip} install pybind11` Example: `{pip} install pybind11`
@@ -222,7 +234,7 @@ Example: `dockcross/manylinux-x86`
Optional. Optional.
Shell command to run tests after the build. The wheel will be installed automatically and available for import from the tests. The project root should be included in the command as "{project}". Shell command to run tests after the build. The wheel will be installed automatically and available for import from the tests. Just like in the `CIBW_BEFORE_BUILD` option, `{python}`, `{pip}`, and `{project}` will respectively be replaced by the Python executable, the pip executable, and the absolute project directory.
Example: `nosetests {project}/tests` Example: `nosetests {project}/tests`
@@ -317,6 +329,16 @@ Since `cibuildwheel` runs the wheel through delocate or auditwheel, it will auto
Changelog Changelog
========= =========
### 0.8.0
- Drop support for Python 3.3 on Linux (#67)
- Fix TLS by updating setuptools (#69)
### 0.7.1
- macOS: Fix Pip bugs resulting from PyPI TLS 1.2 enforcement
- macOS: Fix brew Python3 version problems in the CI
### 0.7.0 ### 0.7.0
- You can now specify a custom docker image using the `CIBW_MANYLINUX1_X86_64_IMAGE` and `CIBW_MANYLINUX1_I686_IMAGE` options. (#46) - You can now specify a custom docker image using the `CIBW_MANYLINUX1_X86_64_IMAGE` and `CIBW_MANYLINUX1_I686_IMAGE` options. (#46)
+1 -1
View File
@@ -1 +1 @@
__version__ = '0.7.1' __version__ = '0.9.0'
+7
View File
@@ -74,9 +74,15 @@ def main():
test_requires = os.environ.get('CIBW_TEST_REQUIRES', '').split() test_requires = os.environ.get('CIBW_TEST_REQUIRES', '').split()
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) or ''
skip_config = os.environ.get('CIBW_SKIP', '') skip_config = os.environ.get('CIBW_SKIP', '')
environment_config = get_option_from_environment('CIBW_ENVIRONMENT', platform=platform) or '' environment_config = get_option_from_environment('CIBW_ENVIRONMENT', platform=platform) or ''
try:
build_verbosity = min(3, max(-3, int(build_verbosity)))
except ValueError:
build_verbosity = 0
try: try:
environment = parse_environment(environment_config) environment = parse_environment(environment_config)
except (EnvironmentParseError, ValueError) as e: except (EnvironmentParseError, ValueError) as e:
@@ -118,6 +124,7 @@ def main():
test_command=test_command, test_command=test_command,
test_requires=test_requires, test_requires=test_requires,
before_build=before_build, before_build=before_build,
build_verbosity=build_verbosity,
skip=skip, skip=skip,
environment=environment, environment=environment,
) )
+11 -7
View File
@@ -1,7 +1,7 @@
from __future__ import print_function from __future__ import print_function
import os, subprocess, sys import os, subprocess, sys
from collections import namedtuple from collections import namedtuple
from .util import prepare_command from .util import prepare_command, get_build_verbosity_extra_flags
try: try:
from shlex import quote as shlex_quote from shlex import quote as shlex_quote
@@ -9,7 +9,7 @@ except ImportError:
from pipes import quote as shlex_quote from pipes import quote as shlex_quote
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, skip, environment, manylinux1_images): def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment, manylinux1_images):
try: try:
subprocess.check_call(['docker', '--version']) subprocess.check_call(['docker', '--version'])
except: except:
@@ -22,16 +22,16 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
python_configurations = [ python_configurations = [
PythonConfiguration(identifier='cp27-manylinux1_x86_64', path='/opt/python/cp27-cp27m'), PythonConfiguration(identifier='cp27-manylinux1_x86_64', path='/opt/python/cp27-cp27m'),
PythonConfiguration(identifier='cp27-manylinux1_x86_64', path='/opt/python/cp27-cp27mu'), PythonConfiguration(identifier='cp27-manylinux1_x86_64', path='/opt/python/cp27-cp27mu'),
PythonConfiguration(identifier='cp33-manylinux1_x86_64', path='/opt/python/cp33-cp33m'),
PythonConfiguration(identifier='cp34-manylinux1_x86_64', path='/opt/python/cp34-cp34m'), PythonConfiguration(identifier='cp34-manylinux1_x86_64', path='/opt/python/cp34-cp34m'),
PythonConfiguration(identifier='cp35-manylinux1_x86_64', path='/opt/python/cp35-cp35m'), PythonConfiguration(identifier='cp35-manylinux1_x86_64', path='/opt/python/cp35-cp35m'),
PythonConfiguration(identifier='cp36-manylinux1_x86_64', path='/opt/python/cp36-cp36m'), PythonConfiguration(identifier='cp36-manylinux1_x86_64', path='/opt/python/cp36-cp36m'),
PythonConfiguration(identifier='cp37-manylinux1_x86_64', path='/opt/python/cp37-cp37m'),
PythonConfiguration(identifier='cp27-manylinux1_i686', path='/opt/python/cp27-cp27m'), PythonConfiguration(identifier='cp27-manylinux1_i686', path='/opt/python/cp27-cp27m'),
PythonConfiguration(identifier='cp27-manylinux1_i686', path='/opt/python/cp27-cp27mu'), PythonConfiguration(identifier='cp27-manylinux1_i686', path='/opt/python/cp27-cp27mu'),
PythonConfiguration(identifier='cp33-manylinux1_i686', path='/opt/python/cp33-cp33m'),
PythonConfiguration(identifier='cp34-manylinux1_i686', path='/opt/python/cp34-cp34m'), PythonConfiguration(identifier='cp34-manylinux1_i686', path='/opt/python/cp34-cp34m'),
PythonConfiguration(identifier='cp35-manylinux1_i686', path='/opt/python/cp35-cp35m'), PythonConfiguration(identifier='cp35-manylinux1_i686', path='/opt/python/cp35-cp35m'),
PythonConfiguration(identifier='cp36-manylinux1_i686', path='/opt/python/cp36-cp36m'), PythonConfiguration(identifier='cp36-manylinux1_i686', path='/opt/python/cp36-cp36m'),
PythonConfiguration(identifier='cp37-manylinux1_i686', path='/opt/python/cp37-cp37m'),
] ]
# skip builds as required # skip builds as required
@@ -66,7 +66,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
fi fi
# Build that wheel # Build that wheel
PATH="$PYBIN:$PATH" "$PYBIN/pip" wheel . -w /tmp/built_wheel --no-deps PATH="$PYBIN:$PATH" "$PYBIN/pip" wheel . -w /tmp/built_wheel --no-deps {build_verbosity_flag}
built_wheel=(/tmp/built_wheel/*.whl) built_wheel=(/tmp/built_wheel/*.whl)
# Delocate the wheel # Delocate the wheel
@@ -97,18 +97,22 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# we're all done here; move it to output # we're all done here; move it to output
mv "$delocated_wheel" /output mv "$delocated_wheel" /output
chown {uid}:{gid} "/output/$(basename "$delocated_wheel")"
done done
'''.format( '''.format(
package_name=package_name, package_name=package_name,
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_command=shlex_quote( test_command=shlex_quote(
test_command.format(project='/project') if test_command else '' prepare_command(test_command, python='python', pip='pip', project='/project') if test_command else ''
), ),
before_build=shlex_quote( before_build=shlex_quote(
prepare_command(before_build, python='python', pip='pip') if before_build else '' prepare_command(before_build, python='python', pip='pip', project='/project') if before_build else ''
), ),
build_verbosity_flag=' '.join(get_build_verbosity_extra_flags(build_verbosity)),
environment_exports='\n'.join(environment.as_shell_commands()), environment_exports='\n'.join(environment.as_shell_commands()),
uid=os.getuid(),
gid=os.getgid(),
) )
docker_process = subprocess.Popen([ docker_process = subprocess.Popen([
+9 -7
View File
@@ -7,16 +7,17 @@ try:
except ImportError: except ImportError:
from pipes import quote as shlex_quote from pipes import quote as shlex_quote
from .util import prepare_command from .util import prepare_command, get_build_verbosity_extra_flags
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, skip, environment): def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment):
PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'identifier', 'url']) PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'identifier', 'url'])
python_configurations = [ python_configurations = [
PythonConfiguration(version='2.7', identifier='cp27-macosx_10_6_intel', url='https://www.python.org/ftp/python/2.7.14/python-2.7.14-macosx10.6.pkg'), PythonConfiguration(version='2.7', identifier='cp27-macosx_10_6_intel', url='https://www.python.org/ftp/python/2.7.15/python-2.7.15-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.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.5/python-3.6.5-macosx10.6.pkg'), PythonConfiguration(version='3.6', identifier='cp36-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.6.5/python-3.6.5-macosx10.6.pkg'),
PythonConfiguration(version='3.7', identifier='cp37-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.7.0/python-3.7.0rc1-macosx10.6.pkg'),
] ]
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'
@@ -70,6 +71,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# install pip & wheel # install pip & wheel
call([python, get_pip_script, '--no-setuptools', '--no-wheel'], env=env) call([python, get_pip_script, '--no-setuptools', '--no-wheel'], env=env)
call([pip, '--version'], env=env) call([pip, '--version'], env=env)
call([pip, 'install', '--upgrade', 'setuptools'], env=env)
call([pip, 'install', 'wheel'], env=env) call([pip, 'install', 'wheel'], env=env)
call([pip, 'install', 'delocate'], env=env) call([pip, 'install', 'delocate'], env=env)
@@ -83,11 +85,11 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# run the before_build command # run the before_build command
if before_build: if before_build:
before_build_prepared = prepare_command(before_build, python=python, pip=pip) before_build_prepared = prepare_command(before_build, python=python, pip=pip, project=abs_project_dir)
call(before_build_prepared, env=env, shell=True) call(before_build_prepared, env=env, shell=True)
# build the wheel # build the wheel
call([pip, 'wheel', abs_project_dir, '-w', '/tmp/built_wheel', '--no-deps'], env=env) 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] built_wheel = glob('/tmp/built_wheel/*.whl')[0]
if built_wheel.endswith('none-any.whl'): if built_wheel.endswith('none-any.whl'):
@@ -110,8 +112,8 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# run the tests from $HOME, with an absolute path in the command # run the tests from $HOME, with an absolute path in the command
# (this ensures that Python runs the tests against the installed wheel # (this ensures that Python runs the tests against the installed wheel
# and not the repo code) # and not the repo code)
test_command_absolute = test_command.format(project=abs_project_dir) test_command_prepared = prepare_command(test_command, python=python, pip=pip, project=abs_project_dir)
call(shlex.split(test_command_absolute), cwd=os.environ['HOME'], env=env) call(shlex.split(test_command_prepared), cwd=os.environ['HOME'], env=env)
# we're all done here; move it to output # we're all done here; move it to output
shutil.move(delocated_wheel, output_dir) shutil.move(delocated_wheel, output_dir)
+11 -2
View File
@@ -1,7 +1,7 @@
from fnmatch import fnmatch from fnmatch import fnmatch
def prepare_command(command, python, pip): def prepare_command(command, python, pip, project):
''' '''
Preprocesses a command by expanding variables like {python} or {pip}. Preprocesses a command by expanding variables like {python} or {pip}.
@@ -10,7 +10,16 @@ def prepare_command(command, python, pip):
Python 3, the user could write `{python} setup.py test`. This command would expand Python 3, the user could write `{python} setup.py test`. This command would expand
it out to python2 or python3 as appropriate. it out to python2 or python3 as appropriate.
''' '''
return command.format(python=python, pip=pip) return command.format(python=python, pip=pip, project=project)
def get_build_verbosity_extra_flags(level):
if level > 0:
return ['-' + level * 'v']
elif level < 0:
return ['-' + -level * 'q']
else:
return []
class BuildSkipper(object): class BuildSkipper(object):
+8 -7
View File
@@ -7,10 +7,10 @@ except ImportError:
from collections import namedtuple from collections import namedtuple
from glob import glob from glob import glob
from .util import prepare_command, Unbuffered from .util import prepare_command, get_build_verbosity_extra_flags, Unbuffered
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, skip, environment): def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment):
# Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print' # Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print'
sys.stdout.flush() sys.stdout.flush()
sys.stdout = Unbuffered(sys.stdout) sys.stdout = Unbuffered(sys.stdout)
@@ -72,17 +72,18 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
shell(['python', '-c', '"import struct; print(struct.calcsize(\'P\') * 8)\"'], env=env) shell(['python', '-c', '"import struct; print(struct.calcsize(\'P\') * 8)\"'], env=env)
# prepare the Python environment # prepare the Python environment
shell(['pip', 'install', '--disable-pip-version-check', '--user', '--upgrade', 'pip'], shell(['python', '-m', 'pip', 'install', '--upgrade', 'pip'],
env=env) env=env)
shell(['pip', 'install', '--upgrade', 'setuptools'], env=env)
shell(['pip', 'install', 'wheel'], env=env) shell(['pip', 'install', 'wheel'], env=env)
# run the before_build command # run the before_build command
if before_build: if before_build:
before_build_prepared = prepare_command(before_build, python='python', pip='pip') before_build_prepared = prepare_command(before_build, python='python', pip='pip', project=abs_project_dir)
shell([before_build_prepared], env=env) shell([before_build_prepared], env=env)
# build the wheel # build the wheel
shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'], env=env) 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(built_wheel_dir+'/*.whl')[0]
# install the wheel # install the wheel
@@ -95,8 +96,8 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# run the tests from c:\, with an absolute path in the command # run the tests from c:\, with an absolute path in the command
# (this ensures that Python runs the tests against the installed wheel # (this ensures that Python runs the tests against the installed wheel
# and not the repo code) # and not the repo code)
test_command_absolute = test_command.format(project=abs_project_dir) test_command_prepared = prepare_command(test_command, python='python', pip='pip', project=abs_project_dir)
shell([test_command_absolute], cwd='c:\\', env=env) shell([test_command_prepared], cwd='c:\\', env=env)
# we're all done here; move it to output # we're all done here; move it to output
shutil.move(built_wheel, output_dir) shutil.move(built_wheel, output_dir)
+1 -1
View File
@@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 0.7.1 current_version = 0.9.0
commit = True commit = True
tag = True tag = True
message = Bump version message = Bump version
+1 -1
View File
@@ -8,7 +8,7 @@ except ImportError:
setup( setup(
name='cibuildwheel', name='cibuildwheel',
version='0.7.1', version='0.9.0',
install_requires=['bashlex'], install_requires=['bashlex'],
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',
+2 -1
View File
@@ -1,4 +1,5 @@
{ {
"CIBW_MANYLINUX1_X86_64_IMAGE": "dockcross/manylinux-x64", "CIBW_MANYLINUX1_X86_64_IMAGE": "dockcross/manylinux-x64",
"CIBW_MANYLINUX1_I686_IMAGE": "dockcross/manylinux-x86" "CIBW_MANYLINUX1_I686_IMAGE": "dockcross/manylinux-x86",
"CIBW_SKIP": "cp37-manylinux*"
} }