关于在GNU Emacs中使用基于LSP的Python编辑的早期说明

145 阅读1分钟

最近我最常使用GNU Emacs的两种语言是Go和Python。在我让基于LSP的编辑工作在Go上之后,我决定让它也能在Python上工作。Python 是lsp-mode支持的语言之一,通过pyls,所以我希望这将是一个安装和运行的经验。但现实并不那么顺利,我带着一些问题和不确定因素结束了工作。

正如我通常对基于pip的安装说明所做的那样,我选择了使用'pip install --user',它将生成的程序放在~/.local/bin 。 由于这不在我的常规$PATH ,我不得不安排GNU Emacs在lsp-mode做任何事情之前能够看到pyls 程序。一旦这样做了,我在Python代码上试了试,警告就出现了,因为我把它安装成了'python-language-server[all]',它安装了所有linters和checkers。我必须遗憾地报告,我的代码对它们来说一点也不干净;例如,我经常使用全部为小写的短变量名。在对这个问题进行了一番探究之后,我决定现在不需要任何的临界者。一些提示器显然可以通过'pip uninstall'来禁用,但是其他的提示器有标准的Ubuntu版本,而且不清楚如何告诉lsp-mode来告诉pyls关闭它们,而且其中一些提示器可能被用来检测直接的语法错误,我希望能标记出来。

谈到语法错误,就引出了下一个问题,那就是Python 2与Python 3的对比。虽然我们正在向Python 3迈进,但我们仍然有大量的Python 2代码,因此我希望有一个基于LSP的设置,能在这两种情况下顺利工作。不幸的是,在我看来,pyls至少有一部分是针对你所安装的Python版本的。 我实际上是用pip3来安装Python 3版本的东西(因为那是我们的未来,如果我必须选择一个的话,似乎是正确的选择)。 这对于一些测试的Python 2代码来说,似乎至少部分是有效的,在简单的导航工作中,但是各种语法警告等等出现了,可能还有其他LSP的东西没有出现。

(据我所知,pyls 对挑选 Python 版本没有特别的规定,这并不令人惊讶。我读到的一些东西表明,大多数需要处理这个问题的人都使用了每个项目的 virtualenvs,那么 Python 2 项目将在他们的 virtualenv 中安装 Python 2 版本的 pyls。手动启动 GNU Emacs 并使用$PATH 首先找到 Python 2 版本的 pyls 似乎是正确的,而且我也许可以通过 pyls 的前端脚本来部分地实现自动化,该脚本会尝试找出当前环境下更可能使用的 Python 版本)。

所有这些让我对lsp-mode目前在我的Python编程中是否值得使用相当不确定。它确实给了我一些很好的东西,比如完成度,但是它可能不会像Go那样,是一个设定好就可以忘记的东西。在我得到明确的答案之前,我可能要剃掉更多的牦牛

(网上有各种关于使用Python和lsp-mode的文章,但它们似乎大多来自于已经知道很多Emacs的人,而我现在不是这样。阅读这些文章并在我的.emacs ,是一种谦卑的体验。)

PS:像往常一样,写这篇文章促使我走得更远,尝试更多的东西,做更多的实验,这是件好事。