Cannot open include file: 'io.h': No such file or directory

116,682

Solution 1

You need windows 10 SDK, Download visual studio build tools and install

  1. Visual C++ Build tools core features.
  2. MSVC toolset C++ 2019 v142 (x86,x64)
  3. Visual C++ 2019 Redistributable Update
  4. Windows 10 SDK (10.0.17763.0) for Desktop C++

the image from Rivalus

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:

  1. Install Build Tools for Visual Studio 2019. Download from here. Build Tools for Visual Studio 2019 download page
  2. Run VS Build Tools setup files (vs_buildtools.exe). Choose:
    • MSVC build tools (MSVC v142 - VS 2019 C++ x64/x86 build tools)
    • Windows 10 SDK Build Tools for Visual Studio 2019 installation
  3. Install VS Build Tools, it will require around 3 GB of space.
  4. From Start Menu, run Developer Command Prompt for VS 2019. Developer Command Prompt for VS 2019
  5. Go to your Cython development directory and then run: python setup.py build_ext --inplace

Hopefully this will fix your problem.

Share:
116,682

Related videos on Youtube

user2869934
Author by

user2869934

Updated on July 05, 2022

Comments

  • user2869934
    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
    Atnas almost 5 years
    Could 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
    Nathan over 4 years
    This did it for me! In particular the Windows 10 SDK for Desktop C++ was the key.
  • testworks over 4 years
    If you are using Windows Server 2016, you will need Windows 10 SDK (10.0.15063.0) for Desktop C++ [x86 and x64] instead.
  • simonzack
    simonzack about 3 years
    If you are on Windows 7, you will also need the "Windows 10 SDK" option selected.
  • Guoyang Qin
    Guoyang Qin almost 3 years
    The link is dead, try this instead: Build Tools for Visual Studio 2019
  • Mike 'Pomax' Kamermans
    Mike 'Pomax' Kamermans almost 3 years
    official MS links in December 2019: visualstudio.microsoft.com/downloads/…
  • mayaaa almost 3 years
    i 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 years
    how can i fix it? i think it is the same error here
  • Dmitry almost 3 years
    Did not help me. Still "Cannot open include file: 'io.h': No such file or directory"
  • Dmitry almost 3 years
    cant get why this answer so undervalued, only this brilliantly solve this trouble. thanks you so much!!
  • Ege
    Ege over 2 years
    Did you restart your system ? @Dmitry
  • dancingkitteh over 2 years
    Where 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 years
    Really really wish someone would answer this.
  • richardev about 2 years
    You could just comment under his solution. This is more of a dublicate.
  • sin about 2 years
    I 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
    Abdollah about 2 years
    This answer is a bit outdated. I solved this problem like this answer: stackoverflow.com/a/56811119/3955129
  • vasudha Anantharam about 2 years
    This worked for me. Hope it works for others as well.
  • S2673 about 2 years
    This 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 years
    I 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 year
    All I needed was Visual Studio 2015, 2017 and 2019 redistributable
  • De Gninou
    De Gninou over 1 year
    Your solution saved me!
  • rosch
    rosch about 1 year
    2.6GB for a header file..what a mess!
  • Redoman
    Redoman 9 months
    In 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).

Related