Emacs: Как установить flycheck на Python 3?

Я установил flycheck для Emacs Python на Ubuntu 15.04.

Однако при использовании инструмента он сообщает о ложных срабатываниях, таких как print(item, end=' '), является неправильным синтаксисом из-за end.

Я знаю, что это синтаксис Python 3, и что синтаксическая ошибка вызвана функцией flycheck для Python 2.

Как установить флажок для Python 3?

В документации по Github он не упоминает, поддерживает ли он Python 2 или 3 (только Python).

Кроме того, если это возможно, дайте мне подсказку, почему инструмент elpa не дает предложений, например. базовые типы Python.

Мой файл init.el находится здесь:

;; init.el --- Emacs configuration

;; INSTALL PACKAGES
;; -------------------------------------

(require 'package)

;; Primary Emacs repository is MELPA
(add-to-list 'package-archives
         '("melpa" . "http://melpa.org/packages/") t)

(package-initialize)
(when (not package-archive-contents)
  (package-refresh-contents))

(defvar myPackages
  '(better-defaults
    elpy ;; Emacs Lisp Python Environment
    flycheck ;; flycheck Python syntax-checking
    material-theme))

(mapc #'(lambda (package)
      (unless (package-installed-p package)
        (package-install package)))
      myPackages)

;; BASIC CUSTOMIZATION
;; -------------------------------------

(setq inhibit-startup-message t) ;; hide startup message
(load-theme 'material t) ;; load material theme
(global-linum-mode t) ;; enable line numbers globally
(global-flycheck-mode) ;; enable flycheck globally

;; PYTHON CONFIGURATION
;; -------------------------------------
(elpy-enable) ;; enable elpy

;; use flycheck, not flymake with elpy
(when (require 'flycheck nil t)
  (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
  (add-hook 'elpy-mode-hook 'flycheck-mode))

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(python-shell-interpreter "python3"))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

;; init.el ends here

Ответ 1

Flycheck имеет несколько шашек для каждого поддерживаемый язык (и многие другие предоставленный сообществом). Почти все они используют внешние инструменты для проверки буферов, и большинство из них можно настроить.

Самый простой способ узнать, какие шашки поддерживаются и как их настроить, - это интроспекция. Откройте файл python и вызовите flycheck-verify-setup или нажмите C-c ! v. Это показывает вам новый буфер со списком синтаксических проверок, используемых в режиме python. Каждая контрольная панель является гиперссылкой на документацию, где она описана, и указаны параметры конфигурации.

Так как у меня нет python-flake8 и python-pylint, я просто устанавливаю переменную flycheck-python-pycompile-executable на "python3", и все ярко и весело.

Ответ 2

Для моего случая (без pipenv) я заработал, установив шашки в python3:

$ pip3 install flake8 pylint mypy

И добавьте следующее в мой ~/.emacs.c/custom.el, чтобы Flycheck использовал python3 для шашек:

(custom-set-variables
 '(flycheck-python-flake8-executable "python3")
 '(flycheck-python-pycompile-executable "python3")
 '(flycheck-python-pylint-executable "python3"))

Как заметил @uwe-koloska, использование Ctrl-c ! v для вызова flycheck-verify-setup очень полезно!

Ответ 3

Flycheck просто вызывает исполняемый файл pylint, который должен быть где-то на вашем пути. Если этот исполняемый файл был установлен pip для python2, тогда pylint проверит синтаксис python2, если он был установлен для pip (иногда называемый pip3) для python3, тогда pylint проверит синтаксис python3.

Как действовать зависит от нескольких вещей.

Если вы используете виртуальные среды, то хорошим местом для начала является на этой странице от файла flycheck creator dotfiles

Эта строка также необходима: (add-hook 'flycheck-mode-hook #'flycheck-virtualenv-setup)

Если вы не используете виртуальные среды, вы можете просто убедиться, что исполняемый файл pylint был установлен для python3

Ответ 4

Как упомянул @Jules:

Flycheck просто вызывает исполняемый файл Pylint, который должен находиться где-то на вашем пути.

Поэтому становится критически важным, чтобы в emacs была доступна правильная версия flake8. Поскольку вы используете pipenv, вы должны сначала установить flake8 в среде вашего проекта, а затем убедиться, что ваша среда активирована перед запуском emacs.

Из корневого каталога вашего проекта:

pipenv install flake8
pipenv shell

Затем вы можете запустить emacs из командной строки, и flycheck свяжется с верной версией flake8 для вашего проекта.