Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
054c273997 | ||
|
|
87a9d170b0 | ||
|
|
1d3c59d804 | ||
|
|
0b791dbea5 | ||
|
|
44256e4aa5 | ||
|
|
b579cd5f2a | ||
|
|
8523b25a18 | ||
|
|
637a251b79 | ||
|
|
a6ff864010 | ||
|
|
79f044314b | ||
|
|
0c0e21aa83 | ||
|
|
f1bba58f86 | ||
|
|
56218d896c | ||
|
|
d79ca07bbb | ||
|
|
c6f4f01732 | ||
|
|
586b3c7197 | ||
|
|
0b4475ed07 | ||
|
|
38b3b0a3da | ||
|
|
5adfce9838 | ||
|
|
bc83839387 | ||
|
|
481b1cb060 | ||
|
|
ccfc3c3aa1 | ||
|
|
3d23cbf2a6 | ||
|
|
b9a296324d | ||
|
|
c4822ebdd6 | ||
|
|
2ca6500bba | ||
|
|
8dd71189b2 | ||
|
|
a448c02d7f | ||
|
|
696866bfe1 | ||
|
|
1faa2fe5df | ||
|
|
602acebcc8 | ||
|
|
c43f1b6e3d | ||
|
|
0d3e67b1f9 | ||
|
|
e3b565320c | ||
|
|
56973d34df | ||
|
|
66e9a1cc19 |
@@ -49,7 +49,7 @@ Usage
|
|||||||
env: PIP=pip2
|
env: PIP=pip2
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- $PIP install cibuildwheel==0.10.0
|
- $PIP install cibuildwheel==0.10.2
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ Usage
|
|||||||
|
|
||||||
```
|
```
|
||||||
build_script:
|
build_script:
|
||||||
- pip install cibuildwheel==0.10.0
|
- pip install cibuildwheel==0.10.2
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: "wheelhouse\\*.whl"
|
- path: "wheelhouse\\*.whl"
|
||||||
@@ -394,6 +394,7 @@ Here are some repos that use cibuildwheel.
|
|||||||
- [pybase64](https://github.com/mayeut/pybase64)
|
- [pybase64](https://github.com/mayeut/pybase64)
|
||||||
- [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)
|
||||||
|
|
||||||
> Add repo here! Send a PR.
|
> Add repo here! Send a PR.
|
||||||
|
|
||||||
@@ -409,6 +410,16 @@ This is similar to static linking, so it might have some licence implications. C
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
### 0.10.1
|
||||||
|
|
||||||
|
_3 February 2019_
|
||||||
|
|
||||||
|
- 🐛 Fix build stalling on macOS (that was introduced in pip 19) (#122)
|
||||||
|
- 🐛 Fix "AttributeError: 'Popen' object has no attribute 'args'" on Python 2.7 for Linux builds (#108)
|
||||||
|
- 🛠 Update Python from 3.6.7, 3.7.1 to 3.6.8, 3.7.2 on macOS
|
||||||
|
- 🛠 Update openssl patch from 1.0.2p to 1.0.2q on macOS
|
||||||
|
- 🛠 Sorting build options dict items when printing preamble (#114)
|
||||||
|
|
||||||
### 0.10.0
|
### 0.10.0
|
||||||
|
|
||||||
_23 September 2018_
|
_23 September 2018_
|
||||||
@@ -582,4 +593,6 @@ Massive props also to-
|
|||||||
See also
|
See also
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
If you'd like to keep wheel building separate from the package itself, check out [astrofrog/autowheel](https://github.com/astrofrog/autowheel). It builds packages using cibuildwheel from source distributions on PyPI.
|
||||||
|
|
||||||
If `cibuildwheel` is too limited for your needs, consider [matthew-brett/multibuild](http://github.com/matthew-brett/multibuild). `multibuild` is a toolbox for building a wheel on various platforms. It can do a lot more than this project - it's used to build SciPy!
|
If `cibuildwheel` is too limited for your needs, consider [matthew-brett/multibuild](http://github.com/matthew-brett/multibuild). `multibuild` is a toolbox for building a wheel on various platforms. It can do a lot more than this project - it's used to build SciPy!
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = '0.10.0'
|
__version__ = '0.10.2'
|
||||||
|
|||||||
@@ -105,30 +105,12 @@ def main():
|
|||||||
# This needs to be passed on to the docker container in linux.py
|
# This needs to be passed on to the docker container in linux.py
|
||||||
os.environ['CIBUILDWHEEL'] = '1'
|
os.environ['CIBUILDWHEEL'] = '1'
|
||||||
|
|
||||||
try:
|
if not os.path.exists(os.path.join(project_dir, 'setup.py')):
|
||||||
project_setup_py = os.path.join(project_dir, 'setup.py')
|
|
||||||
name_output = subprocess.check_output([sys.executable, project_setup_py, '--name'],
|
|
||||||
universal_newlines=True)
|
|
||||||
# the last line of output is the name
|
|
||||||
package_name = name_output.strip().splitlines()[-1]
|
|
||||||
except subprocess.CalledProcessError as err:
|
|
||||||
if not os.path.exists(project_setup_py):
|
|
||||||
print('cibuildwheel: Could not find setup.py at root of project', file=sys.stderr)
|
print('cibuildwheel: Could not find setup.py at root of project', file=sys.stderr)
|
||||||
exit(2)
|
exit(2)
|
||||||
else:
|
|
||||||
print(err.output)
|
|
||||||
print('cibuildwheel: Failed to get name of the package. Command was %s' % err.cmd,
|
|
||||||
file=sys.stderr)
|
|
||||||
exit(err.returncode)
|
|
||||||
|
|
||||||
if package_name == '' or package_name == 'UNKNOWN':
|
|
||||||
print('cibuildwheel: Invalid package name "%s". Check your setup.py' % package_name,
|
|
||||||
file=sys.stderr)
|
|
||||||
exit(2)
|
|
||||||
|
|
||||||
build_options = dict(
|
build_options = dict(
|
||||||
project_dir=project_dir,
|
project_dir=project_dir,
|
||||||
package_name=package_name,
|
|
||||||
output_dir=output_dir,
|
output_dir=output_dir,
|
||||||
test_command=test_command,
|
test_command=test_command,
|
||||||
test_requires=test_requires,
|
test_requires=test_requires,
|
||||||
@@ -180,7 +162,7 @@ def print_preamble(platform, build_options):
|
|||||||
|
|
||||||
print('Build options:')
|
print('Build options:')
|
||||||
print(' platform: %r' % platform)
|
print(' platform: %r' % platform)
|
||||||
for option, value in build_options.items():
|
for option, value in sorted(build_options.items()):
|
||||||
print(' %s: %r' % (option, value))
|
print(' %s: %r' % (option, value))
|
||||||
|
|
||||||
warnings = detect_warnings(platform, build_options)
|
warnings = detect_warnings(platform, build_options)
|
||||||
|
|||||||
@@ -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, build_verbosity, build_selector, environment, manylinux1_images):
|
def build(project_dir, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment, manylinux1_images):
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(['docker', '--version'])
|
subprocess.check_call(['docker', '--version'])
|
||||||
except:
|
except:
|
||||||
@@ -102,7 +102,6 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
|
|||||||
chown {uid}:{gid} "/output/$(basename "$delocated_wheel")"
|
chown {uid}:{gid} "/output/$(basename "$delocated_wheel")"
|
||||||
done
|
done
|
||||||
'''.format(
|
'''.format(
|
||||||
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(
|
||||||
@@ -122,15 +121,15 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
|
|||||||
if stdin_str is None:
|
if stdin_str is None:
|
||||||
subprocess.check_call(['docker'] + command)
|
subprocess.check_call(['docker'] + command)
|
||||||
else:
|
else:
|
||||||
process = subprocess.Popen(['docker'] + command,
|
args = ['docker'] + command
|
||||||
stdin=subprocess.PIPE, universal_newlines=True)
|
process = subprocess.Popen(args, stdin=subprocess.PIPE, universal_newlines=True)
|
||||||
try:
|
try:
|
||||||
process.communicate(stdin_str)
|
process.communicate(stdin_str)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
process.kill()
|
process.kill()
|
||||||
process.wait()
|
process.wait()
|
||||||
if process.returncode != 0:
|
if process.returncode != 0:
|
||||||
raise subprocess.CalledProcessError(process.returncode, process.args)
|
raise subprocess.CalledProcessError(process.returncode, args)
|
||||||
|
|
||||||
container_name = 'cibuildwheel-{}'.format(uuid.uuid4())
|
container_name = 'cibuildwheel-{}'.format(uuid.uuid4())
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ except ImportError:
|
|||||||
from .util import prepare_command, get_build_verbosity_extra_flags
|
from .util import prepare_command, get_build_verbosity_extra_flags
|
||||||
|
|
||||||
|
|
||||||
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment):
|
def build(project_dir, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, 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.15/python-2.7.15-macosx10.6.pkg'),
|
PythonConfiguration(version='2.7', identifier='cp27-macosx_10_6_intel', url='https://www.python.org/ftp/python/2.7.16/python-2.7.16-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.6/python-3.6.6-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.0/python-3.7.0-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'),
|
||||||
]
|
]
|
||||||
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'
|
||||||
@@ -55,7 +55,7 @@ def build(project_dir, package_name, output_dir, test_command, test_requires, be
|
|||||||
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/v0.1.0/patch-macos-python-%s-openssl-v0.1.0.tar.gz' % config.version])
|
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(['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)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from glob import glob
|
|||||||
from .util import prepare_command, get_build_verbosity_extra_flags
|
from .util import prepare_command, get_build_verbosity_extra_flags
|
||||||
|
|
||||||
|
|
||||||
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment):
|
def build(project_dir, output_dir, test_command, test_requires, before_build, build_verbosity, build_selector, environment):
|
||||||
# run_with_env is a cmd file that sets the right environment variables to
|
# run_with_env is a cmd file that sets the right environment variables to
|
||||||
run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')
|
run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')
|
||||||
if not os.path.exists(run_with_env):
|
if not os.path.exists(run_with_env):
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[bumpversion]
|
[bumpversion]
|
||||||
current_version = 0.10.0
|
current_version = 0.10.2
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
message = Bump version
|
message = Bump version
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ except ImportError:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='cibuildwheel',
|
name='cibuildwheel',
|
||||||
version='0.10.0',
|
version='0.10.2',
|
||||||
install_requires=['bashlex'],
|
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',
|
||||||
author="Joe Rickerby",
|
author="Joe Rickerby",
|
||||||
|
|||||||
@@ -1,24 +1,23 @@
|
|||||||
from setuptools import setup, Extension
|
from setuptools import setup, Extension
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
if sys.argv[-1] != '--name':
|
# assert that the Python version as written to pythonversion.txt in the CIBW_BEFORE_BUILD step
|
||||||
# assert that the Python version as written to pythonversion.txt in the CIBW_BEFORE_BUILD step
|
# is the same one as is currently running.
|
||||||
# is the same one as is currently running.
|
version_file = 'c:\\pythonversion.txt' if sys.platform == 'win32' else '/tmp/pythonversion.txt'
|
||||||
version_file = 'c:\\pythonversion.txt' if sys.platform == 'win32' else '/tmp/pythonversion.txt'
|
with open(version_file) as f:
|
||||||
with open(version_file) as f:
|
|
||||||
stored_version = f.read()
|
stored_version = f.read()
|
||||||
print('stored_version', stored_version)
|
print('stored_version', stored_version)
|
||||||
print('sys.version', sys.version)
|
print('sys.version', sys.version)
|
||||||
assert stored_version == sys.version
|
assert stored_version == sys.version
|
||||||
|
|
||||||
# check that the executable also was written
|
# check that the executable also was written
|
||||||
executable_file = 'c:\\pythonexecutable.txt' if sys.platform == 'win32' else '/tmp/pythonexecutable.txt'
|
executable_file = 'c:\\pythonexecutable.txt' if sys.platform == 'win32' else '/tmp/pythonexecutable.txt'
|
||||||
with open(executable_file) as f:
|
with open(executable_file) as f:
|
||||||
stored_executable = f.read()
|
stored_executable = f.read()
|
||||||
print('stored_executable', stored_executable)
|
print('stored_executable', stored_executable)
|
||||||
print('sys.executable', sys.executable)
|
print('sys.executable', sys.executable)
|
||||||
# windows/mac are case insensitive
|
# windows/mac are case insensitive
|
||||||
assert os.path.realpath(stored_executable).lower() == os.path.realpath(sys.executable).lower()
|
assert os.path.realpath(stored_executable).lower() == os.path.realpath(sys.executable).lower()
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="spam",
|
name="spam",
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
from setuptools import setup, Extension
|
from setuptools import setup, Extension
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if sys.argv[-1] != '--name':
|
# explode if run on Python 2.7 or Python 3.4 (these should be skipped)
|
||||||
# explode if run on Python 2.7 or Python 3.4 (these should be skipped)
|
if sys.version_info[0:2] == (2, 7):
|
||||||
if sys.version_info[0:2] == (2, 7):
|
|
||||||
raise Exception('Python 2.7 should not be built')
|
raise Exception('Python 2.7 should not be built')
|
||||||
if sys.version_info[0:2] == (3, 4):
|
if sys.version_info[0:2] == (3, 4):
|
||||||
raise Exception('Python 3.4 should be skipped')
|
raise Exception('Python 3.4 should be skipped')
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
from setuptools import setup, Extension
|
from setuptools import setup, Extension
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
if sys.argv[-1] != '--name':
|
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
||||||
# explode if environment isn't correct, as set in CIBW_ENVIRONMENT
|
CIBW_TEST_VAR = os.environ.get('CIBW_TEST_VAR')
|
||||||
CIBW_TEST_VAR = os.environ.get('CIBW_TEST_VAR')
|
CIBW_TEST_VAR_2 = os.environ.get('CIBW_TEST_VAR_2')
|
||||||
CIBW_TEST_VAR_2 = os.environ.get('CIBW_TEST_VAR_2')
|
PATH = os.environ.get('PATH')
|
||||||
PATH = os.environ.get('PATH')
|
|
||||||
|
|
||||||
if CIBW_TEST_VAR != 'a b c':
|
if CIBW_TEST_VAR != 'a b c':
|
||||||
raise Exception('CIBW_TEST_VAR should equal "a b c". It was "%s"' % CIBW_TEST_VAR)
|
raise Exception('CIBW_TEST_VAR should equal "a b c". It was "%s"' % CIBW_TEST_VAR)
|
||||||
if CIBW_TEST_VAR_2 != '1':
|
if CIBW_TEST_VAR_2 != '1':
|
||||||
raise Exception('CIBW_TEST_VAR_2 should equal "1". It was "%s"' % CIBW_TEST_VAR_2)
|
raise Exception('CIBW_TEST_VAR_2 should equal "1". It was "%s"' % CIBW_TEST_VAR_2)
|
||||||
if '/opt/cibw_test_path' not in PATH:
|
if '/opt/cibw_test_path' not in PATH:
|
||||||
raise Exception('PATH should contain "/opt/cibw_test_path". It was "%s"' % PATH)
|
raise Exception('PATH should contain "/opt/cibw_test_path". It was "%s"' % PATH)
|
||||||
if '$PATH' in PATH:
|
if '$PATH' in PATH:
|
||||||
raise Exception('$PATH should be expanded in PATH. It was "%s"' % PATH)
|
raise Exception('$PATH should be expanded in PATH. It was "%s"' % PATH)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ import os, sys
|
|||||||
|
|
||||||
from setuptools import setup, Extension
|
from setuptools import setup, Extension
|
||||||
|
|
||||||
if sys.argv[-1] != '--name':
|
# check that we're running in the correct docker image as specified in the
|
||||||
# check that we're running in the correct docker image as specified in the
|
# environment options CIBW_MANYLINUX1_*_IMAGE
|
||||||
# environment options CIBW_MANYLINUX1_*_IMAGE
|
if 'linux' in sys.platform and not os.path.exists('/dockcross'):
|
||||||
if 'linux' in sys.platform and not os.path.exists('/dockcross'):
|
|
||||||
raise Exception('/dockcross directory not found. Is this test running in the correct docker image?')
|
raise Exception('/dockcross directory not found. Is this test running in the correct docker image?')
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
|||||||
Reference in New Issue
Block a user