flycheck:未定义名称'xrange'

时间:2016-09-20 09:49:10

标签: python emacs flake8 flycheck

我正在运行<div class="horizontal-ruler"> <div class="h-ruler-first-line"></div><!-- --><div class="ruler-unit">24"</div><!-- --><div class="h-ruler-second-line"></div> </div>而且我是emacs的新手。我在Python 2.7中使用emacs24检查了一些代码。 当我检查语法时,我得到:

flycheck

我理解error F821 undefined name 'xrange' (python-flake8) 不在Python3中,但在这里我使用的是Python 2.7。我猜它被配置为在Python 3上运行,因为xrange也会产生相同的错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

Flycheck并不关心Python 2和Python 3之间的区别。它运行它在flake8中找到的第一个exec-path可执行文件,在您的情况下,它显然是安装了一个flake8对于Python 3。

您需要为Python 2安装flake8并将Flycheck指向该可执行文件,方法是将目标目录放在exec-pathM-x flycheck-set-checker-executable中。

我建议为您的项目使用专用的Python 2 virtualenv,并在Python缓冲区中创建Emacs并将python-shell-virtualenv-root设置为该目录(例如使用Directory Variables)。然后你可以将exec-path指向那个virtualenv。只需一点custom Emacs Lisp,您甚至可以实现自动化。

答案 1 :(得分:0)

我正在努力解决同样的问题,并建议使用我的解决方案:https://github.com/rmuslimov/flycheck-local-flake8。这是微不足道的 - 它会迫使 flycheck 使用你的virtualenv中正确的 flake8 可执行文件。

我建议为你工作的每个python项目添加setup.cfg。 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中,这是与其他开发者共享的便捷方式。