为自由线程版Python 3.13t编译安装wxPython遇到的问题与求助
自由线程版Python 3.13t编译安装wxPython遇到的问题与求助
我想在自由线程版Python 3.13t上使用wxPython,但目前没有可用的wheel安装包,只能尝试从源码编译安装,过程中遇到了两个问题,其中第二个问题至今没有解决,在此向各位求助。
问题1:Pip源码编译时提示依赖缺失
已解决的方案:
手动安装了wheel, setuptools, six,还有wxPython源码压缩包中\requirements\install.txt和\dev.txt里列出的所有依赖包;我已经安装了Visual Studio 2019,所以不需要额外安装C++构建工具,这一步顺利解决。
问题2:核心库编译成功,但第一个扩展库(nano-svg)编译失败
问题现状:
核心库编译完成后,编译第一个扩展库nano-svg时Pip报错,目前没有找到可行的解决方案。错误根源似乎和Cython文件中的__pyx_vectorcallfunc相关,编译时的完整错误日志如下:
[1/1] Cythonizing wx/svg\_nanosvg.pyx running build_ext building 'wx.svg._nanosvg' extension creating build\wxsvg\temp.win-amd64-cpython-313t\Release\wx\svg "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DNANOSVG_IMPLEMENTATION=1 -DNANOSVGRAST_IMPLEMENTATION=1 -DNANOSVG_ALL_COLOR_KEYWORDS=1 -DPy_GIL_DISABLED=1 -Iext/nanosvg/src -ID:\Python\pyBuildTest\include "-IC:\Program Files\Python\include" "-IC:\Program Files\Python\Include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\Include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\Include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" /Tcwx/svg\_nanosvg.c /Fobuild/wxsvg\temp.win-amd64-cpython-313t\Release\wx\svg\_nanosvg.obj _nanosvg.c ext/nanosvg/src\nanosvg.h(1450): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(1458): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(1491): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(1770): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(1791): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(2553): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(2557): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(2561): warning C4244: '=': conversion from 'double' to 'float', possible loss of data ext/nanosvg/src\nanosvg.h(2565): warning C4244: '=': conversion from 'double' to 'float', possible loss of data wx/svg\_nanosvg.c(2455): error C2146: syntax error: missing ')' before identifier 'vc' wx/svg\_nanosvg.c(2455): error C2081: '__pyx_vectorcallfunc': name in formal parameter list illegal wx/svg\_nanosvg.c(2455): error C2061: syntax error: identifier 'vc' wx/svg\_nanosvg.c(2455): error C2059: syntax error: ';' wx/svg\_nanosvg.c(2455): error C2059: syntax error: ',' wx/svg\_nanosvg.c(2455): error C2059: syntax error: ')' wx/svg\_nanosvg.c(25912): error C2146: syntax error: missing ')' before identifier 'vc' wx/svg\_nanosvg.c(25912): error C2081: '__pyx_vectorcallfunc': name in formal parameter list illegal wx/svg\_nanosvg.c(25912): error C2061: syntax error: identifier 'vc' wx/svg\_nanosvg.c(25912): error C2059: syntax error: ';' wx/svg\_nanosvg.c(25912): error C2059: syntax error: ',' wx/svg\_nanosvg.c(25912): error C2059: syntax error: ')' wx/svg\_nanosvg.c(25957): error C2146: syntax error: missing ')' before identifier 'vc' wx/svg\_nanosvg.c(25957): error C2081: '__pyx_vectorcallfunc': name in formal parameter list illegal wx/svg\_nanosvg.c(25957): error C2061: syntax error: identifier 'vc' wx/svg\_nanosvg.c(25957): error C2059: syntax error: ';' wx/svg\_nanosvg.c(25957): error C2059: syntax error: ',' wx/svg\_nanosvg.c(25957): error C2059: syntax error: ')' wx/svg\_nanosvg.c(26646): error C2065: '__pyx_vectorcallfunc': undeclared identifier wx/svg\_nanosvg.c(26646): error C2146: syntax error: missing ';' before identifier 'vc' wx/svg\_nanosvg.c(26646): error C2065: 'vc': undeclared identifier wx/svg\_nanosvg.c(26646): warning C4047: '=': 'int' differs in levels of indirection from 'vectorcallfunc' wx/svg\_nanosvg.c(26647): error C2065: 'vc': undeclared identifier wx/svg\_nanosvg.c(26649): warning C4013: '__Pyx_PyVectorcall_FastCallDict' undefined; assuming extern returning int wx/svg\_nanosvg.c(26649): error C2065: 'vc': undeclared identifier wx/svg\_nanosvg.c(26649): warning C4047: 'return': 'PyObject *' differs in levels of indirection from 'int' error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX64\\x64\\cl.exe' failed with exit code 2 Command 'D:\Python\pyBuildTest\Scripts\python.exe setup-wxsvg.py build_ext --inplace' failed with exit code 1. Finished command: build_others (0m2.712s) Finished command: build_py (7m37.163s) Finished command: build (12m45.794s) Command ""D:\Python\pyBuildTest\Scripts\python.exe" -u build.py build" failed with exit code 1.
目前的排查进展
我已经做了一些尝试,但都没有解决问题:
- 确认
__pyx_vectorcallfunc未被识别的问题,大概率和Cython与自由线程版Python 3.13t的兼容性相关 - 发现其他项目(如scipy)的仓库中也出现过类似问题,被归因于过时的Cython版本
- 虽然wxPython官方要求的Cython版本是3.0.10,但我先后升级到了稳定版3.0.12,甚至从Git master分支编译安装了Alpha版3.1.x,依然无法绕过
__pyx_vectorcallfunc的错误
求助问题
想请教各位有经验的开发者:
- 有没有人成功在自由线程版Python 3.13t上从源码编译出wxPython的wheel包?
- 我应该优先把这个问题反馈给wxPython的开发团队/Git仓库,还是暂时等待官方的兼容性更新?
- 有没有其他临时的 workaround 可以让我在3.13t上成功编译并使用wxPython?
编辑:重新表述了问题内容,希望现在更清晰易懂
备注:内容来源于stack exchange,提问作者BeschBesch




