From c563bca05483e4ac178fc625b402f239ff46ffbf Mon Sep 17 00:00:00 2001 From: Yannick Jadoul Date: Sun, 8 Apr 2018 21:24:08 +0200 Subject: [PATCH] Adding an to make the `pip wheel` invocation more or less verbose --- README.md | 11 +++++++++++ cibuildwheel/__main__.py | 7 +++++++ cibuildwheel/linux.py | 7 ++++--- cibuildwheel/macos.py | 6 +++--- cibuildwheel/util.py | 9 +++++++++ cibuildwheel/windows.py | 6 +++--- 6 files changed, 37 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 37e94a11..8fadb5e8 100644 --- a/README.md +++ b/README.md @@ -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` | --- diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index b8f1ac07..ca45fe31 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -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, ) diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index e81e231a..c02a0fca 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -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_flag 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: @@ -66,7 +66,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 @@ -108,6 +108,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be before_build=shlex_quote( prepare_command(before_build, python='python', pip='pip', project='/project') if before_build else '' ), + build_verbosity_flag=get_build_verbosity_flag(build_verbosity), environment_exports='\n'.join(environment.as_shell_commands()), ) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 31b4af48..840b4618 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -7,10 +7,10 @@ try: except ImportError: from pipes import quote as shlex_quote -from .util import prepare_command +from .util import prepare_command, get_build_verbosity_flag -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.14/python-2.7.14-macosx10.6.pkg'), @@ -87,7 +87,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be 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_flag(build_verbosity)], env=env) built_wheel = glob('/tmp/built_wheel/*.whl')[0] if built_wheel.endswith('none-any.whl'): diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 9b1e2ccf..fe3a5ac0 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -13,6 +13,15 @@ def prepare_command(command, python, pip, project): return command.format(python=python, pip=pip, project=project) +def get_build_verbosity_flag(level): + if level > 0: + return '-' + level * 'v' + elif level < 0: + return '-' + -level * 'q' + else: + return '' + + class BuildSkipper(object): def __init__(self, skip_config): self.patterns = skip_config.split() diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 42a38c80..fc9ac448 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -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_flag, 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) @@ -82,7 +82,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be 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_flag(build_verbosity)], env=env) built_wheel = glob(built_wheel_dir+'/*.whl')[0] # install the wheel