无法为frozenlist构建wheel:Discord Bot依赖Poetry安装报错
解决frozenlist 1.3.0构建Wheel失败的问题
问题描述
运行依赖Poetry的Discord Bot时,安装依赖遇到以下状况:
- 最初无法构建multidict的wheel,安装最新版Microsoft Visual C++后该问题解决
- 但仍无法构建frozenlist 1.3.0的wheel,重装Python后问题依旧
- 核心错误信息:
frozenlist/_frozenlist.c(7127): error C2037: left of 'f_lineno' specifies undefined struct/union '_frame'
完整错误日志:
Collecting frozenlist==1.3.0 Using cached frozenlist-1.3.0.tar.gz (65 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: frozenlist Building wheel for frozenlist (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for frozenlist (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [39 lines of output] ********************** * Accellerated build * ********************** running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-cpython-311 creating build\lib.win-amd64-cpython-311\frozenlist copying frozenlist\__init__.py -> build\lib.win-amd64-cpython-311\frozenlist running egg_info writing frozenlist.egg-info\PKG-INFO writing dependency_links to frozenlist.egg-info\dependency_links.txt writing top-level names to frozenlist.egg-info\top_level.txt reading manifest file 'frozenlist.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files matching '*.pyc' found anywhere in distribution warning: no previously-included files matching '*.pyd' found anywhere in distribution warning: no previously-included files matching '*.so' found anywhere in distribution warning: no previously-included files matching '*.lib' found anywhere in distribution warning: no previously-included files matching '*.dll' found anywhere in distribution warning: no previously-included files matching '*.a' found anywhere in distribution warning: no previously-included files matching '*.obj' found anywhere in distribution warning: no previously-included files found matching 'frozenlist\*.html' no previously-included directories found matching 'docs\_build' adding license file 'LICENSE' writing manifest file 'frozenlist.egg-info\SOURCES.txt' copying frozenlist\__init__.pyi -> build\lib.win-amd64-cpython-311\frozenlist copying frozenlist\_frozenlist.pyx -> build\lib.win-amd64-cpython-311\frozenlist copying frozenlist\py.typed -> build\lib.win-amd64-cpython-311\frozenlist running build_ext building 'frozenlist._frozenlist' extension creating build\temp.win-amd64-cpython-311 creating build\temp.win-amd64-cpython-311\Release creating build\temp.win-amd64-cpython-311\Release\frozenlist "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\Users\wierd\AppData\Local\Programs\Python\Python311\include -IC:\Users\wierd\AppData\Local\Programs\Python\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22000.0\\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" /Tcfrozenlist/_frozenlist.c /Fobuild\temp.win-amd64-cpython-311\Release\frozenlist/_frozenlist.obj _frozenlist.c frozenlist/_frozenlist.c(7127): error C2037: left of 'f_lineno' specifies undefined struct/union '_frame' error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for frozenlist Failed to build frozenlist ERROR: Failed to build one or more wheels
解决方法
1. 升级frozenlist到兼容版本
frozenlist 1.3.0不支持Python 3.11——Python 3.11对CPython的C API做了变更,导致旧版本的frozenlist无法正确访问_frame结构体成员。升级到1.4.0及以上版本即可解决:
- 用pip安装:
pip install frozenlist>=1.4.0 - 用Poetry的话,修改
pyproject.toml中的依赖为frozenlist = "^1.4.0",然后执行poetry update frozenlist
2. 降级Python版本
如果无法升级frozenlist,可将Python降级到3.10或更低版本,frozenlist 1.3.0在这些版本中可以正常构建。
内容的提问来源于stack exchange,提问作者Wierd Creations
相关产品推荐
相关产品推荐

