请帮忙:pylint 在 Emacs23 中无法使用

4 投票
3 回答
1440 浏览
提问于 2025-04-16 04:47

我在Windows XP上用Emacs配合Pylint。我的Emacs版本是EmacsW32 23.1,Pylint是0.21.3,Python版本是2.5。在用easy_install安装了Pylint之后,我把从Emacs Wiki上复制的几行代码加到了Emacs的初始化文件里。

当我在一个.py文件上启动flymake模式时,我能看到flymake开始进行语法检查,模式状态变成flymake*,然后过了几秒又变回了flymake。但是没有报告任何错误,也没有语法错误的高亮显示

我尝试在命令行中使用Pylint,结果用命令“pylint test.py”可以正常工作,并且在同一个文件上报告了语法错误。

我甚至尝试清空我的.emacs文件,但这也没有解决问题。

有人能帮我解决这个问题吗?非常感谢。

(when (load "flymake" t)
  (defun flymake-pylint-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 "epylint" (list local-file))))

  (add-to-list 'flymake-allowed-file-name-masks
           '("\\.py\\'" flymake-pylint-init)))

问题更新: 我在命令行提示符下尝试了“pylint”和“epylint”。这是否意味着epylint有问题?

C:\Projects>pylint test_lib.py
No config file found, using default configuration
************* Module test_lib
E: 13: invalid syntax

C:\Projects>epylint test_lib.py
'test_lib.py':1: [F] No module named 'test_lib.py'

C:\Projects>epylint
Traceback (most recent call last):
  File "C:\Python25\Scripts\epylint", line 5, in <module>
    pkg_resources.run_script('pylint==0.21.3', 'epylint')
  File "C:\Python25\Lib\site-packages\pkg_resources.py", line 489, in run_script

    self.require(requires)[0].run_script(script_name, ns)
  File "C:\Python25\Lib\site-packages\pkg_resources.py", line 1207, in run_script
    execfile(script_filename, namespace, namespace)
  File "c:\python25\lib\site-packages\pylint-0.21.3-py2.5.egg\EGG-INFO\scripts\epylint", line 3, in <module>
    epylint.Run()
  File "c:\python25\lib\site-packages\pylint-0.21.3-py2.5.egg\pylint\epylint.py", line 93, in Run
    lint(sys.argv[1])
IndexError: list index out of range

3 个回答

0

这是我个人的一些看法...

(defun flymake-pylint-init ()
  (list python-python-command
        (list "-m" "pylint.lint" "-f" "parseable" buffer-file-name)))

(add-to-list 'flymake-allowed-file-name-masks
              '("\\.py\\'" flymake-pylint-init))

在WinXP、Linux和OS-X上进行了测试。

0

我在Linux上使用的是emacs22-nox,所以你可能需要在网上搜索一下“font-lock-mode”,看看怎么在你的电脑上操作。首先,按下 Esc+x 进入emacs的命令行。现在你可以输入font-lock-mode,然后按回车(命令行在屏幕底部)。我在一个客户的服务器上也遇到过同样的问题。他们的emacs默认没有开启font-lock-mode。希望这能帮到你。

3

被flymake调用的程序应该返回0的错误级别,否则flymake会认为在调用子进程时出现了问题。

通过阅读这个回答那些补丁,我成功地让flymake与pylint一起工作:

在Windows上,但在其他类Unix系统上也可以做类似的事情,我创建了一个批处理文件pycheckers.bat(可以在你的PATH中找到):

pylint -f parseable -r n --disable=C,R,I %1 %2 %3 %4 %5 %6 %7 %8 %9
exit /b 0

在我的.emacs文件中,我添加了这些行:

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

现在,当我打开一个.py文件时,我会执行M-x flymake-mode来激活它。flymake能够毫无问题地找到我的Python错误和警告。

注意,你可以在pycheckers.bat文件中添加其他工具。

撰写回答