Python3.11环境安装cytoolz==0.11.2元数据生成失败求助
解决cytoolz==0.11.2在Python 3.11下的安装失败问题
问题场景
使用Python 3.11在VS Code中开发,执行依赖安装时遇到cytoolz==0.11.2编译失败,错误核心为Cython编译时__module__重声明导致编译器崩溃。已安装VS Build Tools、升级pip,但问题未解决。
完整错误日志
Collecting cytoolz==0.11.2 (from -r requirements.txt (line 11)) Using cached cytoolz-0.11.2.tar.gz (481 kB) Preparing metadata (setup.py) ... error error: subprocess-exited-with-error × python setup.py egg_info did not run successfully. │ exit code: 1 ╰─> [73 lines of output] Error compiling Cython file: ------------------------------------------------------------ ... cdef readonly object func cdef readonly tuple args cdef readonly dict keywords cdef public object __doc__ cdef public object __name__ cdef public object __module__ ^ ------------------------------------------------------------ cytoolz\functoolz.pxd:18:23: '__module__' redeclared Error compiling Cython file: ------------------------------------------------------------ ... cdef readonly object func cdef readonly tuple args cdef readonly dict keywords cdef public object __doc__ cdef public object __name__ cdef public object __module__ ^ ------------------------------------------------------------ cytoolz\functoolz.pxd:18:9: Compiler crash in AnalyseDeclarationsTransform File 'ModuleNode.py', line 203, in analyse_declarations: ModuleNode(functoolz.pxd:1:0, full_module_name = 'cytoolz.functoolz', is_pxd = True) File 'Nodes.py', line 393, in analyse_declarations: StatListNode(functoolz.pxd:1:0) File 'Nodes.py', line 5449, in analyse_declarations: CClassDefNode(functoolz.pxd:10:5, as_name = 'curry', class_name = 'curry', in_pxd = True, module_name = '', punycode_class_name = 'curry', visibility = 'private') File 'Nodes.py', line 393, in analyse_declarations: StatListNode(functoolz.pxd:11:4) File 'Nodes.py', line 1529, in analyse_declarations: CVarDefNode(functoolz.pxd:18:9, in_pxd = True, modifiers = [...]/0, visibility = 'public') Compiler crash traceback from this point on: File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Compiler\Nodes.py", line 1529, in analyse_declarations self.entry = dest_scope.declare_var( ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Compiler\Symtab.py", line 2388, in declare_var entry = self.declare(name, cname, type, pos, visibility) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Compiler\Symtab.py", line 550, in declare entries[name].already_declared_here() File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Compiler\Symtab.py", line 262, in already_declared_here error(self.pos, "Previous declaration is here") File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Compiler\Errors.py", line 178, in error raise InternalError(message) InternalError: Internal compiler error: Previous declaration is here Traceback (most recent call last): File "<string>", line 2, in <module> File "<pip-setuptools-caller>", line 34, in <module> File "C:\Users\zaidr\AppData\Local\Temp\pip-install-so8rcdso\cytoolz_bdaa1aa481cb42ed84ccd4148f91edf3\setup.py", line 87, in <module> ext_modules = cythonize(ext_modules, force=not is_dev) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Build\Dependencies.py", line 1134, in cythonize cythonize_one(*args) File "C:\Users\zaidr\Documents\DYDX\venv\Lib\site-packages\Cython\Build\Dependencies.py", line 1301, in cythonize_one raise CompileError(None, pyx_file) Cython.Compiler.Errors.CompileError: cytoolz/functoolz.pyx [1/5] Cythonizing cytoolz/dicttoolz.pyx [2/5] Cythonizing cytoolz/functoolz.pyx [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details.
解决方案
方案1:升级cytoolz到兼容Python3.11的版本
cytoolz 0.11.2发布于2021年,不支持Python3.11(2022年发布)。直接安装更高版本即可解决编译问题:
- 执行命令:
pip install cytoolz>=0.12.0 - 或者修改
requirements.txt中的版本号为cytoolz>=0.12.0后重新安装
方案2:安装预编译wheel包(避免编译)
如果必须使用0.11.2版本,尝试安装预编译的二进制包,跳过本地编译步骤:
pip install --only-binary :all: cytoolz==0.11.2
注意:若该版本无对应Python3.11的预编译包,此方案无效,优先选择方案1
方案3:降级Cython版本适配旧cytoolz
错误是由于新版Cython与旧版cytoolz的Cython代码不兼容导致的,先安装兼容的旧版Cython再安装cytoolz:
- 卸载当前Cython:
pip uninstall -y cython - 安装兼容版本:
pip install cython==0.29.36 - 重新安装cytoolz:
pip install cytoolz==0.11.2
内容的提问来源于stack exchange,提问作者zaid ragie
相关产品推荐
相关产品推荐

