无法打开包含文件:'io.h':没有那个文件或目录。

107

我尝试使用Cython编译一个简单的.pyx文件。

print("hello")

这是我的setup.py文件:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("hello.pyx")
)

然后我运行了这个命令。

python setup.py build_ext --inplace
错误信息如下。我在谷歌上找了很久,但没有找到有用的信息。
    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
请帮忙解决错误,谢谢。 我安装了Anaconda3 4.1.1、Python 3.5和Visual Studio Express 2015。

好的...在我卸载了所有与Microsoft和Python相关的软件并重新安装Anaconda和VS2015 Express之后,错误消失了。 然而,又出现了另一个错误... - user2869934
18个回答

158

更新

如果您已经安装了Visual Studio 2022,则无需下载VS Build Tools,因为您可以使用位于VS2022起始菜单文件夹中的Visual Studio Installer来完成相同的目的。

正如JfredoJ所指出的

您需要Windows 10 SDK, 下载Visual Studio Build Tools并安装以下组件:

  1. Visual C++ Build 工具核心功能。
  2. MSVC 工具集 C++ 2019 v142(x86、x64)
  3. Visual C++ 2019 可再发行组件更新
  4. Windows 10 SDK(10.0.17763.0)适用于桌面 C++

来自Rivalus的图片


45
这对我很有帮助!特别是Windows 10 SDK for Desktop C ++是关键。 - Nathan
4
如果您使用的是Windows 7操作系统,您还需要选择“Windows 10 SDK”选项。 - simonzack
2
2019年12月的官方微软链接:https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019 - Mike 'Pomax' Kamermans
7
没有帮助我,仍然出现“无法打开包括文件:'io.h':没有那个文件或目录”的错误。 - Dmitry
9
一个头文件要2.6GB大,真是一团糟! - rosch
显示剩余7条评论

31

如果有人遇到同样的问题,希望能找到比重装VS和/或Anaconda更快的解决方案 - 我成功通过定义环境变量INCLUDE并将其指向io.h所在的目录来解决了这个错误,这使得VS编译器可以定位到该头文件。

对于我的设置,使用VS2015,改用通用CRT意味着io.h的位置是C:\Program Files (x86)\Windows Kits\10\Include\<version>\ucrt。 对于不同的版本/环境,io.h的位置可能会有所不同。


你能澄清一下在哪里更改这个路径吗?我正在使用“Visual C++ 2015 MSBuild命令提示符”。 - Atnas
3
你可以在命令提示符中使用“SET”命令。或者,如果你想让它持久化,可以通过“此电脑/我的电脑” -> “高级系统设置” -> “环境变量”来创建一个新的系统范围变量。 - Calum Atkinson
这个对我有效,但是后来出现了一个错误:无法打开包含文件: ‘Ws2_32.lib’。有人知道如何解决吗? - S2673

22

