能否通过设置环境变量让 conda 切换虚拟环境

这个跟emacs没太大关系 其实就是direnv的作用,如果你喜欢这个工具的话

这是一个.envrc的配置

export VIRTUAL_ENV=$HOME/python/venv
layout python-venv python3.6
export PYTHONPATH=$PYTHONPATH:$HOME/repos/myproject

第一行添加了虚拟环境的目录,第二行是个工具激活虚拟环境,是老版本的做法,但是我习惯了,第三行添加一些额外的包检索目录

另外我用pyright,因为是js实现的,我可以用npm全局安装,就不需要每个虚拟环境去安装一个python的pyls之类的包了,保持环境干净

再另外,如果你也用doom的话,+flag里面有很多预置的,如 conda/pipenv/poetry 之类的,可以探索一下,找到自己的使用习惯

再补充下上面direnv第二行配置的wiki,刚找了下想起来了,是因为新版本有自己的虚拟环境管理方式,而我习惯自己管理虚拟环境,所以用了wiki里面的老方法

最后再补充一个,就是.envrc 这个文件也会污染项目目录,可以添加到.git/info/exclude 里面排除掉。如果你也用magit的话,I p 即可编辑(magit-gitignore)

看来您对这方面很有经验,还请多指点一下
doom怎么处理这个虚拟环境?有教程文章吗

还有,我在尝试用add-dir-local-variable的时候,没有发现一个可以设置的变量是lsp-register-custom-settings

add-dir-local-variablepython-modeeval

没咋用过 doom,你直接看 Emacs 咋处理的就好

PS 用上面的 direnv 应该也是可以的,我之前嫌弃切换目录有点卡,就没用了。

我的项目跟目录里也有个.emacs.d文件夹了,是否把这个配置文件放到项目的.emacs.d文件夹里?另外,在eshell下似乎也用不了conda命令。

.emacs.d 只要放到 $HOME 下就好了呀?.dir-locals.el 是放到项目目录下的。

如果是 Mac GUI 下需要这个插件 GitHub - purcell/exec-path-from-shell: Make Emacs use the $PATH set up by the user's shell 来加载路径。 所以这是为啥我建议你从成熟配置开始的原因🤣,它们都帮你处理好了

好的,谢谢。我正在学gnu emacs和Lisp语言。

这个设置直接用M-x shell可以进入虚拟环境了,eshell不行。就用shell就可以,谢谢。

这个设置放到项目根目录下,根本不产生任何作用,没有任何变化。

你想要啥变化。。。只是一个示例,如果在项目目录下打开 python 文件,会执行后面的命令罢了,如果你不用 lsp 自然没啥用?

项目根目录下的子目录里打开python文件执行,并没用使用这个el文件指定的虚拟python解释器,仍然是用系统的python。

说实话,我觉得对话可能没法继续进行下去。比如说怎么执行的,(e)shell 里面 输入 python?你每次都不描述清楚具体步骤,然后让人猜。

如果你是希望打开 shell 或者 eshell 使用特定的 Conda env,你有用过 GitHub - necaris/conda.el: Emacs helper library (and minor mode) to work with conda environments 么?可以通过这个包的函数手动切换么?如果用过不行,你做了什么,配置是怎么样的,是哪一步遇到了问题?

不好意思,我没说清楚。我是这样操作的,M-x shell进去后,直接是conda虚拟环境的基本环境(base),可以用conda命令切换环境。但如果M-x eshell进去后,不是(base)基本环境,也不能conda命令切换环境。我装了anaconda-mode的,还必须再装一个conda.el吗?

参考这个帖子 Emacs builtin mode 功能介绍 - #83,来自 Youmu eshell 则是完全由 elisp 实现的 shell,语法与与 bash/zsh 的语法不完全一致,所以不支持 conda 命令?

anaconda-mode 和 conda 没啥关系(我也不知道他为啥取这个名字),是提供代码导航,补全等功能的一个包,虽然现在可能更建议用 lsp(看个人喜好)。

conda.el 这个包才是帮助在 Emacs 中与 conda 环境交互的,具体使用请阅读 README,你先确保能通过 M-x conda-env-activateM-x conda-env-deactivate activate 或 deactivate,再考虑自动的事情 GitHub - necaris/conda.el: Emacs helper library (and minor mode) to work with conda environments

另外如果只是希望命令行自动切换,也可以使用 direnv 这个工具

1 个赞

谢谢了,我是被anaconda-mode的名字误导了。

conda.el官方说明里,把下面的语句 (custom-set-variables '(conda-anaconda-home “~/anaconda3/”)) 换成下面这个 (setq conda-anaconda-home (expand-file-name “~/anaconda3”)) 就可以用了。第一个句式为何会出错? 现在可以M-x conda-env-activate RET quantaxis RET了,但是一直在loading

custom-set-variables 一般通过 M-x customize 设定,不手动修改,你就用 setq 好了。确定 anaconda 路径是你的,别的就不知道为啥一直 loading 了,我这边正常。

loading完毕了,现在手动M-x conda-env-activate RET quantaxis RET都正常了。M-x eshell RET仍然不能使用conda命令

你加了这两句了么:

;; if you want interactive shell support, include:
(conda-env-initialize-interactive-shells)
;; if you want eshell support, include:
(conda-env-initialize-eshell)

已经是虚拟环境了。非常感谢。还有个问题没解决,在我自己项目下的自编python模块,导入时总是提示:ModuleNotFoundError: No module named ‘tools’ 不知道怎么回事。

这是 Python 的问题吧,检查 sys.paths?