Making Emacs use correct Python interpreter in a virtual environment
I like to be able to test things interactively in a Python shell when exploring a new package. I also don’t like to exit Emacs when I don’t have to. So I’d like to be able to run
C-c C-p (or
run-python) directly from Emacs.
I use the
pyvenv package to manage virtual environments within Emacs. It works well, but it doesn’t automaticlly set the correct Python interpreter that I expect when I change virtual environments.
So I added this to my
(use-package pyvenv :ensure t :config (pyvenv-mode t) ;; Set correct Python interpreter (setq pyvenv-post-activate-hooks (list (lambda () (setq python-shell-interpreter (concat pyvenv-virtual-env "bin/python3"))))) (setq pyvenv-post-deactivate-hooks (list (lambda () (setq python-shell-interpreter "python3")))))
Now, when I press
C-c C-p, the Python shell interpreter that starts is the one in the virtual environment.
So my workflow is this: activate the virtual environment with
M-x pyvenv-activate, experiment in a Python shell (started with
C-c C-p), profit.
lsp-mode and Python Language Server for IDE-like features, but that is another post…)