我遇到了同样的问题 - 配置与你非常相似(唯一的区别:VS 2015专业版)。在几周的时间里,我只能从其他人那里下载wheels(例如http://www.lfd.uci.edu/~gohlke/pythonlibs/),最终我找到了一个适合我的解决方案。

有2个问题。问题1 - 您需要使用 "Developer Command Prompt" - 有时在“开始菜单”中可能会有这样的程序,然后您只需使用它。

(顺便提一句,对于其他人来说:Python 3.5需要VS2015,而不是其他任何版本。社区版可以)

如果没有,您可以使用以下代码段(在命令行中):

"%VS140COMNTOOLS%vsvars32.bat"

甚至更多:

where cl >nul 2>nul || "%VS140COMNTOOLS%vsvars32.bat"

(我将其放在批处理文件中以运行我的构建环境)

(如果你没有%VS140COMNTOOLS%变量,那么可能是因为你刚刚安装了VS,需要重新启动电脑,以使新的环境变量可见)。

现在你会收到以下错误:

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

那么现在运行:

set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt

好的,现在您将会收到错误信息:

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

现在怎么办?你需要添加库目录:

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

这次没有错误:

> 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
(...)

简而言之:全文内容如下:

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

1
这是在这里找到的:https://devtalk.nvidia.com/default/topic/969047/cuda-8-vs2015-corecrt-h-error/?offset=7 - PyCUDA 用户有相同的问题。 - Tomasz Gandor
2
这个解决方案正是我一直在寻找的。我已经尝试了很长时间,应用了许多不同的解决方案来解决这个问题。如果你在运行"%VS140COMNTOOLS%vsvars32.bat"时遇到错误,提示"无法确定VS公共工具文件夹的位置。",很可能是因为你正在使用公司的笔记本电脑并且受到限制,你可以通过尝试reg query 1来验证,如果它说"注册表编辑已被管理员禁用。",那么这就是问题所在。 - Felipe Araya Olea

14

微软不再努力使控制台开发步骤明显。Visual Studio长期以来一直搭载了一些批处理文件来建立环境变量。当在VS2015/2017中选择C++ CLI开发选项时,开始菜单会添加一个或多个快捷方式以执行这些批处理文件。

对于VS 2017,各种批处理文件都调用:

C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\vcvarsall.bat

使用特定参数。

与设置系统或用户环境变量不同,最好调用特定的批处理文件以满足您的构建需求。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat
或者
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat

需要记住的一点是,使用Python/Ruby等脚本时,通常需要将执行Shell提升为管理员角色以安装软件包。如果您在非管理员Shell中执行批处理文件,并且软件包安装需要提权,则它会生成一个子shell,该子shell将没有环境变量。因此,在调用软件包管理器或脚本之前,应在管理员Shell中运行批处理文件。


11
这是因为Cython需要Windows SDK提供的库。要解决此问题,请按照以下步骤操作:
  1. 安装Visual Studio 2019的构建工具。从这里下载。 Build Tools for Visual Studio 2019 download page
  2. 运行VS Build Tools设置文件(vs_buildtools.exe)。选择:
    • MSVC构建工具(MSVC v142 - VS 2019 C++ x64/x86构建工具)
    • Windows 10 SDK Build Tools for Visual Studio 2019 installation
  3. 安装VS Build工具,需要约3 GB的空间。
  4. 从开始菜单中,运行VS 2019的开发人员命令提示符。 Developer Command Prompt for VS 2019
  5. 进入您的Cython开发目录,然后运行:python setup.py build_ext --inplace
希望这能解决你的问题。

10

可以通过以下方式添加包含目录和库目录来解决:

set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt;E:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared;E:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\onecore\x64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64

set LIB=E:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\onecore\x64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64;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

如果您现在遇到一个问题:连接错误,无法运行 rc.exe; 您还需要将 rc.exe 和 rc.dll (x64) 复制到与运行 link.exe 相同的目录下。


2
不明白为什么这个答案被低估了,只有这个才能完美地解决这个问题。非常感谢你! - Dmitry

9

我曾经也遇到了同样的问题,通过安装Windows 10 SDK解决了该问题。


4

如果有人在尝试在 Git Bash 中安装时遇到此错误(我想这也适用于在使用 Visual Studio 编译器的 Windows 上运行的任何 Bash shell),则可以执行以下操作:

INCLUDE="C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/ucrt/;C:/Program Files (x86)/Windows Kits/10/Include/10.0.17763.0/shared/" \
> LIB="C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/ucrt/x64;C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x64" \
> PATH=$PATH:/c/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/10.0.17763.0/x64 \
> python -m pip install <package>

对于不同版本的WindowsVisual Studio,这些路径可能会略有不同。获取它们的最佳方法是,在抛出错误时搜索文件。

find /c/Program\ Files\ \(x86\)/ -name <name_of_error_causing_file>

我们应该在哪里进行这个操作? 我正在使用 git bash,但无法 pip 安装一些库。 - dancingkitteh
真的非常希望有人能回答这个问题。 - dancingkitteh

3
除了 bob 发布的列表中的项目,安装 Universal CRT SDK 也解决了我的问题,所以该列表变为:
  1. Visual C++ Build 工具核心功能。
  2. VC++ 2017 v141 工具集(x86,x64)
  3. Visual C++ 2017 可再发行组件更新版
  4. Windows 10 SDK(10.0.16299.0)用于桌面应用程序开发
  5. Windows 通用 CRT SDK

你可以在他的解决方案下面评论。这更像是一个重复的问题。 - richardev
4
我想留言,但似乎我必须拥有50个声望才能评论他的回答,而我没有那么多。 - sin
我需要更多的东西。我运行了Visual Studio Installer -> Visual Studio Build Tools 2019。它预选了以下内容: C++构建工具 C++构建工具核心功能 C++ 2019可再发行更新 C++桌面核心功能 可选项 MSVC v142 - VS 2019 C++ x64/x86构建工具(v14.28) Windows 10 SDK(10.0.18362.0) C++ CMake工具适用于Windows 测试工具核心功能-构建工具 C++ AddressSanitizer(实验性) MSVC v140 - VS 2015 C++构建工具(v14.00) 单独的组件 Windows通用CRT SDK MSVC v140 - VS 2015 C++构建工具(v14.00) - Stefan

2
我通过在使用C++进行桌面开发中添加以下软件包来解决了这个问题:

输入图像描述

输入图像描述


我正在使用Python尝试使用pip install安装fancy impute,但是我遇到了以下错误(无法打开包括文件:'io.h')。我尝试下载Windows SDK并将路径添加到环境变量中,但也失败了。 - mayaaa
我该如何修复它?我认为这里是同样的错误。 - mayaaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接