哪位大佬能共享一下,使用lsp-pyright+Anaconda的配置?

我想使用Anaconda虚拟环境在emacs下通过lsp-pyright建立python环境,哪位老大能共享一下这种配置?

  • 你可以参考下我的python 配置,我是一个Emacs的新手,基本是抄了spacemacs的python 配置。里面有包含lsp-pyright 的配置,很简单。

  • lsp-pyright 依赖lsp, 这是我lsp的配置。lsp的配置相对简单,你也可以参考官网。我只是修改了一些变量的默认值,加速lsp。

  • 我运行的逻辑是

    1. 直接打开python 文件,在里面通过pyvenv包提供的pyvenv-activate 或者 pyvenv-workon 函数(第二个函数需要你设置环境变量WORKON_HOME,指向你默认的conda envs 目录,如我是设置为export WORKON_HOME="${HOME}/miniconda/envs" 在.bash_profile 文件里),来唤起相应的conda 环境(我自己是安装了miniconda, 但Emacs 与conda是独立的,并没有在conda 下安装Emacs)。
    2. 唤起后,如果你觉得lsp-pyright 并没有加载到你期望的python 环境 (一个判断方式是,在加载文件后,运行spacemacs/python-start-or-switch-repl,来开启一个python repl/console,看看你当前环境里的一些包是否可以正常加载,这个函数在配置里面有定义),可以运行lsp-workspace-restart。 我习惯是前者运行后,就执行下后者。
  • 额外应该需要但是可以靠后再配置:company补全,这个我并不懂,是抄了很多Seagle的Centaur Emacs配置 (这位大神就在我们论坛里,他是lsp-pyright 和 doom-modeline的作者,这两个包我都在使用),我的company 配置在这里

2赞

谢谢楼上。我也是emacs和conda是独立的,这样方便,pycharm下我也是这样。我是个初学者,我试着参照你们的配置文件看看是否能成功。正在学emacs和elisp语言,希望学完之后能有点长进。

赞,我都没学elisp。

请问,这两个配置我在init.el文件里要如何指定它们,让它们生效?

company 配置 https://github.com/tshu-w/.emacs.d/blob/master/lisp/editor-completion.el#L276

pyright 配置 https://github.com/tshu-w/.emacs.d/blob/master/lisp/lang-python.el#L229

项目目录下pyproject.toml

[tool.pyright]
# https://github.com/microsoft/pyright
venvPath = "../../.local/share/anaconda3/envs"
venv = "multimodalER"
typeCheckingMode = "off"
UseLibraryCodeForTypes = false

配置文件下载后放哪里?是不是把内容都复制到文件init.el里去?

这个,建议你看点基础知识,基本是的,不过我用了 use-package 你需要看看怎么用,另外 general 是绑键用的,不用可以去掉

关于多个配置文件的文章,哪里有?

也没啥文章,就模仿那个格式写就行了,刚开始也可以不用多文件,如果不用 evil,可以参考 https://github.com/purcell/emacs.d https://github.com/seagle0128/.emacs.d 如果用,可以从 https://github.com/syl20bnr/spacemacs https://github.com/hlissner/doom-emacs 开始(论坛有相关讨论)

  • 你可以参考我的init.el 怎么调用他们的
  • 你也可以把代码 copy到init.el 里,(provide 'init-python) 这样的句子就不用copy了。

上面不管哪个,可以删除你不需要的地方,也有可能我定义的变量在其他文件,你删除掉先不管就好了。

关于pyright的使用:

是的,紫薯布丁

1赞

只要exec-path能找到pyright就行。最简单的办法M-x lsp-install-server 或者 lsp-update-server。其实打开python文件, lsp-pyright会自动安装的。

1赞

非常感谢楼上

完全照抄你的init-python.el,出现如下警告和错误:
Warning (package): Unnecessary call to ‘package-initialize’ in init file
Error (use-package): python/:config: Symbol’s function definition is void: despot-def
Error (use-package): blacken/:config: Symbol’s function definition is void: despot-def
Error (use-package): python-isort/:config: Symbol’s function definition is void: despot-def
Error (use-package): conda/:config: Symbol’s function definition is void: despot-def
Error (use-package): pytest/:config: Symbol’s function definition is void: despot-def
Warning (initialization): An error occurred while loading ‘/home/yinxiuqu/.emacs.d/init.el’:

回复错人了,despot-def 是绑定快捷键用的,需要去掉相关的

去掉你说的之后,仍然有错误: Warning (package): Unnecessary call to ‘package-initialize’ in init file Warning (initialization): An error occurred while loading ‘/home/yinxiuqu/.emacs.d/init.el’:

End of file during parsing: /home/yinxiuqu/.emacs.d/lisp/init-python.el

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

你先都放到 init.el 中,然后把配置贴出来

这个问题已经搞定了,是我重复了(package-initialize)

1赞

你好,我用virtualenv配置虚拟环境和pyright做后端,我在base环境下pip的epc和importimagic,激活venv后不提示里面的包,是因为我没有在虚拟环境中装importimagic和epc吗