Emacs 中的高级 Python 开发工作流程

这是一份关于将 Emacs 转变为强大 Python IDE 的指南,主要内容如下:

  • 引言

    • 为什么选择 Emacs:Emacs 不仅是编辑器,还是可扩展的平台,可通过多种工具转变为功能丰富的 Python IDE,能与 PyCharm 或 VS Code 竞争。
    • 目标与范围:旨在探索如何将 Emacs 转化为高级 Python IDE,满足个人工程需求,注重实用与配置透明,是个人经验总结,不适合所有人,可激发他人探索 Emacs 的潜力,同时排除了use-package
    • 配置栈概述:现代 IDE 需支持编码、调试和环境管理,将 Emacs 转化为 Python IDE 需一系列模块化工具,包括代码智能、 linting 与静态分析、调试、环境管理等。
    • 关键协议基础:介绍 Language Server Protocol(LSP)和 Debug Adapter Protocol(DAP),LSP 解决编辑器与语言工具的碎片化问题,DAP 解决调试支持的挑战,两者形成现代 IDE 的 backbone。
  • 环境设置

    • 安装依赖lsp-mode可自动安装 Python Language Server(如pyright),手动安装可通过在用户主目录安装 Node.js 包,安装后需将"$HOME/.local/bin"添加到$PATH
    • 管理多个 Pythonpyenv可方便地安装和管理多个 Python 版本,direnv可自动启用或禁用环境变量,根据当前目录选择正确的 Python 环境,两者结合可实现灵活的 Python 版本管理。
    • 集成 direnv 到 Emacs:介绍两个 Emacs 扩展envrcemacs-direnv,其中envrc可设置缓冲局部环境变量,通过添加特定代码片段可使 Emacs 与direnv集成,确保项目特定配置不影响其他缓冲区。
  • IDE 设置

    • 使用 company 和 lsp-mode 实现自动补全:安装company后,结合lsp-mode可实现自动补全,无需额外配置(require 'company)company可与snippet集成。
    • 使用 flymake 和 flycheck 进行诊断:Emacs 有flycheckflymake两种诊断工具,flycheck擅长外部 linters,flymake专注于 LSP 和 native 集成,两者在 Python 项目中表现都很好,可根据需求选择或同时使用。
    • 使用 yasnippet 增强自动补全yasnippet可提供代码片段和模板,简化重复结构的编写,与company集成后可在自动补全中使用 snippets,可全局启用或选择性启用,还可创建自定义 snippet。
    • 设置 LSP:安装lsp-modelsp-pyrightlsp-ui,设置 LSP 前缀(如改为C-c l),选择正确的 Python 版本(可利用direnv设置VIRTUAL_ENV),配置 LSP 完成(自定义company-backends),增强 UI(如启用 breadcrumb 导航和lsp-ui模块),集成which-key,配置 LSP 会话和工作区(可禁用 Multi-Root 模式),以及使用 LSP 扩展(如consult-lsp)。
    • 使用 dap-mode 进行调试:安装并启用dap-mode,配置dap-python(选择调试工具如debugpy),使用dap-mode进行调试(选择调试模板),创建自定义调试模板,设置和管理断点,提供常用调试命令。
  • 未来增强:介绍了Eglot(轻量级 LSP 替代方案)、lsp-bridge(注重性能的 LSP 客户端)、Jedi Language Server(Python 特定的轻量级服务器)和uv(多功能 Python 包和项目管理器)等可选工具。
  • 结论:总结了设置的组件(如pyenvdirenv等)及其位置,强调这些工具的优秀组合可将 Emacs 转变为 Python IDE,鼓励继续探索和改进 Python 开发工作流。
阅读 9
0 条评论