”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 `basedpyright-langserver` 实现 Python 和 Poetry 的 Emacs

使用 `basedpyright-langserver` 实现 Python 和 Poetry 的 Emacs

发布于2024-11-05
浏览:169

Emacs for Python and Poetry Using `basedpyright-langserver`

我对当前的 Python emacs 设置非常满意,但我发现设置有点棘手。我将在这里为我未来的自己和任何其他正在寻找可靠的 emacs 配置的 Pythonista 记录我的设置。

为什么基于pyright?

到目前为止,我一直在命令行上使用 mypy --strict 来满足我所有的类型检查需求,但即使对于非常小的代码库,mypy 也相当慢,即使在 --strict 模式下,它也不如尽可能严格。它也不是我的 emacs 设置所需的语言服务器。

basedpyright 是 Pyright 的一个分支,在检查和可靠性方面都有一些出色的改进。它是一个快速且非常严格的类型检查器,另外还具有一些良好的 linting 功能。

我遇到的唯一缺点是,它在 AWS 的 boto3-stubs 客户端上的表现不如 mypy 那么好,而且它使用非标准的 #pyright:ignore comments 而不是标准的 #type:ignore comments,但是我可以忍受这些问题,支持严格的类型检查体验。

配置您的 Poetry 项目以使用 basedpyright 或 Pyright

如果您有使用 Poetry 的现有项目,您将需要稍微调整一下您的虚拟环境。

转到每个项目的根目录并运行以下命令:


poetry config --local virtualenvs.in-project true


这将创建一个 poetry.toml 文件(如果尚不存在)并添加相应的设置。

然而,这不会实际移动您现有的虚拟环境。为了使此更改生效,您必须删除现有的虚拟环境,您可以通过运行

找到该环境

poetry env info --path


不要忘记将 .venv 路径添加到 .gitignore 以及您可能使用的任何其他工具(如 pycodestyle)的配置,否则您最终会得到真是一团糟。

接下来,您应该在 pyproject.toml 中添加一个配置部分,以告诉 basedpyright 在哪里查找您的虚拟环境。


[tool.pyright]
venv=".venv"
venvPath="."


您也可以在 pyrightconfig.json 文件中执行此操作,如果与我不同的是,您还没有感觉到不同 Python 开发工具的配置文件完全超载。

安装 basedpyright 作为语言服务器

basedpyright 相对于 Pyright 的一个非常好的一点是,它将 NodeJS 依赖项构建为轮子,因此您可以放心,无论您是否安装了 NodeJS,basedpyright 都应该在您的计算机上运行。

为了隔离,通常最好使用 pipx 而不是 pip 安装可执行 Python 包。让我们继续吧。


pipx install basedpyright


为了进行健全性检查,请考虑运行


basedpyright --version


安装basedpyright还可以让您访问basedpyright-langserver命令,但这并不是真正为用户交互而编写的,所以如果您运行basedpyright-langserver或basedpyright-langserver --version或其他东西,您将获得nodejs堆栈跟踪。

配置 emacs 使用 basedpyright-langserver

我假设您作为读者知道如何从 MELPA 安装软件包并且有首选的方法。以下是您需要的所有软件包:

  • 公司
  • lsp 模式
  • lsp-pyright
  • lsp-ui
  • python 模式

安装这些,然后打开 ~/.emacs~/.emacs.d/init.el 并添加以下内容:


;; lsp global settings
(add-hook 'after-init-hook 'global-company-mode)
(setq lsp-auto-guess-root t)

;; python
(require 'lsp-mode)
(setq lsp-pyright-langserver-command "basedpyright")
(add-hook 'python-mode-hook (lambda () (require 'lsp-pyright) (lsp)))


这应该就是您所需要的。

调试 lsp 模式的一般技巧

如果您觉得您已经正确设置了所有内容,但仍然无法使用 lsp 模式来查找 Poetry 中应该可用的软件包,您可以尝试的一件事是进入并删除您的 〜/.emacs.d/.lsp-session-v1。这将导致 lsp-mode 忘记项目根目录并强制它再次查找它。

快乐编码!

我希望这能让您在 Python 开发环境方面有一个良好的开端。如果您有任何疑问,好吧,我是这一切的初学者,我可能无法帮助您,但如果您有任何在 emacs 中使用 basedpyright 的额外提示或技巧,我会考虑合并请求。

版本声明 本文转载于:https://dev.to/webbureaucrat/emacs-for-python-and-poetry-using-basedpyright-langserver-ca9?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • NLTK如何高效地将文本分割成句子?
    NLTK如何高效地将文本分割成句子?
    如何有效地将文本分配到句子将文本分配到句子中可能是一个棘手的任务。缩写和句子内的使用时的微妙之处可能会构成挑战。 While many approaches exist, one effective method involves leveraging the Natural Language To...
    编程 发布于2025-04-18
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的python功能eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-04-18
  • 如何更改选择框选项的背景颜色?
    如何更改选择框选项的背景颜色?
    如何在打开时如何更改选择框选项的背景颜色在尝试自定义选择框时,您会遇到难度在激活时更改选项的难度。要解决这个问题,至关重要的是针对正确的html元素。高级自定义: { 背景:RGBA(150、150、150、0.3); } [2 选项1 选项2 < 背景:蓝色; }
    编程 发布于2025-04-18
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-04-18
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-04-18
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-04-18
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    将pandas dataframe列转换为dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定义格式:})指定的格式参数匹配给定的字符串格式。转换后,MyCol列现在将包含DateTime对象。 date oped filtering > = p...
    编程 发布于2025-04-18
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-18
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-18
  • 快速解决MySQL "root@localhost访问被拒"错误
    快速解决MySQL "root@localhost访问被拒"错误
    [2 求解'root'user 的mysql“访问拒绝”错误 常见的mysql错误“访问用户'root'@'localhost'(使用密码:yes)”通常会导致用户沿着复杂解决方案的兔子孔掉落。 幸运的是,一个简单的修复程序通常可行。 而不是复杂的故...
    编程 发布于2025-04-18
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-18
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-04-18
  • 在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    编程 发布于2025-04-18
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-18
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-04-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3