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 вы можете даже автоматизировать это.