如何设置Emacs来使用指定的Python虚拟环境?

16

我在各种任务中都使用Emacs,现在开始学习Python编程,想继续使用Emacs来编写Python代码。

我已经为Python3设置了一个虚拟环境,并且它也按预期工作。我还安装了Emacs 24.5和最新版本的Emacs Prelude

当我编辑Python源文件时,所有预期的功能都可以正常使用--代码自动完成、对象检查等等--但是这只针对我的系统范围内的Python安装,而不是我为项目设置的虚拟环境。

如何告诉Emacs在给定项目中使用虚拟环境?

4个回答

13

我知道这是一个相当旧的帖子,但对于那些来到这里寻找答案的人,更为更新的答案可能会有用。

我使用pyvenv,主要使用pyvenv-workon

你可以试一下。希望它能适用于你。


我在使用 M-x package-install 安装 pyvenv 时找不到该软件包。 - alper
@alper https://melpa.org/#/pyvenv你可能需要执行 M-x package-refresh-contents - Mandar Vaze

11

Elpy 内置了对虚拟环境的支持,可以通过 Pyvenv 安装。 Pyvenv 也可以作为独立软件包安装。2014 年,Pyvenv 增加了对项目特定虚拟环境的支持,但我自己没有进行过实验,不知道它的工作效果如何。

如果您想在 Emacs 中编写 Python 代码,我建议安装 Elpy。它真正简化了创建良好环境的流程,并且是模块化的,因此您可以随时停用部分内容,当您决定要更具针对性的软件包时。

您还可以查看 virtualenvwrapper.el,尽管 Pyenv 看起来具有更多功能。还有 auto-virtualenv,它试图自动发现和激活虚拟环境。


我尝试了elpy,但在尝试自动设置RPC venv时它总是出问题。我没有耐心(或知识)坚持使用它的venv处理方式。最终我使用了优秀的https://github.com/marcwebbie/auto-virtualenv根据.venv目录的存在设置venv。 - RichieHH

3

好的,这篇文章帮助我了解这个主题。

将以下内容添加到您的init.el或~.emacs文件中:

(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")))))

下次创建虚拟环境时,请在您想要的目录中创建(我总是称其为env,并将其安装在项目目录中)。 python -m venv env 然后打开emacs M-x pyvenv-activate RET dir_to_the_environment/env 最后使用C-c C-p运行Python子进程,使用该环境。所有功劳归功于fredrikmeyer

太棒了。当你想使用LSP或Eglot而不是Elpy时,这个方法非常适用。 - groceryheist

1
作为一个 Python 初学者,对于我来说最简单的解决方案是使用 https://github.com/marcwebbie/auto-virtualenv,因为 elpy venv 由于某种原因无法工作。我在项目根目录下创建了一个虚拟环境,并添加了 .projectile 文件以确保安全,在按照 Github readme 中的文档设置后,它就可以“轻松运行”了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接