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

使用tree-sitter-languages 0.25.1的get_parser时遇TypeError错误

TypeError: init() takes exactly 1 argument (2 given) when using tree-sitter-languages 0.25.1 get_parser("javascript")

问题详情

在使用tree-sitter-languages 0.25.1的get_parser("javascript")时触发以下错误:

TypeError: __init__() takes exactly 1 argument (2 given)

相关代码片段:

from tree_sitter_languages import get_parser as ts_get_parser
class JavaScriptExtractor(BaseExtractor):
    _parser = None

    @classmethod
    def _init_parser(cls):

        print("Global get_parser:", globals().get("ts_get_parser"))
        print("<br>")
        print("cls dict:", cls.__dict__.keys())
 
        if cls._parser is None:
            
            cls._parser = ts_get_parser("javascript")
            print(cls._parser)  # 预期输出Parser对象

调用ts_get_parser("JavaScript")时触发错误,已完成的排查:

  • 卸载并重新安装tree-sitter-languages
  • 编写独立最小测试脚本,排除其他代码干扰,问题依旧存在

更新信息:同时安装了tree-sitter包,将其从0.25.1回退到0.21.3后问题解决,推测是版本冲突,但无法满足需使用tree-sitter 0.25.1的场景。


问题原因

tree-sitter-languages 0.25.1依赖特定版本的tree-sitter,当手动安装的tree-sitter版本(0.25.1)与tree-sitter-languages内部预期的版本不匹配时,会出现构造函数参数不兼容的问题——新版本的tree-sitter Parser类构造函数签名发生了变化,而tree-sitter-languages仍在使用旧的调用方式。


解决方案

1. 使用tree-sitter-languages自带的tree-sitter版本

卸载当前手动安装的tree-sitter包,让tree-sitter-languages使用其依赖的对应版本:

pip uninstall tree-sitter
pip install --force-reinstall tree-sitter-languages==0.25.1

此方法能确保两个包版本完全兼容,直接解决参数不匹配的问题。

2. 指定兼容的tree-sitter版本

如果必须使用tree-sitter 0.25.x系列,可查看tree-sitter-languages 0.25.1的setup.py或PyPI依赖声明,找到其适配的tree-sitter版本后安装对应版本。例如若tree-sitter-languages 0.25.1依赖tree-sitter~=0.21.0,需在功能需求和版本兼容间做取舍,或等待tree-sitter-languages更新适配高版本tree-sitter。

3. 直接使用tree-sitter手动配置

放弃tree-sitter-languages,直接用tree-sitter包手动下载并加载JavaScript语法,完全控制版本避免冲突:

from tree_sitter import Parser, Language

# 先确保已下载tree-sitter-javascript语法,或通过Language.build生成
Language.build_library(
    'build/my-languages.so',
    ['vendor/tree-sitter-javascript']
)

JS_LANGUAGE = Language('build/my-languages.so', 'javascript')
parser = Parser()
parser.set_language(JS_LANGUAGE)

此方法需要手动管理语法库,但能彻底规避版本依赖问题。

内容的提问来源于stack exchange,提问作者Chris E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:43:14