emacs 能自动切换 virtualenv 吗?

想在 emacs 内编辑不同项目时使用不同的 virtualenv,比如开两个 window,切换window就自动换到合适的 virtualenv,有什么好用的办法吗

应该有相应的包,去找找 https://elpa.emacs-china.org/packages/

没用过 virtualenv ,不太清楚它的具体用法。

如果用 pyenv,可以试试这个包 https://github.com/twlz0ne/shim.el

pyenv 有个插件叫做 pyenv-virtualenv,我不知道在安装了插件之后 shim.el 是否正常。

用的 auto-virtualenvwrapper,勉强够用吧

(require 'auto-virtualenvwrapper)
(add-hook 'python-mode-hook #'auto-virtualenvwrapper-activate)
(add-hook 'window-configuration-change-hook #'auto-virtualenvwrapper-activate)
(add-hook 'focus-in-hook #'auto-virtualenvwrapper-activate)
(setq auto-virtualenvwrapper-verbose nil)

但是即使这么设置了,flycheck 还是会用系统的 python,所以如果想让 flycheck 也跟着使用切换后的 virtualenv,需要这么设置

; 设置让 flycheck 使用 virtualenv 中的 pylint
(declare-function python-shell-calculate-exec-path "python")

(defun flycheck-virtualenv-executable-find (executable)
  "Find an EXECUTABLE in the current virtualenv if any."
  (if (bound-and-true-p python-shell-virtualenv-root)
      (let ((exec-path (python-shell-calculate-exec-path)))
        (executable-find executable))
    (executable-find executable)))

(defun flycheck-virtualenv-setup ()
  "Setup Flycheck for the current virtualenv."
  (setq-local flycheck-executable-find #'flycheck-virtualenv-executable-find))

参考 我的博客

1 个赞