最近想要将写好的py文件通过cython加密成pyd,但在尝试的过程中我遇到了一个问题:fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory。
在经过两天的尝试之后终于发现了解决办法,在这里分享给大家。猜测是因为系统环境变量的设置出现了未知问题导致的。
一:参考文献
先贴出参考网站以表敬意:
1、Python .py生成.pyd文件并打包.exe注意事项
https://blog.csdn.net/weixin_45116696/article/details/104861915
2、Cannot open include file: 'io.h': No such file or directory
https://stackoverflow.com/questions/40018405/cannot-open-include-file-io-h-no-such-file-or-directory
二:解决方法
详细情况是这样的,我在anaconda中新建了一个虚拟环境,并效仿查考网站一中的例子加密一个py文件,但出现了一个报错。
C:\Users\DN\.conda\envs\daiTouMeng\include\pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory
虚拟环境中的pyconfig.h文件无法找到头文件io.h,于是我在VS 2019中下载了“MSVC v142 - VS 2019 C++ x64/x86生成工具”与”Windows 10 SDK(10.0.17763.0)“。SDK的版本随意,记住自己下载的是哪个版本就好。
![](https://img-blog.csdnimg.cn/img_convert/761ab2484196a52ab6601c683f34e5e6.png)
下载完成后,我将 SDK路径添加到了系统环境变量之中,但运行之后还是报错,且报错没有一点变化。
![](https://img-blog.csdnimg.cn/img_convert/8c1361220534b5a5adb9f0cc2bf05197.png)
我猜测是文件仍然无法通过系统环境变量找到io.h文件
于是我通过参考文献二中的方法,在运行环境中手动include :“ucrt”文件夹路径与”shared“文件夹路径:
我的路径为C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0,请大家根据自己的 SDK路径修改代码。
set 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\;
再次运行后,此时报错:
LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
![](https://img-blog.csdnimg.cn/img_convert/317501ea41af9c3d056c4236f9da31e0.png)
同样的手动添加lib路径
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
![](https://img-blog.csdnimg.cn/img_convert/7d84064e5bff4f878c9144b30f79b264.png)
![](https://img-blog.csdnimg.cn/img_convert/876a6372520eaf2f4ce57b290af0657c.png)
此时报错:
LINK : fatal error LNK1158: 无法运行“rc.exe”
原因是link.exe文件无法找到rc.exe和rcdll.dll文件
解决方法:
找到rc.exe和rcdll.dll文件,在你对应的SDK版本文件夹下
本人的目录:C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86
2.找到运行的link.exe文件所在目录
本人的目录:C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x64
3、将rc.exe和rcdll.dll文件直接复制到link.exe文件所在目录
再次运行python setup.py build_ext --inplace
代码无报错,成功生成main.cp37-win_amd64.pyd文件
![](https://img-blog.csdnimg.cn/img_convert/45c2af85f0cc146d06b5514e124dfc8d.png)
![](https://img-blog.csdnimg.cn/img_convert/23ddd5065c088ea9a59f9856bf899815.png)
成功!但这种方法缺点是每次运行之前都要输入代码,如果有人知道更好的方法请私信我。
三:总结
在VS 2019中下载MSVC x64/x86生成工具与SDK,记好版本方便寻找寻找路径
set 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\;
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
找到rc.exe和rcdll.dll文件并复制到link.exe文件所在目录。
本人的目录1:C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86;
本人的目录2:C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\bin\Hostx86\x64
测试
四:最近的发现
重装系统,成功解决(笑)