We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Windows wheels are not built for python 3.7
On Linux wheels are correctly built for all supported python versions. Windows however stops at python 3.6.

Looking at windows.py there seem to be no references to python 3.7

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `cibuildwheel/windows.py`
Content:
```
1 from __future__ import print_function
2 import os, tempfile, subprocess, sys, shutil
3 try:
4     from urllib2 import urlopen
5 except ImportError:
6     from urllib.request import urlopen
7 from collections import namedtuple
8 from glob import glob
9 
10 from .util import prepare_command, get_build_verbosity_extra_flags, Unbuffered
11 
12 
13 def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment):
14     # Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print'
15     sys.stdout.flush()
16     sys.stdout = Unbuffered(sys.stdout)
17 
18     # run_with_env is a cmd file that sets the right environment variables to
19     run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')
20     if not os.path.exists(run_with_env):
21         with open(run_with_env, 'wb') as f:
22             request = urlopen('https://github.com/ogrisel/python-appveyor-demo/raw/09a1c8672e5015a74d8f69d07add6ee803c176ec/appveyor/run_with_env.cmd')
23             f.write(request.read())
24 
25     def shell(args, env=None, cwd=None):
26         # print the command executing for the logs
27         print('+ ' + ' '.join(args))
28         args = ['cmd', '/E:ON', '/V:ON', '/C', run_with_env] + args
29         return subprocess.check_call(' '.join(args), env=env, cwd=cwd)
30 
31     PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier', 'path'])
32     python_configurations = [
33         PythonConfiguration(version='2.7.x', arch="32", identifier='cp27-win32', path='C:\Python27'),
34         PythonConfiguration(version='2.7.x', arch="64", identifier='cp27-win_amd64', path='C:\Python27-x64'),
35         PythonConfiguration(version='3.3.x', arch="32", identifier='cp33-win32', path='C:\Python33'),
36         PythonConfiguration(version='3.3.x', arch="64", identifier='cp33-win_amd64', path='C:\Python33-x64'),
37         PythonConfiguration(version='3.4.x', arch="32", identifier='cp34-win32', path='C:\Python34'),
38         PythonConfiguration(version='3.4.x', arch="64", identifier='cp34-win_amd64', path='C:\Python34-x64'),
39         PythonConfiguration(version='3.5.x', arch="32", identifier='cp35-win32', path='C:\Python35'),
40         PythonConfiguration(version='3.5.x', arch="64", identifier='cp35-win_amd64', path='C:\Python35-x64'),
41         PythonConfiguration(version='3.6.x', arch="32", identifier='cp36-win32', path='C:\Python36'),
42         PythonConfiguration(version='3.6.x', arch="64", identifier='cp36-win_amd64', path='C:\Python36-x64'),
43     ]
44 
45     abs_project_dir = os.path.abspath(project_dir)
46     temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')
47     built_wheel_dir = os.path.join(temp_dir, 'built_wheel')
48 
49     for config in python_configurations:
50         if skip(config.identifier):
51             print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)
52             continue
53 
54         # setup dirs
55         if os.path.exists(built_wheel_dir):
56             shutil.rmtree(built_wheel_dir)
57         os.makedirs(built_wheel_dir)
58 
59         env = os.environ.copy()
60         # set up environment variables for run_with_env
61         env['PYTHON_VERSION'] = config.version
62         env['PYTHON_ARCH'] = config.arch
63         env['PATH'] = os.pathsep.join([
64             config.path,
65             os.path.join(config.path, 'Scripts'),
66             env['PATH']
67         ])
68         env = environment.as_dictionary(prev_environment=env)
69 
70         # for the logs - check we're running the right version of python
71         shell(['python', '--version'], env=env)
72         shell(['python', '-c', '"import struct; print(struct.calcsize(\'P\') * 8)\"'], env=env)
73 
74         # prepare the Python environment
75         shell(['python', '-m', 'pip', 'install', '--upgrade', 'pip'],
76               env=env)
77         shell(['pip', 'install', '--upgrade', 'setuptools'], env=env)
78         shell(['pip', 'install', 'wheel'], env=env)
79 
80         # run the before_build command
81         if before_build:
82             before_build_prepared = prepare_command(before_build, project=abs_project_dir)
83             shell([before_build_prepared], env=env)
84 
85         # build the wheel
86         shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)
87         built_wheel = glob(built_wheel_dir+'/*.whl')[0]
88 
89         # install the wheel
90         shell(['pip', 'install', built_wheel], env=env)
91 
92         # test the wheel
93         if test_requires:
94             shell(['pip', 'install'] + test_requires, env=env)
95         if test_command:
96             # run the tests from c:\, with an absolute path in the command
97             # (this ensures that Python runs the tests against the installed wheel
98             # and not the repo code)
99             test_command_prepared = prepare_command(test_command, project=abs_project_dir)
100             shell([test_command_prepared], cwd='c:\\', env=env)
101 
102         # we're all done here; move it to output
103         shutil.move(built_wheel, output_dir)
104
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py
--- a/cibuildwheel/windows.py
+++ b/cibuildwheel/windows.py
@@ -40,6 +40,8 @@
         PythonConfiguration(version='3.5.x', arch="64", identifier='cp35-win_amd64', path='C:\Python35-x64'),
         PythonConfiguration(version='3.6.x', arch="32", identifier='cp36-win32', path='C:\Python36'),
         PythonConfiguration(version='3.6.x', arch="64", identifier='cp36-win_amd64', path='C:\Python36-x64'),
+        PythonConfiguration(version='3.7.x', arch="32", identifier='cp37-win32', path='C:\Python37'),
+        PythonConfiguration(version='3.7.x', arch="64", identifier='cp37-win_amd64', path='C:\Python37-x64'),
     ]
 
     abs_project_dir = os.path.abspath(project_dir)
@@ -50,6 +52,10 @@
         if skip(config.identifier):
             print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)
             continue
+        
+        # check python & pip exist for this configuration
+        assert os.path.exists(os.path.join(config.path, 'python.exe'))
+        assert os.path.exists(os.path.join(config.path, 'Scripts', 'pip.exe'))
 
         # setup dirs
         if os.path.exists(built_wheel_dir):

{"golden_diff": "diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py\n--- a/cibuildwheel/windows.py\n+++ b/cibuildwheel/windows.py\n@@ -40,6 +40,8 @@\n         PythonConfiguration(version='3.5.x', arch=\"64\", identifier='cp35-win_amd64', path='C:\\Python35-x64'),\n         PythonConfiguration(version='3.6.x', arch=\"32\", identifier='cp36-win32', path='C:\\Python36'),\n         PythonConfiguration(version='3.6.x', arch=\"64\", identifier='cp36-win_amd64', path='C:\\Python36-x64'),\n+        PythonConfiguration(version='3.7.x', arch=\"32\", identifier='cp37-win32', path='C:\\Python37'),\n+        PythonConfiguration(version='3.7.x', arch=\"64\", identifier='cp37-win_amd64', path='C:\\Python37-x64'),\n     ]\n \n     abs_project_dir = os.path.abspath(project_dir)\n@@ -50,6 +52,10 @@\n         if skip(config.identifier):\n             print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)\n             continue\n+        \n+        # check python & pip exist for this configuration\n+        assert os.path.exists(os.path.join(config.path, 'python.exe'))\n+        assert os.path.exists(os.path.join(config.path, 'Scripts', 'pip.exe'))\n \n         # setup dirs\n         if os.path.exists(built_wheel_dir):\n", "issue": "Windows wheels are not built for python 3.7\nOn Linux wheels are correctly built for all supported python versions. Windows however stops at python 3.6.\r\n\r\nLooking at windows.py there seem to be no references to python 3.7\n", "before_files": [{"content": "from __future__ import print_function\nimport os, tempfile, subprocess, sys, shutil\ntry:\n    from urllib2 import urlopen\nexcept ImportError:\n    from urllib.request import urlopen\nfrom collections import namedtuple\nfrom glob import glob\n\nfrom .util import prepare_command, get_build_verbosity_extra_flags, Unbuffered\n\n\ndef build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment):\n    # Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print'\n    sys.stdout.flush()\n    sys.stdout = Unbuffered(sys.stdout)\n\n    # run_with_env is a cmd file that sets the right environment variables to\n    run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')\n    if not os.path.exists(run_with_env):\n        with open(run_with_env, 'wb') as f:\n            request = urlopen('https://github.com/ogrisel/python-appveyor-demo/raw/09a1c8672e5015a74d8f69d07add6ee803c176ec/appveyor/run_with_env.cmd')\n            f.write(request.read())\n\n    def shell(args, env=None, cwd=None):\n        # print the command executing for the logs\n        print('+ ' + ' '.join(args))\n        args = ['cmd', '/E:ON', '/V:ON', '/C', run_with_env] + args\n        return subprocess.check_call(' '.join(args), env=env, cwd=cwd)\n\n    PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier', 'path'])\n    python_configurations = [\n        PythonConfiguration(version='2.7.x', arch=\"32\", identifier='cp27-win32', path='C:\\Python27'),\n        PythonConfiguration(version='2.7.x', arch=\"64\", identifier='cp27-win_amd64', path='C:\\Python27-x64'),\n        PythonConfiguration(version='3.3.x', arch=\"32\", identifier='cp33-win32', path='C:\\Python33'),\n        PythonConfiguration(version='3.3.x', arch=\"64\", identifier='cp33-win_amd64', path='C:\\Python33-x64'),\n        PythonConfiguration(version='3.4.x', arch=\"32\", identifier='cp34-win32', path='C:\\Python34'),\n        PythonConfiguration(version='3.4.x', arch=\"64\", identifier='cp34-win_amd64', path='C:\\Python34-x64'),\n        PythonConfiguration(version='3.5.x', arch=\"32\", identifier='cp35-win32', path='C:\\Python35'),\n        PythonConfiguration(version='3.5.x', arch=\"64\", identifier='cp35-win_amd64', path='C:\\Python35-x64'),\n        PythonConfiguration(version='3.6.x', arch=\"32\", identifier='cp36-win32', path='C:\\Python36'),\n        PythonConfiguration(version='3.6.x', arch=\"64\", identifier='cp36-win_amd64', path='C:\\Python36-x64'),\n    ]\n\n    abs_project_dir = os.path.abspath(project_dir)\n    temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')\n    built_wheel_dir = os.path.join(temp_dir, 'built_wheel')\n\n    for config in python_configurations:\n        if skip(config.identifier):\n            print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)\n            continue\n\n        # setup dirs\n        if os.path.exists(built_wheel_dir):\n            shutil.rmtree(built_wheel_dir)\n        os.makedirs(built_wheel_dir)\n\n        env = os.environ.copy()\n        # set up environment variables for run_with_env\n        env['PYTHON_VERSION'] = config.version\n        env['PYTHON_ARCH'] = config.arch\n        env['PATH'] = os.pathsep.join([\n            config.path,\n            os.path.join(config.path, 'Scripts'),\n            env['PATH']\n        ])\n        env = environment.as_dictionary(prev_environment=env)\n\n        # for the logs - check we're running the right version of python\n        shell(['python', '--version'], env=env)\n        shell(['python', '-c', '\"import struct; print(struct.calcsize(\\'P\\') * 8)\\\"'], env=env)\n\n        # prepare the Python environment\n        shell(['python', '-m', 'pip', 'install', '--upgrade', 'pip'],\n              env=env)\n        shell(['pip', 'install', '--upgrade', 'setuptools'], env=env)\n        shell(['pip', 'install', 'wheel'], env=env)\n\n        # run the before_build command\n        if before_build:\n            before_build_prepared = prepare_command(before_build, project=abs_project_dir)\n            shell([before_build_prepared], env=env)\n\n        # build the wheel\n        shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)\n        built_wheel = glob(built_wheel_dir+'/*.whl')[0]\n\n        # install the wheel\n        shell(['pip', 'install', built_wheel], env=env)\n\n        # test the wheel\n        if test_requires:\n            shell(['pip', 'install'] + test_requires, env=env)\n        if test_command:\n            # run the tests from c:\\, with an absolute path in the command\n            # (this ensures that Python runs the tests against the installed wheel\n            # and not the repo code)\n            test_command_prepared = prepare_command(test_command, project=abs_project_dir)\n            shell([test_command_prepared], cwd='c:\\\\', env=env)\n\n        # we're all done here; move it to output\n        shutil.move(built_wheel, output_dir)\n", "path": "cibuildwheel/windows.py"}], "after_files": [{"content": "from __future__ import print_function\nimport os, tempfile, subprocess, sys, shutil\ntry:\n    from urllib2 import urlopen\nexcept ImportError:\n    from urllib.request import urlopen\nfrom collections import namedtuple\nfrom glob import glob\n\nfrom .util import prepare_command, get_build_verbosity_extra_flags, Unbuffered\n\n\ndef build(project_dir, package_name, output_dir, test_command, test_requires, before_build, build_verbosity, skip, environment):\n    # Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print'\n    sys.stdout.flush()\n    sys.stdout = Unbuffered(sys.stdout)\n\n    # run_with_env is a cmd file that sets the right environment variables to\n    run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')\n    if not os.path.exists(run_with_env):\n        with open(run_with_env, 'wb') as f:\n            request = urlopen('https://github.com/ogrisel/python-appveyor-demo/raw/09a1c8672e5015a74d8f69d07add6ee803c176ec/appveyor/run_with_env.cmd')\n            f.write(request.read())\n\n    def shell(args, env=None, cwd=None):\n        # print the command executing for the logs\n        print('+ ' + ' '.join(args))\n        args = ['cmd', '/E:ON', '/V:ON', '/C', run_with_env] + args\n        return subprocess.check_call(' '.join(args), env=env, cwd=cwd)\n\n    PythonConfiguration = namedtuple('PythonConfiguration', ['version', 'arch', 'identifier', 'path'])\n    python_configurations = [\n        PythonConfiguration(version='2.7.x', arch=\"32\", identifier='cp27-win32', path='C:\\Python27'),\n        PythonConfiguration(version='2.7.x', arch=\"64\", identifier='cp27-win_amd64', path='C:\\Python27-x64'),\n        PythonConfiguration(version='3.3.x', arch=\"32\", identifier='cp33-win32', path='C:\\Python33'),\n        PythonConfiguration(version='3.3.x', arch=\"64\", identifier='cp33-win_amd64', path='C:\\Python33-x64'),\n        PythonConfiguration(version='3.4.x', arch=\"32\", identifier='cp34-win32', path='C:\\Python34'),\n        PythonConfiguration(version='3.4.x', arch=\"64\", identifier='cp34-win_amd64', path='C:\\Python34-x64'),\n        PythonConfiguration(version='3.5.x', arch=\"32\", identifier='cp35-win32', path='C:\\Python35'),\n        PythonConfiguration(version='3.5.x', arch=\"64\", identifier='cp35-win_amd64', path='C:\\Python35-x64'),\n        PythonConfiguration(version='3.6.x', arch=\"32\", identifier='cp36-win32', path='C:\\Python36'),\n        PythonConfiguration(version='3.6.x', arch=\"64\", identifier='cp36-win_amd64', path='C:\\Python36-x64'),\n        PythonConfiguration(version='3.7.x', arch=\"32\", identifier='cp37-win32', path='C:\\Python37'),\n        PythonConfiguration(version='3.7.x', arch=\"64\", identifier='cp37-win_amd64', path='C:\\Python37-x64'),\n    ]\n\n    abs_project_dir = os.path.abspath(project_dir)\n    temp_dir = tempfile.mkdtemp(prefix='cibuildwheel')\n    built_wheel_dir = os.path.join(temp_dir, 'built_wheel')\n\n    for config in python_configurations:\n        if skip(config.identifier):\n            print('cibuildwheel: Skipping build %s' % config.identifier, file=sys.stderr)\n            continue\n        \n        # check python & pip exist for this configuration\n        assert os.path.exists(os.path.join(config.path, 'python.exe'))\n        assert os.path.exists(os.path.join(config.path, 'Scripts', 'pip.exe'))\n\n        # setup dirs\n        if os.path.exists(built_wheel_dir):\n            shutil.rmtree(built_wheel_dir)\n        os.makedirs(built_wheel_dir)\n\n        env = os.environ.copy()\n        # set up environment variables for run_with_env\n        env['PYTHON_VERSION'] = config.version\n        env['PYTHON_ARCH'] = config.arch\n        env['PATH'] = os.pathsep.join([\n            config.path,\n            os.path.join(config.path, 'Scripts'),\n            env['PATH']\n        ])\n        env = environment.as_dictionary(prev_environment=env)\n\n        # for the logs - check we're running the right version of python\n        shell(['python', '--version'], env=env)\n        shell(['python', '-c', '\"import struct; print(struct.calcsize(\\'P\\') * 8)\\\"'], env=env)\n\n        # prepare the Python environment\n        shell(['python', '-m', 'pip', 'install', '--upgrade', 'pip'],\n              env=env)\n        shell(['pip', 'install', '--upgrade', 'setuptools'], env=env)\n        shell(['pip', 'install', 'wheel'], env=env)\n\n        # run the before_build command\n        if before_build:\n            before_build_prepared = prepare_command(before_build, project=abs_project_dir)\n            shell([before_build_prepared], env=env)\n\n        # build the wheel\n        shell(['pip', 'wheel', abs_project_dir, '-w', built_wheel_dir, '--no-deps'] + get_build_verbosity_extra_flags(build_verbosity), env=env)\n        built_wheel = glob(built_wheel_dir+'/*.whl')[0]\n\n        # install the wheel\n        shell(['pip', 'install', built_wheel], env=env)\n\n        # test the wheel\n        if test_requires:\n            shell(['pip', 'install'] + test_requires, env=env)\n        if test_command:\n            # run the tests from c:\\, with an absolute path in the command\n            # (this ensures that Python runs the tests against the installed wheel\n            # and not the repo code)\n            test_command_prepared = prepare_command(test_command, project=abs_project_dir)\n            shell([test_command_prepared], cwd='c:\\\\', env=env)\n\n        # we're all done here; move it to output\n        shutil.move(built_wheel, output_dir)\n", "path": "cibuildwheel/windows.py"}]}