我使用 emacs 作为 python IDE。我安装了 Flymake,但是,每当我使用 .py 文件时,它都会显示以下错误
错误(flymake):Flymake:无法使用参数(string-operations_flymake.py)启动语法检查进程“pycheckers”:搜索程序:没有这样的文件或目录,pycheckers。 Flymake 将关闭
我的flymake .emacs配置如下:
;; flymake
(add-to-list 'load-path "~/.emacs.d/vendor")
(add-hook 'find-file-hook 'flymake-find-file-hook)
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pycheckers" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
(load "~/.emacs.d/vendor/flymake-cursor.el")
(global-set-key [f10] 'flymake-goto-prev-error)
(global-set-key [f11] 'flymake-goto-next-error)
有关如何解决此问题的任何建议
安装flycheck。应该开箱即用。
我将解释如何在 GNU Emacs 29.4 中使用 Flymake。
假设我们要在这个使用符合 Python 3.10 语法的 Python 文件(参见下面的代码块)上使用 Flymake。请注意,最后一个
print
语句有一个语法错误:它缺少右括号。
print('foo')
print('bar')
print('baz'
我们需要安装Python 3.10的语法检查器。我将安装
flake8
,flymake支持Python的所有可用语法检查器都在python-flymake-command
中。
python3.10 -m pip install flake8
执行命令后,您可以使用
pip show
字段中的 Location
获取其安装位置。
pip show flake8
Name: flake8
Version: 7.1.1
Summary: the modular source code checker: pep8 pyflakes and co
Home-page: https://github.com/pycqa/flake8
Author: Tarek Ziade
Author-email: [email protected]
License: MIT
Location: /home/rodrigo/.local/lib/python3.10/site-packages
Requires: mccabe, pycodestyle, pyflakes
Required-by:
在我的系统中,二进制文件
flake8
应安装在 /home/rodrigo/.local/bin/flake8
中。
我们需要告诉 Emacs 二进制文件
flake8
位于何处,我们有两个选择:(1) 我们可以将 /home/rodrigo/.local/bin/
添加到将启动 Emacs 的 shell 中的 $PATH
,或者 (2) 我们可以添加 /home/rodrigo/.local/bin/
到 Emacs 变量 exec-path
。我将使用(1)。
我们可以通过运行如下所示的命令来启动Emacs。注意:我使用了
emacs -Q
,因此我的任何配置都不会被加载,只是为了展示普通 Emacs 的行为方式。注意:我们不需要加载配置文件,因为在 GNU Emacs 29.4 中,flymake 是内置包。
PATH="/home/rodrigo/.local/bin:$PATH" emacs -Q /tmp/a.py
如果我们执行
flymake-mode
,最后一行应该带有下划线。如果将点移动到下划线,则语法错误将显示在迷你缓冲区中(请参见下面的屏幕截图)。
如果我们执行
flymake-show-buffer-diagnostics
,缓冲区*Flyamke diagnostics for `a.py`*
将被显示(见下面的截图)。