如何在Emacs中实现 自动导入Python库?

有没有package可以实现 在执行某个命令时, 自动导入 使用了但未导入的Python库文件,实现类似Pycharm的导入效果?

image

image

2 个赞

eglot + pyright 就能支持你要的功能。(当然还要加 Corfu 或者 Company)

image

可是我用的是 lsp + pyls :joy:

看你的图,是利用 auto-import 实现的吗?

是的,最近 eglot 才支持的新特性。没用过 lsp-mode,不知道它是否支持。

在这个帖子里,有人说lsp-mode支持auto-import了: lsp-mode now supports auto-import : r/emacs - Reddit https://www.reddit.com › emacs › comments

但我输入 system("clear") 时,并未弹出 auto-import 补全

那个帖子只是说 rust-analyzer 这个 Rust lsp后端支持了,并不一定所有的语言都支持。

你可以换 pyright 后端试试看。

啊哈!我找到一个符合我需求的软件:importmagic

不好意思,是我帖子没读全

我看了一下 auto-import,感觉和 importmagic 差别不是很大

不知道为什么,pyright 一直无法在我的系统上正常运行,所以我决定先用 importmagic 来实现这个功能。

谢谢您的答复!

我写java和python时,lsp都有自动添加库的行为。不过我没有特意关注触发条件

我之前也有过这样的经历,可今天测试没有出现补全项

我猜那个应该是yasnippet的功能吧,因为写哪个包的人太多了,就把导入语句写成snippet了(无理由的猜测)

最近也在找这个功能。

假如我输入 now ,会自动补全 import datetime 吗?

你可以安装 eglot 和 pyright 试试看。开箱即用,不需要任何配置。 安装好以后,在 Python buffer 下 M-x eglot 就可以了。

我想请问这是怎么设置的,我去看了文档,但还是没弄懂…谢谢~

你是哪里不清楚?这个功能是 eglot 默认就支持,只要你安装了 Yasnippet

你可以参考下我的个人配置

image

我是想问补全的样式,大佬的看起来比较清楚… :thinking:

我用的 Corfu 这个前端(替换了 Company),旁边的图标是 kind-icon 这个包,另外 cape 是 Corfu 的一些扩展。后两个是可选的。

你可以参考这部份配置:

非常感谢,我研究看看…

是想要这个样子的功能吗?我在lsp-pyright中测试了下,原来已经支持这个功能了。只要lsp识别导入过,在其他文件就可以自动导入,配置是lsp-pyright-auto-import-completions.

就是这个,原来是在这里,感谢大佬~~~~

你好,请问下这个配置要怎么禁用,我设置了 lsp-pyright-auto-import-completions 为 nil, 发现还是会有这个补全,有其它需要配置的吗,lsp client setting 也设成 nil 了

(“python.analysis.autoImportCompletions” lsp-pyright-auto-import-completions nil),也还是没用