无法通过pip3安装chs包:editdistance依赖构建失败
安装chs包时遭遇editdistance构建失败问题
执行pip3 install chs命令时安装失败,因系统默认使用用户安装模式(普通site-packages目录无写入权限),在安装依赖editdistance包构建wheel环节出错,提示找不到editdistance/bycython.pyx文件。作为Python新手,尝试通过约束文件更换editdistance版本仍无法完成安装。
完整报错信息
pip3 install chs 默认使用用户安装模式,因为普通site-packages目录不可写 正在收集chs 使用缓存的chs-3.0.0.tar.gz (13.0 MB) 准备metadata (setup.py) ... 完成 满足依赖:python-chess 已存在于./.local/lib/python3.12/site-packages (来自chs) (1.999) 正在收集editdistance (来自chs) 使用缓存的editdistance-0.6.2.tar.gz (31 kB) 安装构建依赖 ... 完成 获取构建wheel的依赖项 ... 错误 error: subprocess-exited-with-error × 获取构建wheel的依赖项执行失败。 │ 退出码:1 ╰─> [25行输出] 回溯(最近的调用最后): 文件 "/home/fedora/.local/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第353行, 在 <module> main() 文件 "/home/fedora/.local/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第335行, 在 main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/home/fedora/.local/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第118行, 在 get_requires_for_build_wheel return hook(config_settings) ^^^^^^^^^^^^^^^^^^^^^ 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第325行, 在 get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=['wheel']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第295行, 在 _get_build_requires self.run_setup() 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第311行, 在 run_setup exec(code, locals()) 文件 "<string>", 第25行, 在 <module> 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib64/python3.12/site-packages/Cython/Build/Dependencies.py", 第1010行, 在 cythonize module_list, module_metadata = create_extension_list( ^^^^^^^^^^^^^^^^^^^^^^ 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib64/python3.12/site-packages/Cython/Build/Dependencies.py", 第845行, 在 create_extension_list for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern): 文件 "/tmp/pip-build-env-xq8q7ikf/overlay/lib64/python3.12/site-packages/Cython/Build/Dependencies.py", 第117行, 在 nonempty raise ValueError(error_msg) ValueError: 'editdistance/bycython.pyx' 未匹配到任何文件 [输出结束] note: 此错误来自子进程,大概率不是pip的问题。 error: subprocess-exited-with-error × 获取构建wheel的依赖项执行失败。 │ 退出码:1 ╰─> 查看上方输出详情。 note: 此错误来自子进程,大概率不是pip的问题。
解决方案
方法1:安装带预编译wheel的editdistance版本
editdistance 0.6.2版本可能没有针对Python3.12的预编译wheel,导致本地编译时缺失源码文件。尝试安装更高版本的editdistance(0.7.0及以上),这些版本通常提供适配Python3.12的预编译包:
pip3 install editdistance>=0.7.0 --user
安装完成后再执行:
pip3 install chs --user
方法2:通过约束文件指定editdistance版本
创建constraints.txt文件,内容如下:
editdistance>=0.7.0
然后执行安装命令:
pip3 install chs --user -c constraints.txt
方法3:安装编译依赖(需用旧版本时)
如果必须使用editdistance 0.6.2,需先安装Cython和系统级编译工具:
pip3 install cython --user
Fedora系统下补充安装系统依赖:
sudo dnf install gcc python3-devel
之后再尝试安装chs。
内容的提问来源于stack exchange,提问作者vdegenne
相关产品推荐
相关产品推荐

