TIL: 自动使用项目虚拟环境的 Python

💡 原文中文,约1000字,阅读约需3分钟。
📝

内容提要

在 Emacs 中,使用 C-c C-p 打开 Python shell 时,默认使用系统 Python。Einar Mostad 提供了一个函数,可以自动查找项目目录中的虚拟环境 Python 可执行文件,若存在则使用该版本,否则使用系统版本。将该函数添加到 python-mode-hook 后,打开 Python 文件时会自动设置。

🎯

关键要点

  • 在 Emacs 中,使用 C-c C-p 打开 Python shell 时,默认使用系统 Python。
  • Einar Mostad 提供的函数可以自动查找项目目录中的虚拟环境 Python 可执行文件。
  • 如果找到虚拟环境的 Python 可执行文件,则使用该版本;否则使用系统版本。
  • 将该函数添加到 python-mode-hook 后,打开 Python 文件时会自动设置。
  • directory-files-recursively 函数接受正则表达式,用于匹配虚拟环境中的 Python 可执行文件。
  • project-current 函数返回当前项目信息,nth 2 用于获取项目根目录。
  • setq-local 用于将 python-shell-interpreter 设置为 buffer-local,不影响其他 buffer。

延伸问答

如何在 Emacs 中使用项目的虚拟环境 Python?

可以通过 Einar Mostad 提供的函数自动查找项目目录中的虚拟环境 Python 可执行文件,并在打开 Python 文件时使用该版本。

Einar Mostad 的函数是如何工作的?

该函数会递归查找项目目录中的 Python 可执行文件,如果找到则使用该版本,否则使用系统版本。

如何将该函数添加到 python-mode-hook?

可以使用 `(add-hook 'python-mode-hook 'emo-python-virtualenv)` 将该函数添加到 python-mode-hook 中。

directory-files-recursively 函数的作用是什么?

该函数用于递归查找目录中的文件,并可以接受正则表达式来匹配特定文件,例如虚拟环境中的 Python 可执行文件。

如何确保在不同 buffer 中不影响 Python shell 的设置?

可以使用 `setq-local` 将 `python-shell-interpreter` 设置为 buffer-local,这样不会影响其他 buffer 的设置。

如果项目没有虚拟环境,Emacs 会使用什么?

如果项目没有找到虚拟环境的 Python 可执行文件,Emacs 将使用系统默认的 Python 版本。

➡️

继续阅读