如何配置pylsp以支持PyGObject的自动补全?
嗨,我之前也踩过这个坑!PyGObject的自动补全确实有点麻烦,因为它的绑定是动态生成的,pylsp默认没法直接识别这些动态API。不过别担心,下面几个方法应该能帮你搞定:
安装PyGObject的类型存根包
PyGObject本身没有自带静态类型提示,所以我们得装个第三方存根包给pylsp提供类型信息。直接用pip安装就行:pip install pygobject-stubs这个包会补上PyGObject各模块的静态存根文件,pylsp就能基于这些文件给出补全提示了。
让pylsp定位到PyGObject的安装目录
你用Debian 12的系统包python3-gi装的PyGObject,大概率在/usr/lib/python3/dist-packages/gi路径下。有时候pylsp(尤其是用了虚拟环境的话)找不到这个系统路径,得手动把它加到pylsp的额外路径里。
如果你用的是ale,就在vim配置文件(比如~/.vimrc或者~/.config/nvim/init.vim)里加这么一行:let g:ale_python_pylsp_settings = {'extraPaths': ['/usr/lib/python3/dist-packages']}要是你用了虚拟环境,还可以在虚拟环境的
site-packages目录下建个软链接指向系统的gi目录,这样虚拟环境里的pylsp也能直接访问到:ln -s /usr/lib/python3/dist-packages/gi /path/to/your/venv/lib/python3.x/site-packages/gi检查pylsp的核心插件配置
确保pylsp启用了jedi插件(它是pylsp默认的补全后端,对动态库的支持比pyright好一些)。另外也可以把pylsp更到最新版本,旧版本可能对这类动态生成的API支持不够完善:pip install --upgrade python-lsp-server
做完这些之后,重启一下vim,再试试输入from gi.repository import Gtk,然后敲Gtk.,应该就能看到自动补全提示啦!
备注:内容来源于stack exchange,提问作者twig-froth

