如何使用pyflakes和pylint检查代码使用Emacs Flymake模式进行python?

时间:2009-08-11 11:47:54

标签: python emacs pylint pep8 pyflakes

为了检查python模式中的代码,我使用flymake和pyflakes

另外我想用pylint检查代码样式(pep8)(与pyflakes在同一页面上的描述)

此解决方案有效。 但我无法配置flymake与pyflakes和pylint一起工作。 我该怎么办?

4 个答案:

答案 0 :(得分:35)

好吧,flymake只是在寻找一个可执行命令,它以预定义的格式输出行。例如,您可以制作一个shell脚本,它将连续调用您想要的所有检查器......

您还必须通过返回errorlevel 0来确保脚本结束。所以这是一个示例:

这就是我在“pycheckers”脚本中所做的:

#!/bin/bash

epylint "$1" 2>/dev/null
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
true

对于emacs lisp部分:

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

答案 1 :(得分:7)

通常可以在python-mode-hook中启用flymake模式。不幸的是,这会导致诸如py-execute-buffer之类的问题,这些问题会创建临时缓冲区来调用钩子,然后由于缺少“真实文件”而导致flymake模式打嗝。解决方案是修改添加钩子的条件: - 例如我的:

(add-hook 'python-mode-hook 
      (lambda () 
        (unless (eq buffer-file-name nil) (flymake-mode 1)) ;dont invoke flymake on temporary buffers for the interpreter
        (local-set-key [f2] 'flymake-goto-prev-error)
        (local-set-key [f3] 'flymake-goto-next-error)
        ))

答案 2 :(得分:0)

您可能需要在这里查看Lisp脚本(http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html),这有助于检查PEP8 a la pep8.py.我不使用pyflakes或pylint,但我想你可以很容易地调整它以与其他跳棋一起工作。

答案 3 :(得分:0)

Windows批量版本的vaab pychechker

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1