亲测:lsp-python-ms vs pyls 性能

问题不是出自于lsp-python-ms,而是出自于lsp-mode,不晓得是不是因为我用了最新的lsp-mode导致的,我看这个版本是6月18号刚发布的

楼主,刚才又重新clone了你的centaur,新建一个py文件,lsp显示 .py not in project or it is blacklisted,怎么设置?

看见后面的评论让我打消了尝试的念头。。。

确实,系统版本,lsp版本都会影响性能,我还是用简单的anaconda,关注一下lsp的进展就行

我今天一天都被这东西废了感觉

可以参考这两个

不解为什么都在说不行,我用起来体验很好呀,并没有什么问题啊,上面也录了视频。可惜参考下lsp-python-ms的README,照着做不会有问题。

有没有办法选择性的执行 (pipenv-activate) ?毕竟不是所有的文件在虚拟环境中

(use-package lsp-python-ms
  :defer t
  :hook (python-mode . (lambda ()
                         (require 'lsp-python-ms)
                         (pipenv-activate)
                         (lsp)))

这么写太粗暴了。

可能是载入的原因 我重新弄了一下,他还是会有警告 特别导入tensorflow的时候总是有这个警告,爱那里可以关闭呢

vscode python 的扩展有一个 jedi 什么的配置,设置成 false,再打开python文件,就会自动下来那个language server 了,可以想办法找找对应的url,提出来,直接下载,这样就不用自己编译了。

嗯,下午发现了。vscode装完下面写着要分析10000多项,十多秒就完成了。然而把这个可执行文件给emacs用,还是分析了2多个钟还没完成。初步感觉和虚拟环境有关。不过pyls是正常使用的。

好像是 nupkg 打包的, 我看了下 mac 下面下载的链接 https://pvsc.azureedge.net/python-language-server-stable/Python-Language-Server-osx-x64.0.2.96.nupkg

emacs 27用native json serializer的时候好像有点问题

Debugger entered--Lisp error: (wrong-type-argument symbolp "unknown-parameter-name")
  json-serialize((:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params (:settings #<hash-table equal 1/65 0x1576b2a85d61>)) :null-object nil :false-object :json-false)
  (with-no-warnings (json-serialize params :null-object nil :false-object :json-false))
  (if (and lsp-use-native-json (fboundp 'json-serialize)) (with-no-warnings (json-serialize params :null-object nil :false-object :json-false)) (json-encode params))
  (let* ((json-false :json-false) (body (if (and lsp-use-native-json (fboundp 'json-serialize)) (with-no-warnings (json-serialize params :null-object nil :false-object :json-false)) (json-encode params)))) (concat "Content-Length: " (number-to-string (1+ (string-bytes body))) "\15\n\15\n" body "\n"))
  lsp--make-message((:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params (:settings #<hash-table equal 1/65 0x1576b2a85d61>)))

导致错误的参数是这个样子的

(:jsonrpc 2.0 :method workspace/didChangeConfiguration :params (:settings #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (python #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (analysis #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (errors (unknown-parameter-name undefined-variable parameter-missing positional-argument-after-keyword too-many-function-arguments) warnings (unresolved-import parameter-already-specified too-many-positional-arguments-before-star)))))))))

不知道是不是mspyls返回的结果格式有问题

这是flycheck报的warning,你可能需要设置python的lib path,比如:lsp-python-ms-extra-paths

所以如果编译有困难可以直接下载解压使用。你是从哪里搞到的URL呢?如果能自动找出最新版本的地址,我们就有办法自动下载启用mspyls了。

参照lsp-java的思路,写了个简单的函数直接下载mspyls并解压到指定地方。这样就不用下载donet-sdk 自己编译源代码了。但是还不够完美,版本是写死的最新稳定版本,Windows平台也没有测试过。先凑合用着。

2 个赞

可以的github找到最新release的版本号替代进去,vc应该跟进很快的吧

这个flycheck报的错我修改了.pylintrc文件,不应该也是一样的吗?因为我工作中要构建很多虚拟环境,那这个lsp-python-ms-extra-paths 要添加好多路径啊

vscode 下载的时候,我打开那个信息窗口看的。。。

在启动lsp之前激活虚拟环境,就能找到对应虚拟环境里的包。