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

时间:2016-10-13 10:25:36

标签: python cython

刚开始学习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。

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

16 个答案:

答案 0 :(得分:22)

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

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

答案 1 :(得分:19)

下载visual studio build tools并安装

  1. Visual C ++构建工具核心功能。
  2. VC ++ 2017 v141工具集(x86,x64)
  3. Visual C ++ 2017可再发行更新
  4. 用于Desktop C ++的Windows 10 SDK(10.0.16299.0)
  5. enter image description here

答案 2 :(得分:10)

微软不再努力使控制台开发步骤显而易见。 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 / etc的一件事,脚本通常需要将执行shell提升为管理员角色才能安装包。如果在非管理员shell中执行批处理文件,并且程序包安装需要提升,则会生成一个不具有环境变量的子shell。因此,您应该在调用包管理器或脚本之前在管理员shell中运行批处理文件。

答案 3 :(得分:7)

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

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

(BTW,对于其他人: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
(...)

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

答案 4 :(得分:3)

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

答案 5 :(得分:1)

我在尝试安装pyshark时收到了同样的错误,我通过在pip install pyshark中运行Developer Command Prompty for VS 2017并确保安装了VC ++工具来解决了这个问题。

答案 6 :(得分:1)

如果有人尝试在Git Bash中进行安装时遇到此错误(我想这对于使用Bash编译器在Windows上运行的任何Visual Studio 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>

答案 7 :(得分:1)

除了bob发布的列表中的项目外,安装Universal CRT SDK还可以解决我的问题,因此列表变为:

  1. Visual C ++构建工具的核心功能。
  2. VC ++ 2017 v141工具集(x86,x64)
  3. Visual C ++ 2017可再发行组件更新
  4. 用于桌面C ++的Windows 10 SDK(10.0.16299.0)
  5. Windows Universal CRT SDK

答案 8 :(得分:0)

在您的环境路径中添加Windows 10 SDK。

  

C:\ Program Files(x86)\ Windows Kits \ 10 \ Include \\ ucrt

  1. 应用更改。
  2. 打开具有管理员权限的新命令提示符。

该错误应消除。

答案 9 :(得分:0)

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

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

相同的目录中

答案 10 :(得分:0)

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

  1. 安装Visual Studio 2019的构建工具。从here下载。 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 Tools,大约需要3 GB的空间。
  4. 从“开始”菜单中,运行VS 2019的Developer Command Prompt。 Developer Command Prompt for VS 2019
  5. 转到您的Cython开发目录,然后运行:python setup.py build_ext --inplace

希望这可以解决您的问题。

答案 11 :(得分:0)

  1. 如果已在系统中安装任何其他“ Visual Studio生成工具”,则请卸载。
  2. 重新启动系统。
  3. 从以下URL
  4. 下载“ Visual Studio 2019的构建工具”并进行安装。 网址:https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019 EXE:vs_buildtools__559949468.1570880854.exe
  5. 重新启动系统。
  6. 以管理员模式打开CMD,然后尝试安装py软件包。对于我来说,在安装 pyahocorasick pyodbc 软件包等时遇到问题。
  7. 安装上述工具后,签入添加删除程序。 Screenshot of Add remove programs in Control Panel

答案 12 :(得分:0)

我通过在使用C ++进行的台式机开发中添加以下软件包来解决了该问题

enter image description here

enter image description here

答案 13 :(得分:0)

我试图在Windows 10和VS2017上移植并构建pycocotools,并遇到相同的错误:“找不到io.h”。

要弄清楚为什么找不到“ io.h”,终端输出可能会提示,即如何指定包含目录。就我而言,使用的是错误版本的Windows 10 SDK:

-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt

代替

-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt

没有C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt(但是有C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0)。

最后,在控制面板中,我删除了Windows Driver Kit 18362(通过VS2019安装,但后来又删除了VS2019,并且此18362并未完全卸载),并且解决了“找不到io.h”问题。


让我说得更清楚:

  • Windows SDK 10.0.17763.0通过VS2017引入
  • Windows SDK 10.0.18362.0通过VS2019引入 如果有多个版本的Windows SDK(甚至其目录不包含用于文件的ucrt文件夹),也会选择最新的版本,从而导致类似“ io.h not found”的错误。

答案 14 :(得分:0)

如果有人在安装openstack或任何其他需要python或pip的应用程序时遇到任何问题(或netifaces,oslo.utils,python-cinderclient,msgpack,oslo.serialization,python-novaclient,PyYAML ,pyperclip,colorama,pyreadline,attrs,wcwidth,cmd2,悬崖,pycparser,cffi,加密,装饰器,requestionsexceptions,jsonpointer,jsonpatch,munch,jmespath,dogpile.cache,appdirs,OpenStack SDK,rfc3986,oslo.config,python- keystoneclient,osc-lib),并且也使用 Visual Studio -请按照以下步骤操作:

  1. 安装python 3.8.5
  2. Pip是使用python自动安装的
  3. 重新启动系统(非常重要)
  4. 输入cmd以安装任何应用程序:示例:pip install python-openstackclient

答案 15 :(得分:0)

我在尝试安装pyhook 1.5.1时遇到了这个烦人的错误。 当我

  1. 安装Windows10 SDK(因为我正在使用Windows10)
  2. 在管理员模式下运行Visual Studio x64命令提示符。
  3. 洗个冷水。
  4. 最后我按Enter。

是的!而且有效。