flycheck: неопределенное имя 'xrange'

Я бегу emacs24 и я новичок в Emacs. У меня есть код в Python 2.7, который я проверяю flycheck, Когда я проверяю синтаксис, я получаю:

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

Я это понимаю xrange не в Python3, но здесь я на Python 2.7. Я думаю, что он настроен для работы на Python 3, так как также raw_input дает ту же ошибку.

Как это исправить?

2 ответа

Я боролся с той же проблемой, и могу рекомендовать использовать мое решение для этого: https://github.com/rmuslimov/flycheck-local-flake8. Это тривиально - и заставит flycheck использовать подходящий исполняемый файл flake8 из вашего virtualenv.

Я бы рекомендовал добавить 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 для каждого проекта и хранить их в репозитории, что является удобным способом поделиться с другими разработчиками.

Flycheck не заботится о разнице между Python 2 и Python 3. Он запускает первый flake8 исполняемый файл, который он находит в exec-pathи в вашем случае это, очевидно, flake8, установленный для Python 3.

Вам нужно установить flake8 для Python 2 и указать Flycheck на этот исполняемый файл, либо поместив целевой каталог в exec-path или с M-x flycheck-set-checker-executable,

Я рекомендую использовать выделенный Python 2 virtualenv для вашего проекта и сделать Emacs и установить python-shell-virtualenv-root в этот каталог в буферах Python (например, с переменными каталога). Тогда вы можете указать exec-path к этому virtualenv. С небольшим количеством пользовательских Emacs Lisp вы можете даже автоматизировать это.

Другие вопросы по тегам