Python – Error compiling Cython file

Error compiling Cython file… here is a solution to the problem.

Error compiling Cython file

I want to compile my Cython file on Windows 7

python mySetup.py build_ext --inplace

But there is an error

running build_ext
building ‘sumrange_Cython’ extension
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\bin\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\Artem\AppData\Local\Programs\Python\Python36-32\include -IC: \Users\Artem\AppData\Local\Programs\Python\Python36-32\include /Tcsumrange_Cython.c /Fobuild\temp.win32-3.6\Release\sumrange_Cython.obj
sumrange_Cython.c
c:\users\Artem\appdata\local\programs\python\python36-32\include\pyconfig.h(59): fatal error C1083: Cannot open include file: ‘io.h’: No such file or directory
error: command C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\bin\cl.exe’ failed with exit status 2

The problem seems to be with the path of the compiler. I launched the utility located at “C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\”

vcvarsall x86

In order to set the path, but it also failed with an error

Error in script usage. The correct usage is:
vcvarsall [option] or
vcvarsall [option] store or
vcvarsall [option] [version number] or
vcvarsall [option] store [version number] where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm where
[version number] is either the full Windows 10 SDK version number or
“8.1” to use the windows 8.1 SDK : The store parameter sets
environment variables to support store (rather than desktop)
development. : For example:
vcvarsall x86_amd64
vcvarsall x86_arm store
vcvarsall x86_amd64 10.0.10240.0
vcvarsall x86_arm store 10.0.10240.0
vcvarsall x64 8.1
vcvarsall x64 store 8.1 : Please make sure either Visual Studio or C++ Build SKU is installed.

Others have asked this question but still have no answer
python pip on Windows – command ‘ cl.exe’ failed

Another way to solve the problem might be to define a path to another compiler instead of Visual C++ when calling python. But I don’t know how to do it.

Solution

Update: Check out this blog post for a great walkthrough: https://andysalerno.com/Compiling-Python
https://github.com/andysalerno/old_site_content/blob/master/Compiling-Python.html

I’m not sure why, but the path doesn’t seem to be updated. This may be a Visual Studio 2017 preview feature.

cl.exe is located in C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Tools\MSVC\14.10.25017\bin{host}{architecture}\

Try running your command from the Developer Command Prompt for Visual Studio 2017 Preview because it knows this path.

Edit:
If you receive an error message “fatal error LNK1112: module machine type ‘x64’ conflicts with target machine type ‘x86′”, you need to check:
https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx?f=255&MSPPError=-2147217396
vcvarsall.bat is quoted here: C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\VC\Auxiliary\Build

Related Problems and Solutions