Compare commits

...
23 Commits
Author SHA1 Message Date
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
Joe Rickerby 7f51b1d8e7 Bump version 2018-04-02 15:49:39 +01:00
Joe Rickerby 7f77aa86b1 Merge pull request #57 from mayeut/macos-update
macOS: Fix Pip bugs resulting from PyPI TLS 1.2 enforcement
macOS: Fix brew python version
2018-04-02 15:48:57 +01:00
mayeut 47873a9175 Use latest pip on macos 2018-03-31 13:19:12 +02:00
mayeut c38a33381d Update python versions on macos 2018-03-31 13:19:00 +02:00
mayeut 121f7cc678 Fix macos python3 test 2018-03-31 12:36:59 +02:00
Joe Rickerby d6361c0e31 Update changelog 2018-01-07 18:10:27 +00:00
10 changed files with 81 additions and 35 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ matrix:
- "PYTHON=python3"
before_install:
- brew update
- brew install python3
- brew outdated python || brew upgrade python
script:
- |
+29 -5
View File
@@ -15,7 +15,7 @@ What does it do?
| | macOS 10.6+ | manylinux i686 | manylinux x86_64 | Windows 32bit | Windows 64bit |
|---|---|---|---|---|---|
| Python 2.7 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.3 | | | | ✅ | ✅ |
| Python 3.3 | | | | ✅ | ✅ |
| Python 3.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python 3.6 | ✅ | ✅ | ✅ | ✅ | ✅ |
@@ -49,7 +49,7 @@ Usage
env: PIP=pip2
script:
- $PIP install cibuildwheel==0.7.0
- $PIP install cibuildwheel==0.8.0
- cibuildwheel --output-dir wheelhouse
```
@@ -59,7 +59,7 @@ Usage
```
build_script:
- pip install cibuildwheel==0.7.0
- pip install cibuildwheel==0.8.0
- cibuildwheel --output-dir wheelhouse
artifacts:
- path: "wheelhouse\\*.whl"
@@ -82,6 +82,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 |
| | `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 |
@@ -166,6 +167,16 @@ Examples:
- Skip Python 3.6 on Linux: `cp36-manylinux*`
- 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`
| ---
@@ -196,7 +207,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.
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 pybind11`
@@ -214,12 +225,15 @@ An alternative docker image to be used for building [`manylinux1`](https://githu
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. 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`
@@ -314,6 +328,16 @@ Since `cibuildwheel` runs the wheel through delocate or auditwheel, it will auto
Changelog
=========
### 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
- You can now specify a custom docker image using the `CIBW_MANYLINUX1_X86_64_IMAGE` and `CIBW_MANYLINUX1_I686_IMAGE` options. (#46)
- Fixed a bug where cibuildwheel would download and build a package from PyPI(!) instead of building the package on the local machine. (#51)
### 0.6.0
- On the Linux build, the host filesystem is now accessible via `/host` (#36)
+1 -1
View File
@@ -1 +1 @@
__version__ = '0.7.0'
__version__ = '0.8.0'
+7
View File
@@ -74,9 +74,15 @@ def main():
test_requires = os.environ.get('CIBW_TEST_REQUIRES', '').split()
project_dir = args.project_dir
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', '')
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:
environment = parse_environment(environment_config)
except (EnvironmentParseError, ValueError) as e:
@@ -118,6 +124,7 @@ def main():
test_command=test_command,
test_requires=test_requires,
before_build=before_build,
build_verbosity=build_verbosity,
skip=skip,
environment=environment,
)
+6 -7
View File
@@ -1,7 +1,7 @@
from __future__ import print_function
import os, subprocess, sys
from collections import namedtuple
from .util import prepare_command
from .util import prepare_command, get_build_verbosity_extra_flags
try:
from shlex import quote as shlex_quote
@@ -9,7 +9,7 @@ except ImportError:
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:
subprocess.check_call(['docker', '--version'])
except:
@@ -22,13 +22,11 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
python_configurations = [
PythonConfiguration(identifier='cp27-manylinux1_x86_64', path='/opt/python/cp27-cp27m'),
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='cp35-manylinux1_x86_64', path='/opt/python/cp35-cp35m'),
PythonConfiguration(identifier='cp36-manylinux1_x86_64', path='/opt/python/cp36-cp36m'),
PythonConfiguration(identifier='cp27-manylinux1_i686', path='/opt/python/cp27-cp27m'),
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='cp35-manylinux1_i686', path='/opt/python/cp35-cp35m'),
PythonConfiguration(identifier='cp36-manylinux1_i686', path='/opt/python/cp36-cp36m'),
@@ -66,7 +64,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
fi
# 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)
# Delocate the wheel
@@ -103,11 +101,12 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
pybin_paths=' '.join(c.path+'/bin' for c in platform_configs),
test_requires=' '.join(test_requires),
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(
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()),
)
+16 -10
View File
@@ -7,17 +7,19 @@ try:
except ImportError:
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'])
python_configurations = [
PythonConfiguration(version='2.7', identifier='cp27-macosx_10_6_intel', url='https://www.python.org/ftp/python/2.7.13/python-2.7.13-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.5', identifier='cp35-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.5.3/python-3.5.3-macosx10.6.pkg'),
PythonConfiguration(version='3.6', identifier='cp36-macosx_10_6_intel', url='https://www.python.org/ftp/python/3.6.0/python-3.6.0-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'),
]
get_pip_url = 'https://bootstrap.pypa.io/get-pip.py'
get_pip_script = '/tmp/get-pip.py'
pkgs_output = subprocess.check_output(['pkgutil', '--pkgs'])
if sys.version_info[0] >= 3:
@@ -35,6 +37,9 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
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])
for config in python_configurations:
if skip(config.identifier):
print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)
@@ -63,8 +68,9 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
call([python, '--version'], env=env)
# install pip & wheel
call([python, '-m', 'ensurepip', '--upgrade'], env=env)
call([python, get_pip_script, '--no-setuptools', '--no-wheel'], env=env)
call([pip, '--version'], env=env)
call([pip, 'install', '--upgrade', 'setuptools'], env=env)
call([pip, 'install', 'wheel'], env=env)
call([pip, 'install', 'delocate'], env=env)
@@ -78,11 +84,11 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
# run the before_build command
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)
# 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]
if built_wheel.endswith('none-any.whl'):
@@ -105,8 +111,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
# (this ensures that Python runs the tests against the installed wheel
# and not the repo code)
test_command_absolute = test_command.format(project=abs_project_dir)
call(shlex.split(test_command_absolute), cwd=os.environ['HOME'], env=env)
test_command_prepared = prepare_command(test_command, python=python, pip=pip, project=abs_project_dir)
call(shlex.split(test_command_prepared), cwd=os.environ['HOME'], env=env)
# we're all done here; move it to output
shutil.move(delocated_wheel, output_dir)
+11 -2
View File
@@ -1,7 +1,7 @@
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}.
@@ -10,7 +10,16 @@ def prepare_command(command, python, pip):
Python 3, the user could write `{python} setup.py test`. This command would expand
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):
+8 -7
View File
@@ -7,10 +7,10 @@ except ImportError:
from collections import namedtuple
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'
sys.stdout.flush()
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)
# prepare the Python environment
shell(['pip', 'install', '--disable-pip-version-check', '--user', '--upgrade', 'pip'],
shell(['python', '-m', 'pip', 'install', '--upgrade', 'pip'],
env=env)
shell(['pip', 'install', '--upgrade', 'setuptools'], env=env)
shell(['pip', 'install', 'wheel'], env=env)
# run the before_build command
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)
# 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]
# 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
# (this ensures that Python runs the tests against the installed wheel
# and not the repo code)
test_command_absolute = test_command.format(project=abs_project_dir)
shell([test_command_absolute], cwd='c:\\', env=env)
test_command_prepared = prepare_command(test_command, python='python', pip='pip', project=abs_project_dir)
shell([test_command_prepared], cwd='c:\\', env=env)
# we're all done here; move it to output
shutil.move(built_wheel, output_dir)
+1 -1
View File
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.7.0
current_version = 0.8.0
commit = True
tag = True
message = Bump version
+1 -1
View File
@@ -8,7 +8,7 @@ except ImportError:
setup(
name='cibuildwheel',
version='0.7.0',
version='0.8.0',
install_requires=['bashlex'],
description="Build Python wheels on CI with minimal configuration.",
long_description='For readme please see http://github.com/joerick/cibuildwheel',