python windows编译问题总结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
本文主要介绍python windows编译过程中可能遇到的一些代表性问题并将在今后开发过程中不断更新和补充。这里主要针对Windows系统而且通常也是Windows系统出现问题的情况居多。运气好的时候编译能一次就过但往往还是会有一些异常情况。
python编译主要应用在以下场景
1python库安装。
2py文件转pyd。
3……
这里以py转pyd为例。
python setup.py build_ext
1 辅助工具
1.1 Everything
可以快速搜索电脑中的问题基本一秒之内就可以找到。官方下载链接为voidtools
1.2 Microsoft Visual Studio
由于编译工具经常需要依赖C++所以需要下载Microsoft Visual Studio环境并且在Visual Studio Installer界面选择“使用C++的桌面开发”确保安装了至少一个版本的Windows 10 SDK如下图所示。
2 常见错误
2.1 pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory
pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
这是因为系统无法找到io.h文件这个文件一般位于 C:\Program Files (x86)\Windows Kits\10\Include\SDK版本\ucrt文件夹下。如果没有对应的SDK版本文件夹那么回到1.2节采用isual Studio Installer安装Windows 10 SDK。
对于出现xxx.h无法找到的情况我们需要创建或更新INCLUDE环境变量增加xxx.h所在文件夹路径。例如针对本节问题在环境变量中创建INCLUDE如果已存在则无需创建新增路径“C:\Program Files (x86)\Windows Kits\10\Include\SDK版本\ucrt”。环境变量多个值之间用英文分号“;”隔开。
修改完成之后重新启动编译窗口再次编译。如果仍然出现错误可继续查看出现接下来章节所述错误。
2.2 pyconfig.h(203): fatal error C1083: 无法打开包括文件: “basetsd.h”: No such file or directory
pyconfig.h(203): fatal error C1083: 无法打开包括文件: “basetsd.h”: No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
对于出现xxx.h无法找到的情况我们需要创建或更新INCLUDE环境变量增加xxx.h所在文件夹路径。我们用1.1节中Everything工具搜索basetsd.h发现其存在于文件夹“C:\Program Files (x86)\Windows Kits\10\Include\SDK版本\shared”。如果没有对应的SDK版本文件夹那么回到1.2节采用isual Studio Installer安装Windows 10 SDK。
对于出现xxx.h无法找到的情况我们需要创建或更新INCLUDE环境变量增加xxx.h所在文件夹路径。例如针对本节问题在环境变量中创建INCLUDE如果已存在则无需创建新增路径“C:\Program Files (x86)\Windows Kits\10\Include\SDK版本\shared”。环境变量多个值之间用英文分号“;”隔开。
修改完成之后重新启动编译窗口再次编译。如果仍然出现错误可继续查看出现接下来章节所述错误。
2.3 LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\link.exe' failed with exit code 1104
出现该错误表示编译环境没有找到“kernel32.lib”。 对于出现xxx.lib无法找到的情况我们需要创建或更新LIB环境变量增加xxx.lib所在文件夹路径。我们用1.1节中Everything工具搜索kernel32.lib发现其存在于文件夹“C:\Program Files (x86)\Windows Kits\10\Lib\SDK版本\um\x64”也可以是x64、x86、arm、arm64根据需要进行选择。如果没有对应的SDK版本文件夹那么回到1.2节采用isual Studio Installer安装Windows 10 SDK。
修改完成之后重新启动编译窗口再次编译。如果仍然出现错误可继续查看出现接下来章节所述错误。
2.4 LINK : fatal error LNK1104: 无法打开文件“ucrt.lib”
LINK : fatal error LNK1104: 无法打开文件“ucrt.lib”
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\link.exe' failed with exit code 1104
出现该错误表示编译环境没有找到“ucrt.lib”。 对于出现xxx.lib无法找到的情况我们需要创建或更新LIB环境变量增加xxx.lib所在文件夹路径。我们用1.1节中Everything工具搜索ucrt.lib发现其存在于文件夹“C:\Program Files (x86)\Windows Kits\10\Lib\SDK版本\ucrt\x64”也可以是x64、x86、arm、arm64根据需要进行选择。如果没有对应的SDK版本文件夹那么回到1.2节采用isual Studio Installer安装Windows 10 SDK。
修改完成之后重新启动编译窗口再次编译。如果仍然出现错误可继续查看出现接下来章节所述错误。
2.5 LINK : fatal error LNK1158: 无法运行“rc.exe”
LINK : fatal error LNK1158: 无法运行“rc.exe”
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\link.exe' failed with exit code 1158
出现该错误表示编译环境没有找到“rc.exe”。 对于出现xxx.exe无法找到的情况我们需要更新Path环境变量增加xxx.exe所在文件夹路径。我们用1.1节中Everything工具搜索rc.exe发现其存在于文件夹“C:\Program Files (x86)\Windows Kits\10\bin\SDK版本\x64”也可以是x64、x86、arm、arm64根据需要进行选择。如果没有对应的SDK版本文件夹那么回到1.2节采用isual Studio Installer安装Windows 10 SDK。
修改完成之后重新启动编译窗口再次编译。如果仍然出现错误可继续查看出现接下来章节所述错误。
3 注意事项
修改环境后重新编译时切记要重启编译窗口例如cmd或C++编译窗口。否则编译会一直提示修改之前的错误。
环境变量多个值之间用英文分号“;”隔开。