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 版本。
🏷️
标签
➡️