Cython-无法打开包含文件:'io.h':没有这样的文件或目录

use*_*934 30 python cython

刚开始学习cython.我试图编译一个简单的.pyx文件.

print("hello")
Run Code Online (Sandbox Code Playgroud)

这是我的setup.py:

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

setup(
    ext_modules = cythonize("hello.pyx")
)
Run Code Online (Sandbox Code Playgroud)

然后我运行命令.

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

错误如下.我一直在谷歌搜索它,没有任何帮助来找我.

    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
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个错误吗?

我安装了Anaconda3 4.1.1,Python 3.5和Visual Studio Express 2015.

真的很令人沮丧......

Cal*_*son 25

如果有人发现这个线程,并且正在寻找比重新安装VS和/或Anaconda更快的解决方案 - 我通过定义指向io.h的位置的环境变量INCLUDE能够通过同样的错误- 允许VS编译器找到标题.

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

  • @Atnas你应该能够在提示符中使用`SET`命令.或者,如果您希望它保持不变,您可以通过此PC /我的电脑 - >高级设置 - >环境变量进行设置,并创建一个新的系统范围变量. (2认同)

小智 21

下载visual studio构建工具并安装

  1. Visual C++ Build工具的核心功能.
  2. VC++ 2017 v141工具集(x86,x64)
  3. Visual C++ 2017可再发行组件更新
  4. 用于Desktop C++的Windows 10 SDK(10.0.16299.0)

在此输入图像描述

  • 2.6GB 一个头文件..真是一团糟! (9认同)
  • 这样做对我来说!特别是Windows 10 SDK for Desktop C++是关键. (8认同)
  • 没有帮助我。仍然“无法打开包含文件:'io.h':没有这样的文件或目录” (5认同)
  • 如果您使用的是 Windows 7,则还需要选择“Windows 10 SDK”选项。 (4认同)
  • 如果您使用的是Windows Server 2016,则将需要Windows 10 SDK(10.0.15063.0)用于桌面C ++ [x86和x64]。 (2认同)
  • 2019 年 12 月的官方 MS 链接:https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019 (2认同)
  • 就我而言,只需要 Windows 10 SDK。此外,如果您有 Visual Studio 2022,则无需下载 VS Build Tools,因为您可以使用“Visual Studio Installer”(位于 VS2022 开始菜单文件夹中)来实现相同目的。 (2认同)

小智 11

微软不再努力使控制台开发步骤显而易见.Visual Studio早已与一些批处理文件打包在一起以建立环境变量.在VS2015/2017中选择C++ CLI开发选项时,会在开始菜单中添加一个或多个快捷方式来执行这些批处理文件.

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

C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\vcvarsall.bat
Run Code Online (Sandbox Code Playgroud)

具有特定参数.

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

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat
Run Code Online (Sandbox Code Playgroud)

要么

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat
Run Code Online (Sandbox Code Playgroud)

有一点要记住Python/Ruby/etc,脚本通常需要将执行shell提升为管理员角色才能安装包.如果在非管理员shell中执行批处理文件,并且程序包安装需要提升,则会生成一个不具有环境变量的子shell.因此,您应该在调用包管理器或脚本之前在管理员shell中运行批处理文件.


Tom*_*dor 9

我偶然发现了同样的问题 - 与你的配置非常相似(唯一不同的是:VS 2015 Pro).几个星期后,只需要从其他人那里下载轮子(例如http://www.lfd.uci.edu/~gohlke/pythonlibs/),我终于找到了适合我的解决方案.

有两个问题.问题1 - 您需要使用"开发人员命令提示符" - 有时在"开始"菜单中有这样的程序,然后您只需使用它.

(BTW,对于其他人:Python 3.5需要VS2015,而不是任何其他版本.社区版可以)

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

"%VS140COMNTOOLS%vsvars32.bat"
Run Code Online (Sandbox Code Playgroud)

甚至:

where cl >nul 2>nul || "%VS140COMNTOOLS%vsvars32.bat"
Run Code Online (Sandbox Code Playgroud)

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

(如果你没有%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
Run Code Online (Sandbox Code Playgroud)

(如您编辑的答案)

所以现在运行:

set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
Run Code Online (Sandbox Code Playgroud)

好的,现在你会得到错误:

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这次没有错误:

> 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
(...)
Run Code Online (Sandbox Code Playgroud)

TL; DR - 整个事情:

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
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案正是我所寻找的。我花了很长时间尝试使用许多不同的解决方案来解决这个问题。如果您在运行“%VS140COMNTOOLS%vsvars32.bat”时遇到问题,并显示错误“无法确定 VS Common Tools 文件夹的位置。”,很可能您使用的是公司的笔记本电脑,并且您已限制访问,您可以通过尝试“reg query 1”进行验证,如果它显示“您的管理员已禁用注册表编辑。”,那么这就是问题所在 (2认同)

Amr*_*raf 9

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


小智 6

可以通过添加包含目录和库目录来解决,如下所示:

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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

如果那时您现在遇到问题:链接错误可以使用 rc.exe 运行;您还需要将 rc.exe 和 rc.dll (x64) 复制到与运行相同的目录link.exe

  • 不明白为什么这个答案如此被低估,只有这样才能巧妙地解决这个问题。非常感谢!! (2认同)

Riv*_*lus 6

这是因为 Cython 需要 Windows SDK 提供的库。要解决此问题,请执行以下操作:

  1. 安装 Visual Studio 2019 的构建工具。从这里下载。 Visual Studio 2019 下载页面的构建工具
  2. 运行 VS 构建工具安装文件 (vs_buildtools.exe)。选择:
    • MSVC 构建工具(MSVC v142 - VS 2019 C++ x64/x86 构建工具)
    • 视窗 10 SDK 用于 Visual Studio 2019 安装的构建工具
  3. 安装 VS Build Tools,它将需要大约 3 GB 的空间。
  4. 从“开始”菜单,运行 VS 2019 的开发人员命令提示符。 VS 2019 的开发人员命令提示符
  5. 转到您的 Cython 开发目录,然后运行: python setup.py build_ext --inplace

希望这能解决您的问题。


rwo*_*lst 5

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

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>
Run Code Online (Sandbox Code Playgroud)

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

find /c/Program\ Files\ \(x86\)/ -name <name_of_error_causing_file>
Run Code Online (Sandbox Code Playgroud)