zacs
1
大家好!我遇到了一个 emacs 的问题向大家请教一下。
我使用 purcell 的配置开发 python,但是它不会自动激活工程目录中的 .venv 虚拟环境。
然后我在网上搜索后想试试 pyvenv-auto-mode,然而我在 .emacs.d/lisp/init-local.el 中添加了如下代码后,用 projectile 打开 python 文件仍然不会自动激活虚拟环境
(when (maybe-require-package 'pyvenv-auto)
(add-hook 'python-mode
(lambda ()
(pyvenv-auto-mode 1))))
但是我打开 python 文件后手动 M-x pyvenv-auto-mode 它就能激活虚拟环境。
想问下大家都是怎么处理虚拟环境问题的?是否是 purcell 有考虑到这个问题但我不会用?上面这段 lisp 为什么没达到预期效果?
任何建议都可以,先谢谢大家~
Purcell 是用 nix 的,我之前看过他官网的一个视频,他是用 direnv 来激活不同的 python环境。
你不用 nix 的话,建议你自己安装一个 pyevenv
(when (maybe-require-package 'pyvenv)
(add-hook 'python-mode-hook 'pyvenv-mode)
(setq pyvenv-post-activate-hooks
(list (lambda ()
(setq python-shell-interpreter
(concat pyvenv-virtual-env
(if (eq system-type 'windows-nt)
"scripts/python"
"bin/python")))))))
zacs
3
这里我看了下 pyvenv-auto 的源码,它内部已经 hook 了 python-mode ,所以使用下面的代码就可以正常激活工程目录下的 .venv 虚拟环境
(when (maybe-require-package 'pyvenv-auto)
(pyvenv-auto-mode t))
pyvenv-auto
基于 pyvenv
最近才开发的,是为了自动激活虚拟环境。我是直接使用的 pyvenv
,在项目下通过 M-x pyvenv-activate
手动激活。
你使用 pyvenv-auto 的话,已经自动帮你把 pyvenv 这个依赖给装好了。