打包pyd时找不到io.h文件的解决办法

最近想要将写好的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的版本随意,记住自己下载的是哪个版本就好。

下载完成后,我将 SDK路径添加到了系统环境变量之中,但运行之后还是报错,且报错没有一点变化。

我猜测是文件仍然无法通过系统环境变量找到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”

同样的手动添加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

此时报错:

LINK : fatal error LNK1158: 无法运行“rc.exe”

原因是link.exe文件无法找到rc.exe和rcdll.dll文件

解决方法:

  1. 找到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文件

成功!但这种方法缺点是每次运行之前都要输入代码,如果有人知道更好的方法请私信我。

三:总结

  1. 在VS 2019中下载MSVC x64/x86生成工具与SDK,记好版本方便寻找寻找路径

  1. 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\;

  1. 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

  1. 找到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

  1. 测试

四:最近的发现

重装系统,成功解决(笑)

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值