diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml new file mode 100644 index 00000000..1b77f657 --- /dev/null +++ b/.github/workflows/update-dependencies.yml @@ -0,0 +1,34 @@ +name: Update dependencies + +on: + workflow_dispatch: + schedule: + - cron: '0 6 * * 1' # "At 06:00 on Monday." + +jobs: + update-dependencies: + name: Update dependencies + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + name: Install Python 3.9 + with: + python-version: 3.9 + architecture: x64 + - name: Install dependencies + run: python -m pip install requests pip-tools + - name: Run update + run: python ./bin/update_dependencies.py + - name: Create Pull Request + if: github.ref == 'refs/heads/master' + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update dependencies + title: '[Bot] Update dependencies' + body: | + Update the versions of our dependencies. + + PR generated by "Update dependencies" [workflow](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). + branch: update-dependencies-pr + delete-branch: true diff --git a/README.md b/README.md index 78a6ce4c..1041237c 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ jobs: name: Install Python - name: Install cibuildwheel - run: python -m pip install cibuildwheel==1.7.1 + run: python -m pip install cibuildwheel==1.7.2 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse @@ -261,6 +261,16 @@ Changelog +### 1.7.2 + +_21 December 2020_ + +- 🛠 Update dependencies, notably wheel==0.36.2 and pip==20.3.3, and CPython to + their latest bugfix releases (#489) +- 📚 Switch to a Github example in the README (#479) +- 📚 Create Working Examples table, with many projects that use cibuildwheel (#474) +- 📚 Import Working Examples table and Changelog to docs + ### 1.7.1 _3 December 2020_ diff --git a/bin/update_dependencies.py b/bin/update_dependencies.py index 7c4489ba..62717c31 100755 --- a/bin/update_dependencies.py +++ b/bin/update_dependencies.py @@ -2,7 +2,9 @@ import configparser import os +import shutil import subprocess +import sys from collections import namedtuple import requests @@ -12,21 +14,39 @@ os.chdir('..') # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to # regenerate the constraints files -os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_constraints.py" -subprocess.check_call([ - 'pip-compile', - '--allow-unsafe', - '--upgrade', - 'cibuildwheel/resources/constraints.in', -]) -for python_version in ['27', '35', '36', '37']: - subprocess.check_call([ - f'./env{python_version}/bin/pip-compile', - '--allow-unsafe', - '--upgrade', - 'cibuildwheel/resources/constraints.in', - '--output-file', f'cibuildwheel/resources/constraints-python{python_version}.txt' - ]) +os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_dependencies.py" + +PYTHON_VERSIONS = ['27', '35', '36', '37', '38', '39'] + +if '--no-docker' in sys.argv: + for python_version in PYTHON_VERSIONS: + subprocess.check_call([ + f'./env{python_version}/bin/pip-compile', + '--allow-unsafe', + '--upgrade', + 'cibuildwheel/resources/constraints.in', + '--output-file', f'cibuildwheel/resources/constraints-python{python_version}.txt' + ]) +else: + image = 'quay.io/pypa/manylinux2010_x86_64:latest' + subprocess.check_call(['docker', 'pull', image]) + for python_version in PYTHON_VERSIONS: + abi_flags = '' if int(python_version) >= 38 else 'm' + python_path = f'/opt/python/cp{python_version}-cp{python_version}{abi_flags}/bin/' + subprocess.check_call([ + 'docker', 'run', '--rm', + '-e', 'CUSTOM_COMPILE_COMMAND', + '-v', f'{os.getcwd()}:/volume', + '--workdir', '/volume', image, + 'bash', '-c', + f'{python_path}pip install pip-tools &&' + f'{python_path}pip-compile --allow-unsafe --upgrade ' + 'cibuildwheel/resources/constraints.in ' + f'--output-file cibuildwheel/resources/constraints-python{python_version}.txt' + ]) + +# default constraints.txt +shutil.copyfile(f'cibuildwheel/resources/constraints-python{PYTHON_VERSIONS[-1]}.txt', 'cibuildwheel/resources/constraints.txt') Image = namedtuple('Image', [ 'manylinux_version', diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py index 48c2f6b0..8adfee4f 100644 --- a/cibuildwheel/__init__.py +++ b/cibuildwheel/__init__.py @@ -1 +1 @@ -__version__ = '1.7.1' +__version__ = '1.7.2' diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 7140f720..2af1cc8d 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -38,8 +38,8 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi # TODO: figure out what's going on in CPython 3.5 on macOS 11. or, remove it :) # PythonConfiguration(version='3.5', identifier='cp35-macosx_x86_64', url='https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg'), PythonConfiguration(version='3.6', identifier='cp36-macosx_x86_64', url='https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg'), - PythonConfiguration(version='3.7', identifier='cp37-macosx_x86_64', url='https://www.python.org/ftp/python/3.7.8/python-3.7.8-macosx10.9.pkg'), - PythonConfiguration(version='3.8', identifier='cp38-macosx_x86_64', url='https://www.python.org/ftp/python/3.8.4/python-3.8.4-macosx10.9.pkg'), + PythonConfiguration(version='3.7', identifier='cp37-macosx_x86_64', url='https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg'), + PythonConfiguration(version='3.8', identifier='cp38-macosx_x86_64', url='https://www.python.org/ftp/python/3.8.7/python-3.8.7-macosx10.9.pkg'), # TODO: Find some better way to select Universal2 vs. regular (note that this works on 10.9+, regardless of the name) PythonConfiguration(version='3.9', identifier='cp39-macosx_x86_64', url='https://www.python.org/ftp/python/3.9.1/python-3.9.1-macos11.0.pkg'), PythonConfiguration(version='3.9', identifier='cp39-macosx_universal2', url='https://www.python.org/ftp/python/3.9.1/python-3.9.1-macos11.0.pkg'), diff --git a/cibuildwheel/resources/constraints-python27.txt b/cibuildwheel/resources/constraints-python27.txt index dd4a864b..eb6d018c 100644 --- a/cibuildwheel/resources/constraints-python27.txt +++ b/cibuildwheel/resources/constraints-python27.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# bin/update_constraints.py +# bin/update_dependencies.py # appdirs==1.4.4 # via virtualenv configparser==4.0.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python35.txt b/cibuildwheel/resources/constraints-python35.txt index c6f210fa..a561e8d3 100644 --- a/cibuildwheel/resources/constraints-python35.txt +++ b/cibuildwheel/resources/constraints-python35.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# bin/update_constraints.py +# bin/update_dependencies.py # appdirs==1.4.4 # via virtualenv delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python36.txt b/cibuildwheel/resources/constraints-python36.txt index ea9e0109..4e782508 100644 --- a/cibuildwheel/resources/constraints-python36.txt +++ b/cibuildwheel/resources/constraints-python36.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# bin/update_constraints.py +# bin/update_dependencies.py # appdirs==1.4.4 # via virtualenv delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in @@ -18,4 +18,4 @@ zipp==3.4.0 # via importlib-metadata, importlib-resources # The following packages are considered to be unsafe in a requirements file: pip==20.3.3 # via -r cibuildwheel/resources/constraints.in -setuptools==51.0.0 # via -r cibuildwheel/resources/constraints.in +setuptools==51.1.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 6e0f89f1..9e7b421b 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# bin/update_constraints.py +# bin/update_dependencies.py # appdirs==1.4.4 # via virtualenv delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in @@ -17,4 +17,4 @@ zipp==3.4.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: pip==20.3.3 # via -r cibuildwheel/resources/constraints.in -setuptools==51.0.0 # via -r cibuildwheel/resources/constraints.in +setuptools==51.1.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt new file mode 100644 index 00000000..40bcd207 --- /dev/null +++ b/cibuildwheel/resources/constraints-python38.txt @@ -0,0 +1,17 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# bin/update_dependencies.py +# +appdirs==1.4.4 # via virtualenv +delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in +distlib==0.3.1 # via virtualenv +filelock==3.0.12 # via virtualenv +six==1.15.0 # via virtualenv +virtualenv==20.2.2 # via -r cibuildwheel/resources/constraints.in +wheel==0.36.2 # via -r cibuildwheel/resources/constraints.in, delocate + +# The following packages are considered to be unsafe in a requirements file: +pip==20.3.3 # via -r cibuildwheel/resources/constraints.in +setuptools==51.1.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt new file mode 100644 index 00000000..40bcd207 --- /dev/null +++ b/cibuildwheel/resources/constraints-python39.txt @@ -0,0 +1,17 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# bin/update_dependencies.py +# +appdirs==1.4.4 # via virtualenv +delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in +distlib==0.3.1 # via virtualenv +filelock==3.0.12 # via virtualenv +six==1.15.0 # via virtualenv +virtualenv==20.2.2 # via -r cibuildwheel/resources/constraints.in +wheel==0.36.2 # via -r cibuildwheel/resources/constraints.in, delocate + +# The following packages are considered to be unsafe in a requirements file: +pip==20.3.3 # via -r cibuildwheel/resources/constraints.in +setuptools==51.1.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 6d2f7d0b..40bcd207 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile # To update, run: # -# bin/update_constraints.py +# bin/update_dependencies.py # appdirs==1.4.4 # via virtualenv delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in @@ -14,4 +14,4 @@ wheel==0.36.2 # via -r cibuildwheel/resources/constraints.in, deloca # The following packages are considered to be unsafe in a requirements file: pip==20.3.3 # via -r cibuildwheel/resources/constraints.in -setuptools==51.0.0 # via -r cibuildwheel/resources/constraints.in +setuptools==51.1.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 816ee2be..ec1b0fd3 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,22 +1,22 @@ [x86_64] -manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-12-14-7638977 -manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-12-15-ba3529a -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-12-15-6cc1890 +manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-12-18-c48c073 +manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-12-19-8df9e2d +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-12-18-cb453dc [i686] -manylinux1 = quay.io/pypa/manylinux1_i686:2020-12-14-7638977 -manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-12-15-ba3529a -manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-12-15-6cc1890 +manylinux1 = quay.io/pypa/manylinux1_i686:2020-12-18-c48c073 +manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-12-19-8df9e2d +manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-12-18-cb453dc [pypy_x86_64] manylinux2010 = pypywheels/manylinux2010-pypy_x86_64:2020-12-11-f1e0e80 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-12-15-6cc1890 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-12-18-cb453dc [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-12-15-6cc1890 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-12-18-cb453dc [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-12-15-6cc1890 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-12-18-cb453dc diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 4331915a..11dbdcec 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -56,12 +56,12 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi PythonConfiguration(version='3.5.4', arch='64', identifier='cp35-win_amd64', url=None), PythonConfiguration(version='3.6.8', arch='32', identifier='cp36-win32', url=None), PythonConfiguration(version='3.6.8', arch='64', identifier='cp36-win_amd64', url=None), - PythonConfiguration(version='3.7.8', arch='32', identifier='cp37-win32', url=None), - PythonConfiguration(version='3.7.8', arch='64', identifier='cp37-win_amd64', url=None), - PythonConfiguration(version='3.8.4', arch='32', identifier='cp38-win32', url=None), - PythonConfiguration(version='3.8.4', arch='64', identifier='cp38-win_amd64', url=None), - PythonConfiguration(version='3.9.0', arch='32', identifier='cp39-win32', url=None), - PythonConfiguration(version='3.9.0', arch='64', identifier='cp39-win_amd64', url=None), + PythonConfiguration(version='3.7.9', arch='32', identifier='cp37-win32', url=None), + PythonConfiguration(version='3.7.9', arch='64', identifier='cp37-win_amd64', url=None), + PythonConfiguration(version='3.8.7', arch='32', identifier='cp38-win32', url=None), + PythonConfiguration(version='3.8.7', arch='64', identifier='cp38-win_amd64', url=None), + PythonConfiguration(version='3.9.1', arch='32', identifier='cp39-win32', url=None), + PythonConfiguration(version='3.9.1', arch='64', identifier='cp39-win_amd64', url=None), # PyPy PythonConfiguration(version='2.7', arch='32', identifier='pp27-win32', url='https://downloads.python.org/pypy/pypy2.7-v7.3.3-win32.zip'), PythonConfiguration(version='3.6', arch='32', identifier='pp36-win32', url='https://downloads.python.org/pypy/pypy3.6-v7.3.3-win32.zip'), diff --git a/docs/changelog.md b/docs/changelog.md index f4c1b679..5861f74d 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -3,7 +3,7 @@ title: Changelog --- {% - includemarkdown "../README.md" + include-markdown "../README.md" start="" end="" %} diff --git a/docs/docs/data b/docs/docs/data deleted file mode 120000 index 4909e06e..00000000 --- a/docs/docs/data +++ /dev/null @@ -1 +0,0 @@ -../data \ No newline at end of file diff --git a/docs/working-examples.md b/docs/working-examples.md index a769ff53..e2c3b86c 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -3,7 +3,7 @@ title: Working examples --- {% - includemarkdown "../README.md" + include-markdown "../README.md" start="" end="" %} diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml index 51f01c9f..806a9859 100644 --- a/examples/appveyor-minimal.yml +++ b/examples/appveyor-minimal.yml @@ -12,7 +12,7 @@ stack: python 3.7 init: - cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH% -install: python -m pip install cibuildwheel==1.7.1 +install: python -m pip install cibuildwheel==1.7.2 build_script: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml index 153114d6..7ce34e40 100644 --- a/examples/azure-pipelines-minimal.yml +++ b/examples/azure-pipelines-minimal.yml @@ -6,7 +6,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - pip3 install cibuildwheel==1.7.1 + pip3 install cibuildwheel==1.7.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -20,7 +20,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - python3 -m pip install cibuildwheel==1.7.1 + python3 -m pip install cibuildwheel==1.7.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -36,7 +36,7 @@ jobs: - bash: | set -o errexit python -m pip install --upgrade pip - pip install cibuildwheel==1.7.1 + pip install cibuildwheel==1.7.2 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml index 124db111..116dede7 100644 --- a/examples/circleci-minimal.yml +++ b/examples/circleci-minimal.yml @@ -11,7 +11,7 @@ jobs: - run: name: Build the Linux wheels. command: | - pip3 install --user cibuildwheel==1.7.1 + pip3 install --user cibuildwheel==1.7.2 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -25,7 +25,7 @@ jobs: - run: name: Build the OS X wheels. command: | - pip3 install cibuildwheel==1.7.1 + pip3 install cibuildwheel==1.7.2 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml index 5e33a4b1..43abcd66 100644 --- a/examples/github-deploy.yml +++ b/examples/github-deploy.yml @@ -28,7 +28,7 @@ jobs: - name: Install cibuildwheel run: | - python -m pip install cibuildwheel==1.7.1 + python -m pip install cibuildwheel==1.7.2 - name: Install Visual C++ for Python 2.7 if: runner.os == 'Windows' diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml index 9c3620f3..29600b35 100644 --- a/examples/github-minimal.yml +++ b/examples/github-minimal.yml @@ -20,7 +20,7 @@ jobs: - name: Install cibuildwheel run: | - python -m pip install cibuildwheel==1.7.1 + python -m pip install cibuildwheel==1.7.2 - name: Install Visual C++ for Python 2.7 if: runner.os == 'Windows' diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml index 40e58e6e..402a95e1 100644 --- a/examples/travis-ci-deploy.yml +++ b/examples/travis-ci-deploy.yml @@ -20,7 +20,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==1.7.1 + - python3 -m pip install cibuildwheel==1.7.2 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml index ea412dbb..d9e1b64f 100644 --- a/examples/travis-ci-minimal.yml +++ b/examples/travis-ci-minimal.yml @@ -26,7 +26,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==1.7.1 + - python3 -m pip install cibuildwheel==1.7.2 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml index f2320214..d1cfba18 100644 --- a/examples/travis-ci-test-and-deploy.yml +++ b/examples/travis-ci-test-and-deploy.yml @@ -55,7 +55,7 @@ jobs: - stage: deploy name: Build and deploy Linux wheels services: docker - install: python3 -m pip install cibuildwheel==1.7.1 + install: python3 -m pip install cibuildwheel==1.7.2 script: python3 -m cibuildwheel --output-dir wheelhouse after_success: | python3 -m pip install twine @@ -65,7 +65,7 @@ jobs: name: Build and deploy macOS wheels os: osx language: shell - install: python3 -m pip install cibuildwheel==1.7.1 + install: python3 -m pip install cibuildwheel==1.7.2 script: python3 -m cibuildwheel --output-dir wheelhouse after_success: | python3 -m pip install twine @@ -75,7 +75,7 @@ jobs: name: Build and deploy Windows wheels os: windows language: shell - install: python3 -m pip install cibuildwheel==1.7.1 + install: python3 -m pip install cibuildwheel==1.7.2 script: python3 -m cibuildwheel --output-dir wheelhouse after_success: | python3 -m pip install twine diff --git a/requirements-dev.txt b/requirements-dev.txt index 341498b4..bfe96baa 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,7 @@ -e . pytest mkdocs==1.0.4 -mkdocs-include-markdown-plugin==1.0.0 +mkdocs-include-markdown-plugin==2.1.1 pymdown-extensions pip-tools requests diff --git a/setup.py b/setup.py index 13bb0766..204e7ccd 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ long_description = (this_directory / 'README.md').read_text(encoding='utf-8') setup( name='cibuildwheel', - version='1.7.1', + version='1.7.2', install_requires=['bashlex!=0.13', 'toml', 'certifi'], description="Build Python wheels on CI with minimal configuration.", long_description=long_description, diff --git a/unit_test/dependency_constraints_test.py b/unit_test/dependency_constraints_test.py index 5347011c..448cec11 100644 --- a/unit_test/dependency_constraints_test.py +++ b/unit_test/dependency_constraints_test.py @@ -10,7 +10,8 @@ def test_defaults(): resources_dir = project_root / 'cibuildwheel' / 'resources' assert dependency_constraints.base_file_path.samefile(resources_dir / 'constraints.txt') - assert dependency_constraints.get_for_python_version('3.8').samefile(resources_dir / 'constraints.txt') + assert dependency_constraints.get_for_python_version('3.99').samefile(resources_dir / 'constraints.txt') + assert dependency_constraints.get_for_python_version('3.9').samefile(resources_dir / 'constraints-python39.txt') assert dependency_constraints.get_for_python_version('3.6').samefile(resources_dir / 'constraints-python36.txt') assert dependency_constraints.get_for_python_version('3.5').samefile(resources_dir / 'constraints-python35.txt') assert dependency_constraints.get_for_python_version('2.7').samefile(resources_dir / 'constraints-python27.txt')