You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全新虚拟环境中安装pylbfgs失败,无法部署依赖它的dedupe求助

全新虚拟环境中安装pylbfgs失败,无法部署依赖它的dedupe求助

我太懂这种踩老库坑的难受了——pylbfgs最后一次更新还是2014年,完全跟不上近年Python和Cython的版本变化,哪怕你降级了Cython,Python 3.11的API变化也会导致类型不匹配的编译错误。咱们一步步来解决:

问题根源分析

从你贴的编译错误来看,核心是Cython对回调函数的类型检查变严格了(不管是Cython 3.0还是旧版Cython配合Python 3.11),而pylbfgs的.pyx代码还是十年前的写法,函数签名和现在要求的lbfgs_evaluate_t、lbfgs_progress_t类型不兼容。

可行解决办法

  • 降级Python到3.10或更低版本
    这是最省心的方案,毕竟pylbfgs的代码是针对旧Python生态写的。你可以这么操作:

    # 创建基于Python3.10的虚拟环境(确保你本地装了3.10)
    python3.10 -m venv dedupe-env
    source dedupe-env/bin/activate  # Windows系统用 dedupe-env\Scripts\activate
    
    # 先装指定版本的Cython,再安装pylbfgs
    pip install Cython==0.29.35
    pip install pylbfgs
    

    等pylbfgs装成功后,再安装dedupe就没问题了。

  • 尝试用conda安装pylbfgs
    Conda社区经常会给这类老库打补丁适配新环境,你可以试试:

    # 激活你的虚拟环境后执行
    conda install -c conda-forge pylbfgs
    

    装完后再用pip安装dedupe即可。

  • 手动修改pylbfgs源码编译(适合愿意折腾的情况)
    如果不想降级Python,可以下载pylbfgs的源码修改后本地编译:

    1. 从PyPI下载PyLBFGS-0.2.0.14.tar.gz并解压
    2. 打开lbfgs/_lowlevel.pyx,找到报错的第395、396行
    3. 给回调函数加上强制类型转换:把call_eval改成<lbfgs_evaluate_t>call_eval,call_progress改成<lbfgs_progress_t>call_progress
    4. 进入解压后的目录,执行pip install .完成本地安装

你遇到的完整错误信息

$ pip install pylbfgs

Collecting pylbfgs
Using cached PyLBFGS-0.2.0.14.tar.gz (98 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [57 lines of output]
/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-install-hgmjirii/pylbfgs_27ac07c00d1741aaa6fb205fbf713b21/lbfgs/_lowlevel.pyx
tree = Parsing.p_module(s, pxd, full_module_name)
Error compiling Cython file:
------------------------------------------------------------
...
x_a = aligned_copy(x0.ravel())
try:
callback_data = (f, progress, x0.shape, args)
r = lbfgs(n, x_a, fx_final, call_eval,
^
------------------------------------------------------------
lbfgs/_lowlevel.pyx:395:40: Cannot assign type 'lbfgsfloatval_t (void *, lbfgsconst_p, lbfgsfloatval_t *, int, lbfgsfloatval_t) except? -1' to 'lbfgs_evaluate_t'

Error compiling Cython file:
------------------------------------------------------------
...
x_a = aligned_copy(x0.ravel())
try:
callback_data = (f, progress, x0.shape, args)
r = lbfgs(n, x_a, fx_final, call_eval,
call_progress, <void *>callback_data, &self.params)
^
------------------------------------------------------------
lbfgs/_lowlevel.pyx:396:22: Cannot assign type 'int (void *, lbfgsconst_p, lbfgsconst_p, lbfgsfloatval_t, lbfgsfloatval_t, lbfgsfloatval_t, lbfgsfloatval_t, int, int, int) except? -1' to 'lbfgs_progress_t'

Compiling lbfgs/_lowlevel.pyx because it changed.
[1/1] Cythonizing lbfgs/_lowlevel.pyx
Traceback (most recent call last):
File "/Users/_/dev/test/env/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/Users/_/dev/test/env/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/_/dev/test/env/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=['wheel'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
self.run_setup()
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 488, in run_setup
self).run_setup(setup_script=setup_script)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 338, in run_setup
exec(code, locals())
File "<string>", line 27, in <module>
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/Cython/Build/Dependencies.py", line 1134, in cythonize
cythonize_one(*args)
File "/private/var/folders/jg/pb4kddl17kzf4njpdp3ht8rh0000gn/T/pip-build-env-rhor0rp4/overlay/lib/python3.11/site-packages/Cython/Build/Dependencies.py", line 1301, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: lbfgs/_lowlevel.pyx
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

备注:内容来源于stack exchange,提问作者Mathias Bak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:48:07