web-dev-qa-db-ja.com

Emacs:flycheckをPython 3に設定するにはどうすればよいですか?

EmacsのflycheckをインストールしましたPython Ubuntu 15.04に。

ただし、ツールを使用すると、endが原因でprint(item, end=' ')の構文が間違っているなどの誤検知が報告されます。

これはPython 3構文であり、構文エラーはflycheckがPython 2。

Python 3に対してflycheckを設定するにはどうすればよいですか?

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
17
Shuzheng

Flycheckには、各 サポートされている言語 のチェッカーがいくつかあります(さらに多くの コミュニティによって提供されます )。それらのほとんどすべてがバッファをチェックするために外部ツールを使用し、それらのほとんどは構成することができます。

サポートされているチェッカーとその構成方法を確認する最も簡単な方法は、イントロスペクションです。 pythonファイルを開いてflycheck-verify-setupを呼び出すか、C-c ! vを押します。これにより、pythonモードで使用される構文チェッカーのリストを含む新しいバッファーが表示されます。すべてのチェッカーは、説明と構成オプションが記載されているドキュメントへのハイパーリンク。

python-flake8python-pylintもないので、変数flycheck-python-pycompile-executable"python3"に設定するだけで、すべて明るく明るくなります。

16
Uwe Koloska

私の場合(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!vflycheck-verify-setupを呼び出すことは非常に役立ちます。

13
Tom

Flycheckは単にパスのどこかにあるはずのpylint実行可能ファイルを呼び出すだけです。その実行可能ファイルがpython2のpipによってインストールされた場合、pylintは、python3のpip(pip3と呼ばれることもある)に対してインストールされた場合、python2構文をチェックし、その後、pylintはpython3構文をチェックします。

どのように進めるかはいくつかの事柄に依存します。

仮想環境を使用している場合、開始するのに最適な場所は このページ flycheckの作成者のドットファイルからです

この行も必要です:(add-hook 'flycheck-mode-hook #'flycheck-virtualenv-setup)

仮想環境を使用していない場合は、pylint実行可能ファイルがpython3用にインストールされていることを確認できます

8
Jules

@Julesが述べたように:

Flycheckは単にパスのどこかにあるはずのpylint実行可能ファイルを呼び出すだけです。

したがって、正しいflake8バージョンがemacs内でアクセス可能であることが重要になります。 pipenvを使用しているため、最初にプロジェクトの環境内にflake8をインストールしてから、emacsを起動する前に環境がアクティブ化されていることを確認してください。

プロジェクトのルートディレクトリ内から:

pipenv install flake8
pipenv Shell

その後、コマンドラインからemacsを起動すると、flycheckがプロジェクトの正しいバージョンのflake8に接続します。

2
vaer-k