我正在跑步emacs24
,我是 emacs 的新手。我正在检查 Python 2.7 中的一些代码flycheck
。当我检查语法时,我得到:
error F821 undefined name 'xrange' (python-flake8)
我知道这xrange
不在 Python3 中,但我在 Python 2.7 中。我猜它被配置为在 Python 3 上运行,因为也会raw_input
产生相同的错误。
我该如何解决?
Flycheck 不关心 Python 2 和 Python 3 之间的区别。它运行在flake8
中找到的第一个可执行文件exec-path
,在您的情况下,这显然是为 Python 3 安装的 flake8。
您需要为 Python 2 安装 flake8 并将 Flycheck 指向该可执行文件,方法是将目标目录放入exec-path
或使用M-x flycheck-set-checker-executable
.
我建议为您的项目使用专用的 Python 2 virtualenv 并制作 Emacs 并设置python-shell-virtualenv-root
到 Python 缓冲区中的那个目录(例如使用Directory Variables)。然后你可以指向exec-path
那个 virtualenv。使用一点自定义的 Emacs Lisp,您甚至可以将其自动化。
我在同样的问题上苦苦挣扎,可以推荐使用我的解决方案:https ://github.com/rmuslimov/flycheck-local-flake8 。这很简单——它会强制flycheck使用你的 virtualenv 中正确的flake8可执行文件。
我建议添加setup.cfg
到您从事的每个 python 项目中。Flake8 有一些可以在那里定义的环境变量。例如这里是我的:
[metadata]
name=fastttrace
version=release.5.9.0
[flake8]
exclude = tests/*, migrations/*
ignore = D100,D101,D102,D103,D205,D400,E731
import-order-style = google
max-complexity = 15
它允许您在每个项目中拥有单独的 flake8 规则并将它们存储在 repo 中,这是与其他开发人员共享的便捷方式。