2021年,什么才是结合conda, projectile和lsp的最佳方式?

我们都知道可以用conda很方便的设置emacs全局的python环境。

但想要为每个具体的project设置环境的话就需要local variable. projectile提供了编辑local variable的功能:在.dir-locals.el里写入即可。

但我做了如下尝试:

((nil . ((conda-project-env-name . "py27")
         ))
 (python . ((conda-project-env-name . "py27"))
         )
 )

或者将conda-project-env-name换成conda-env-name-for-buffer。前者在conda.el官网虽然有说明,但源码似乎已经删除,只是官方文档没更新。后者则一直在。 然而效果如下:

进入文件夹里的.py文件,发现并没有激活conda环境。无论用上面提到的conda-project-env-name还是conda-env-name-for-buffer都一样。

我用的是lsp-pyright。如果换成lsp-python-ms,不会出现这个报错界面,但一样不会激活环境。

系统:macOS10.15, emacs配置是doom-emacs。

目前lsp-pyright和lsp-python-ms支持venv定位python环境。

好主意,有空可以去折腾一下。

我刚用pyright --createstub处理了两个包,结果从那之后我的emacs lsp-pyright在import的时候就再也不能补全了(对任何包都不能)。不知道发生了什么,有没有思路排查一下?

嗯,重装即可。。。

回头我会发一下结合venv和pyright的体验。

我目前是 elpy + lsp-pyright

這兩都可以穩定激活 venv 或者 nix 的環境.

https://github.com/redguardtoo/emacs.d#python-environment elpy设置的技术细节。基本上就是python 命令行调用venv。

我最近在思考从anaconda用回venv。但pip对包的管理实在是不如anaconda,库也不全,不知道有没有办法。

pip 怎麼可能包不全呢(也許是沒有 win 的 whl 所以安不上?)

要不,乃考慮下類似 pdm 的這種支持 PEP582,無 env 形式的開發方案?

https://pdm.fming.dev/

按道理pip是不应该包不全的。但我还真遇到过。

比如 https://anaconda.org/conda-forge/root/ 这玩意要么anaconda,要么官网自己手动编译,后者出错概率大。

比如ML有些包,经常pip安装就报错,conda就没事。 离谱。

听了你和楼上几位大神的建议,我最近正在研究如何放弃anaconda。

root 啊,root 在各種包管理器裏面(比如 portage/macports/nix

或許因爲不是 Python 包,是 C++ 所以他們沒打包?

是的,root原本是C++。但我平时pyroot用的多。这种时候没任何环境管理比得上anaconda。。。单这一条已经让我无法离开anaconda了。

可以用 nix (這个也能直接用上 root

感谢回复,我回头折腾一下。如果能解决估计就可以顺利用回venv了。

其实我个人也不是很喜欢anaconda,太笨重太慢了。环境装多了之后conda activate都要好几秒。