python-lsp-server:一个可插拔的 Python 语言服务器

Python 开发者写代码时,补全、跳转、格式化这些功能几乎是刚需。python-lsp-server 是一个基于 Language Server Protocol 的 Python 语言服务器,Star 数 2558,用来给编辑器提供这些能力。

正文顶部截图

它提供什么

这个项目基于 Jedi 实现了核心的 IDE 功能:代码补全、定义跳转、悬停提示、引用查找、签名帮助、符号导航。安装后暴露 pylsp 命令,编辑器通过 LSP 协议与其通信即可使用这些功能。

README区域截图

它的特点是高度可插拔。基础安装只包含 Jedi,其他功能通过可选依赖按需加载。如果你只需要补全和跳转,装基础包就够了。想要格式化就加 YAPF 或 Black,想要类型检查就加 mypy,这种按需组合的方式比较灵活。

可选插件覆盖了代码质量检查的多个维度:

  • Rope:补全和重命名
  • Pyflakes:错误检测
  • McCabe:复杂度检查
  • pycodestyle:代码风格检查
  • autopep8 / YAPF:代码格式化
  • flake8 / pylint:额外的代码检查

安装时可以用 extras 语法指定需要的功能,比如 pip install "python-lsp-server[yapf]" 只装格式化,pip install "python-lsp-server[all]" 则全部装上。

安装途径很多

除了 pip,它也进了各大发行版的仓库。Debian/Ubuntu 用 apt-get install python3-pylsp,Fedora 用 dnf install python3-lsp-server,Arch 用 pacman -S python-lsp-server,Alpine 用 apk add py3-lsp-server。Anaconda 用户可以直接 conda install -c conda-forge python-lsp-server。覆盖面挺广的,基本上主流的包管理工具都能直接拿到。

插件生态

官方维护了一系列第三方插件扩展能力:

  • pylsp-mypy:静态类型检查
  • python-lsp-black:Black 格式化
  • python-lsp-isort:自动 import 排序
  • python-lsp-ruff:高性能 linting
  • pylsp-rope:扩展重构功能
  • pyls-memestra:检测弃用 API

每个插件都是一个独立的 Python 包,按需安装即可。官方还提供了 cookiecutter 模板,方便开发者写自己的插件。这套机制让社区可以持续扩展功能,而不需要改动核心代码。

配置方式

配置可以通过编辑器客户端传递,也可以读取工具自身的配置文件。pycodestyle 的规则在 ~/.config/pycodestylesetup.cfgtox.ini 等位置都能生效。优先级是用户配置 < 客户端配置 < 工作区配置,越靠近项目的配置越优先。

实际使用

除了标准 LSP 功能,它还支持 WebSocket 通信,启动时加 --ws --port 参数即可。远程开发场景下,这个特性比较实用。

适合谁用

如果你用 Neovim、VS Code 以外的编辑器,或者想用一套统一的工具给 Python 项目提供 IDE 功能,这个工具值得考虑。它的插件架构让你只装自己需要的部分,避免了全家桶式的依赖膨胀。配置也相对直观,大部分选项都能在编辑器设置或项目配置文件中管理。

自己需要的部分,避免了全家桶式的依赖膨胀。配置也相对直观,大部分选项都能在编辑器设置或项目配置文件中管理。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