可不可以定义在目录下的emacs配置文件?

事情要从安装pythonlsp服务器说起
一开始的时候不需要用到python环境配置,直接
sudo pip3 install python-language-server[all]
完成


后来要引入环境了,使用的是

conda activate flask-dev
sudo pip3 install `python-lanague-server[all]`

到了Emacs配置lsp的时候,问题来了:

  1. lsp该怎么设置 python的开发环境
  2. lsp能自动检测到 环境吗?
  3. 如果一些项目的依赖被安装在不同的环境中,该怎么为他们分别设置conda env
  4. 如果直接在.emacs配置文件下修改,代码好像会越来越冗余,能不能在每个项目下写一个配置文件,让Emacs来加载

有关lspconda env的问题我以前提过,不过沉了,现在还不知道怎么办

再后来尝试用 idea,发现创建python项目的时候可以这样添加SDK


发现这个以后,我才想emacs能不能为每个项目添加一个配置文件,像.idea一样

变量的话可以用 .dir-locals.el

另外考虑一下 direnv

我觉得direnv不错,希望能给个例子作为参考

配置:

(package-install 'direnv)
(direnv-mode)

Ruby的例子,项目目录 .envrc

use rbenv

Python 的话:

layout python3

参考 GitHub - direnv/direnv: unclutter your .profile

不太常用 conda, 我记得之前是这么解决的, 用 pyvenv 这个包, 每个项目的根目录下面用 dir-locals.el 文件指定要用的 env. 文件内容类似这样

((python-mode . ((pyvenv-workon . "~/.miniconda3/envs/tvm")
                 (eval . (pyvenv-mode)))))

pyvenv 会按照指定的 env 去 set 一些环境变量, 我用的是 lsp-python-ms 这个 language server, 看起来它可以从一些环境变量知道应该用哪个 env, 所以上面 pyvenv 设置好之后 lsp 就能用了, 其他的 server 不太确定, 不过应该也会支持.

melpa 里面有个 conda package, 应该可以实现类似的功能, 不过我没折腾过.