Cannot open include file: 'io.h': No such file or directory
Solution 1
You need windows 10 SDK, Download visual studio build tools and install
- Visual C++ Build tools core features.
- MSVC toolset C++ 2019 v142 (x86,x64)
- Visual C++ 2019 Redistributable Update
- Windows 10 SDK (10.0.17763.0) for Desktop C++
Solution 2
In case anyone finds this thread and is looking for a quicker solution than reinstalling VS and/or Anaconda - I was able to get past this same error by defining the environment variable INCLUDE pointing to the location of io.h - allowing the VS compiler to locate the header.
In my setup, using VS2015, the change to using the Universal CRT means the location of io.h is C:\Program Files (x86)\Windows Kits\10\Include\<version>\ucrt
.
For different versions/environments the location of io.h may differ.
Solution 3
I stumbled upon the same problem - with very similar configuration to yours (only difference: VS 2015 Pro). After a few weeks on just having to download wheels from other people (e.g. http://www.lfd.uci.edu/~gohlke/pythonlibs/) I finally found a solution which works for me.
There are 2 problems. Problem 1 - you need to use "Developer Command Prompt" - sometimes there is such a program in Start Menu, then you just use it.
(BTW, for others: Python 3.5 needs VS2015, not any other version. Community edition is OK)
If not, you can use the following snippet (in command line):
"%VS140COMNTOOLS%vsvars32.bat"
or even:
where cl >nul 2>nul || "%VS140COMNTOOLS%vsvars32.bat"
(i have it in a batch file to run my build environment)
(If you dont have the %VS140COMNTOOLS%
variable, then maybe you just installed the VS and you need e.g. to restart, so that new environment variables become visible).
Now you will get the error:
c:\program files\anaconda3\include\pyconfig.h(68): fatal error C1083: Cannot open include file: 'io.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
(as in your edited answer)
So now run:
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
OK, now you will get the error:
LINK : fatal error LNK1104: cannot open file 'ucrt.lib'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1104
What now? You need to add library dirs:
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64
No errors this time:
> dir
05/16/2017 11:33 AM 69,240 hello.c
05/16/2017 11:47 AM 15,872 hello.cp35-win_amd64.pyd
05/16/2017 11:32 AM 17 hello.pyx
(...)
TL;DR - the whole thing:
where cl >nul 2>nul || "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" amd64
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64
python setup.py build_ext --inplace
Solution 4
Microsoft doesn't make any effort to make console development steps obvious anymore. Visual Studio has long been packaged with some batch files to establish environment variables. When the C++ CLI development options are selected in VS2015/2017, there are one or more shortcuts added to the start menu to execute these batch files.
For VS 2017 the various batch files all call:
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\vcvarsall.bat
with specific parameters.
Rather than setting a System or User Environment Variable, it would be better to call the specific batch file to meet your build needs.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat
or
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat
One thing to bear in mind with Python/Ruby/etc, scripts will often need to elevate the execution shell to Administrator role in order to install packages. If you execute the batch file in a non-Administrator shell, and the package installation requires elevation it will spawn a subshell which will not have the environment variables. Therefore, you should run the batch file in an Administrator shell before calling the package manager or script.
Solution 5
This is because Cython require libraries provided by Windows SDK. To fix this, do the following:
- Install Build Tools for Visual Studio 2019. Download from here.
- Run VS Build Tools setup files (vs_buildtools.exe). Choose:
- Install VS Build Tools, it will require around 3 GB of space.
- From Start Menu, run Developer Command Prompt for VS 2019.
- Go to your Cython development directory and then run:
python setup.py build_ext --inplace
Hopefully this will fix your problem.
Related videos on Youtube

user2869934
Updated on July 05, 2022Comments
-
user2869934 4 months
I was trying to compile a simple .pyx file using Cython.
print("hello")
Here's my setup.py:
from distutils.core import setup from Cython.Build import cythonize setup( ext_modules = cythonize("hello.pyx") )
Then I run the command.
python setup.py build_ext --inplace
The error is shown below. I've struggled on googling it but found nothing helpful.
running build_ext building 'hello' extension C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\Jackie\AppData\Local\Continuum\Anaconda3\include -IC:\Users\Jackie\AppData\Local\Continuum\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\wdf\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\winrt" /Tchello.c /Fobuild\temp.win32-3.5\Release\hello.obj hello.c c:\users\jackie\appdata\local\continuum\anaconda3\include\pyconfig.h(68): fatal error C1083: Cannot open include file: 'io.h': No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\cl.exe' failed with exit status 2
Can someone help me to resolve the error, please?
I have Anaconda3 4.1.1, Python 3.5, and Visual Studio Express 2015 installed.
-
Atnas almost 5 yearsCould you clarify where you change this path? I'm using the "Visual C++ 2015 MSBuild Command Prompt"
-
Calum Atkinson almost 5 years@Atnas You should be able to use the
SET
command from within the prompt. Alternatively, if you want it to persist, you can set it via This PC/My Computer -> Advanced Settings -> Environment Variables and creating a new system wide variable. -
Nathan over 4 yearsThis did it for me! In particular the Windows 10 SDK for Desktop C++ was the key.
-
testworks over 4 yearsIf you are using Windows Server 2016, you will need
Windows 10 SDK (10.0.15063.0) for Desktop C++ [x86 and x64]
instead. -
simonzack about 3 yearsIf you are on Windows 7, you will also need the "Windows 10 SDK" option selected.
-
Guoyang Qin almost 3 yearsThe link is dead, try this instead: Build Tools for Visual Studio 2019
-
Mike 'Pomax' Kamermans almost 3 yearsofficial MS links in December 2019: visualstudio.microsoft.com/downloads/…
-
mayaaa almost 3 yearsi am in python and try to install fancy impute using pip install but i get the following error (Cannot open include file: 'io.h'). i am try to download windows SDK and add path to environmental variables but aslo failed
-
mayaaa almost 3 yearshow can i fix it? i think it is the same error here
-
Dmitry almost 3 yearsDid not help me. Still "Cannot open include file: 'io.h': No such file or directory"
-
Dmitry almost 3 yearscant get why this answer so undervalued, only this brilliantly solve this trouble. thanks you so much!!
-
Ege over 2 yearsDid you restart your system ? @Dmitry
-
dancingkitteh over 2 yearsWhere exactly are we supposed to do this? I am using git bash and I'm not able to pip install some libraries.
-
dancingkitteh over 2 yearsReally really wish someone would answer this.
-
richardev about 2 yearsYou could just comment under his solution. This is more of a dublicate.
-
sin about 2 yearsI wanted to, but it seems that I must have 50 reputations to be able to comment on his answer, and I don't have that many.
-
Abdollah about 2 yearsThis answer is a bit outdated. I solved this problem like this answer: stackoverflow.com/a/56811119/3955129
-
vasudha Anantharam about 2 yearsThis worked for me. Hope it works for others as well.
-
S2673 about 2 yearsThis worked for me but then I got an errror:
cannot open include file: ‘Ws2_32.lib’
Does anyone know how to fix this? -
Stefan almost 2 yearsI needed more. I run Visual Studio Installer -> Visual Studio Build Tools 2019. It preselected: C++ BUILD TOOLS C++ Build Tools core features C++ 2019 Redistributable Update C++ core desktop features OPTIONAL MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.28) Windows 10 SDK (10.0.18362.0) C++ CMake tools for Windows Testing tools core features - Build Tools C++ AddressSanitizer (Experimental) MSVC v140 - VS 2015 C++ build tools (v14.00) INDIVIDUAL COMPONENTS Windows Universal CRT SDK MSVC v140 - VS 2015 C++ build tools (v14.00)
-
Caranown over 1 yearAll I needed was
Visual Studio 2015, 2017 and 2019
redistributable -
De Gninou over 1 yearYour solution saved me!
-
rosch about 1 year2.6GB for a header file..what a mess!
-
Redoman 9 monthsIn my case only Windows 10 SDK was necessary. Also if you have Visual Studio 2022 no need to download VS Build Tools, as you can use for the same purpose
Visual Studio Installer
(located in VS2022 start menu folder).