Use package_dir to specify path to Python package

This commit is contained in:
Filip Š
2020-03-13 13:45:14 +01:00
parent 40ff745321
commit 1e08d29cfc
4 changed files with 30 additions and 20 deletions
+7 -6
View File
@@ -60,10 +60,10 @@ def main():
parser.add_argument('--output-dir',
default=os.environ.get('CIBW_OUTPUT_DIR', 'wheelhouse'),
help='Destination folder for the wheels.')
parser.add_argument('project_dir',
parser.add_argument('package_dir',
default='.',
nargs='?',
help=('Path to the project that you want wheels for. Default: the current '
help=('Path to the package that you want wheels for. Default: the current '
'directory.'))
parser.add_argument('--print-build-identifiers',
@@ -101,7 +101,7 @@ def main():
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_extras = get_option_from_environment('CIBW_TEST_EXTRAS', platform=platform, default='')
project_dir = args.project_dir
package_dir = args.package_dir
before_build = get_option_from_environment('CIBW_BEFORE_BUILD', platform=platform)
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', '')
@@ -136,8 +136,8 @@ def main():
# This needs to be passed on to the docker container in linux.py
os.environ['CIBUILDWHEEL'] = '1'
if not os.path.exists(os.path.join(project_dir, 'setup.py')):
print('cibuildwheel: Could not find setup.py at root of project', file=sys.stderr)
if not os.path.exists(os.path.join(package_dir, 'setup.py')):
print('cibuildwheel: Could not find setup.py at root of package', file=sys.stderr)
exit(2)
if args.print_build_identifiers:
@@ -145,7 +145,8 @@ def main():
exit(0)
build_options = dict(
project_dir=project_dir,
project_dir='.',
package_dir=package_dir,
output_dir=output_dir,
test_command=test_command,
test_requires=test_requires,
+11 -4
View File
@@ -88,6 +88,12 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
('pp', 'manylinux_x86_64', manylinux_images['pypy_x86_64']),
]
abs_project_dir = os.path.abspath(project_dir)
abs_package_dir = os.path.abspath(package_dir)
container_project_dir = '/project'
container_package_dir = os.path.join(container_project_dir, os.path.relpath(abs_package_dir, os.path.commonprefix([abs_project_dir, abs_package_dir]))),
for implementation, platform_tag, docker_image in platforms:
platform_configs = [c for c in python_configurations if c.identifier.startswith(implementation) and c.identifier.endswith(platform_tag)]
if not platform_configs:
@@ -122,7 +128,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
# Build the wheel
rm -rf /tmp/built_wheel
mkdir /tmp/built_wheel
pip wheel . -w /tmp/built_wheel --no-deps {build_verbosity_flag}
pip wheel {package_dir} -w /tmp/built_wheel --no-deps {build_verbosity_flag}
built_wheel=(/tmp/built_wheel/*.whl)
# repair the wheel
@@ -191,13 +197,14 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
) done
'''.format(
pybin_paths=' '.join(c.path + '/bin' for c in platform_configs),
package_dir=container_package_dir,
test_requires=' '.join(test_requires),
test_extras=test_extras,
test_command=shlex.quote(
prepare_command(test_command, project='/project') if test_command else ''
prepare_command(test_command, project=container_project_dir, package=container_package_dir) if test_command else ''
),
before_build=shlex.quote(
prepare_command(before_build, project='/project') if before_build else ''
prepare_command(before_build, project=container_project_dir, package=container_package_dir) if before_build else ''
),
build_verbosity_flag=' '.join(get_build_verbosity_extra_flags(build_verbosity)),
repair_command=shlex.quote(
@@ -207,7 +214,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
uid=os.getuid(),
gid=os.getgid(),
before_test=shlex.quote(
prepare_command(before_test, project='/project') if before_test else ''
prepare_command(before_test, project=container_project_dir, package=container_package_dir) if before_test else ''
),
)
+6 -5
View File
@@ -105,8 +105,9 @@ def install_pypy(version, url):
return installation_bin_path
def build(project_dir, output_dir, test_command, before_test, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
def build(project_dir, package_dir, output_dir, test_command, before_test, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
abs_project_dir = os.path.abspath(project_dir)
abs_package_dir = os.path.abspath(package_dir)
temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')
built_wheel_dir = os.path.join(temp_dir, 'built_wheel')
repaired_wheel_dir = os.path.join(temp_dir, 'repaired_wheel')
@@ -175,14 +176,14 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
# run the before_build command
if before_build:
before_build_prepared = prepare_command(before_build, project=abs_project_dir)
before_build_prepared = prepare_command(before_build, project=abs_project_dir, package=abs_package_dir)
call(before_build_prepared, env=env, shell=True)
# build the wheel
if os.path.exists(built_wheel_dir):
shutil.rmtree(built_wheel_dir)
os.makedirs(built_wheel_dir)
call(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
call(['pip', 'wheel', abs_package_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
built_wheel = glob(os.path.join(built_wheel_dir, '*.whl'))[0]
# repair the wheel
@@ -215,7 +216,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
call(['which', 'python'], env=virtualenv_env)
if before_test:
before_test_prepared = prepare_command(before_test, project=abs_project_dir)
before_test_prepared = prepare_command(before_test, project=abs_project_dir, package=abs_package_dir)
call(before_test_prepared, env=virtualenv_env, shell=True)
# install the wheel
@@ -228,7 +229,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
# 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_prepared = prepare_command(test_command, project=abs_project_dir)
test_command_prepared = prepare_command(test_command, project=abs_project_dir, package=abs_package_dir)
call(test_command_prepared, cwd=os.environ['HOME'], env=virtualenv_env, shell=True)
# clean up
+6 -5
View File
@@ -86,8 +86,9 @@ def install_pypy(version, arch, url):
return installation_path
def build(project_dir, output_dir, test_command, before_test, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
def build(project_dir, package_dir, output_dir, test_command, before_test, test_requires, test_extras, before_build, build_verbosity, build_selector, repair_command, environment):
abs_project_dir = os.path.abspath(project_dir)
abs_package_dir = os.path.abspath(package_dir)
temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')
built_wheel_dir = os.path.join(temp_dir, 'built_wheel')
repaired_wheel_dir = os.path.join(temp_dir, 'repaired_wheel')
@@ -148,14 +149,14 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
# run the before_build command
if before_build:
before_build_prepared = prepare_command(before_build, project=abs_project_dir)
before_build_prepared = prepare_command(before_build, project=abs_project_dir, package=abs_package_dir)
shell([before_build_prepared], env=env)
# build the wheel
if os.path.exists(built_wheel_dir):
shutil.rmtree(built_wheel_dir)
os.makedirs(built_wheel_dir)
shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
shell(['pip', 'wheel', abs_package_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
built_wheel = glob(os.path.join(built_wheel_dir, '*.whl'))[0]
# repair the wheel
@@ -193,7 +194,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
shell(['which', 'python'], env=virtualenv_env)
if before_test:
before_test_prepared = prepare_command(before_test, project=abs_project_dir)
before_test_prepared = prepare_command(before_test, project=abs_project_dir, package=abs_package_dir)
shell([before_test_prepared], env=virtualenv_env)
# install the wheel
@@ -206,7 +207,7 @@ def build(project_dir, output_dir, test_command, before_test, test_requires, tes
# 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_prepared = prepare_command(test_command, project=abs_project_dir)
test_command_prepared = prepare_command(test_command, project=abs_project_dir, package=abs_package_dir)
shell([test_command_prepared], cwd='c:\\', env=virtualenv_env)
# clean up