0

我正在跑步emacs24,我是 emacs 的新手。我正在检查 Python 2.7 中的一些代码flycheck。当我检查语法时,我得到:

error F821 undefined name 'xrange' (python-flake8)

我知道这xrange不在 Python3 中,但我在 Python 2.7 中。我猜它被配置为在 Python 3 上运行,因为也会raw_input产生相同的错误。

我该如何解决?

4

2 回答 2

0

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,您甚至可以将其自动化。

于 2016-09-20T10:31:44.540 回答
0

我在同样的问题上苦苦挣扎,可以推荐使用我的解决方案: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 中,这是与其他开发人员共享的便捷方式。

于 2016-09-20T17:26:51.057 回答