#author("2024-01-22T00:07:15+09:00","","") #author("2024-01-22T00:08:49+09:00","","") #topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#n1d49368] #contents(); //////////////////////////////////////////////////////////////////////////////// * python 開発環境 [#n0ecd234] - emacs 上での python 開発環境としては以下を導入することが出来る。 -- lint -- フォーマッタ - また、 emacs では python コードを編集するための python-mode があるので、これが起動するときのフック ''python-mode-hook'' に引っ掛けて動作するようにしていく。 //////////////////////////////////////////////////////////////////////////////// * 環境構築 [#q342595b] //============================================================================== ** lint の設定(flycheck を使用) [#z01db224] + flycheck の導入 -- flycheck が導入済みであれば、flycheck のみで静的解析が実行される為、他に特に設定は必要ない。 -- flycheck が導入済みであれば、flycheck のみで静的解析が実行される為、他に特に設定は必要ない。(別途手動インストールなどした pylint を flycheck で使うようにしたければ、そのように設定することもできる) -- debian パッケージを導入する場合は、 ''elpa-flycheck'' をインストールする。 -- 又は、開発リポジトリを取ってきて、宜しく配置する(但し、依存するリポジトリも取ってくる必要がある): https://github.com/flycheck/flycheck.git https://github.com/magnars/dash.el.git https://git.savannah.gnu.org/git/emacs/elpa.git + flycheck を設定する -- ディストリビューションのパッケージを導入する場合、特にすることはない筈。 -- 手動でリポジトリを取ってきた場合の設定例は以下の通り: (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/company") load-path)) ; depended: dash (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/dash") load-path)) (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/flycheck") load-path)) ; flycheck (require 'flycheck) ;; エラーをツールチップ表示する (with-eval-after-load 'flycheck (flycheck-pos-tip-mode)) (add-hook 'after-init-hook #'global-flycheck-mode) //============================================================================== ** formatter の設定 [#cd0de45d] - pytohn フォーマッタは幾つかあるが、ここでは、以下を前提とした環境構築を行う。 -- autopep8 --- フォーマッタ -- isort --- import 文の妥当性を解析する //------------------------------------------------------------------------------ *** autopep8 の導入 [#j5a38d10] - emacs には py-autopep8.el があるので導入する。 -- debian パッケージを導入する場合は ''elpa-py-autopep8'' -- 手動でリポジトリを取得する場合は https://github.com/fujimisakari/py-autopep8.el.git //------------------------------------------------------------------------------ *** isort の導入 [#o91f34b7] - emacs には py-isort.el があるので導入する。 -- debian パッケージの場合は ''elpa-py-isort'' を導入する。 -- 手動でリポジトリを取得する場合は https://github.com/paetzke/py-isort.el.git //------------------------------------------------------------------------------ *** autopep8 と isort の設定 [#c8ae4823] + python-mode 固有の設定になるので、ひとまとめにした設定ファイル ''python-mode.conf.el'' を作る。 ;;; python-mode.conf.el --- settings for python-mode ;;; Commentary: ;;; see also: https://qiita.com/fujimisakari/items/74e32eddb78dff4be585 ;;; Code: (setq python-mode-hook #'(lambda () (if (which-function-mode nil) (which-function-mode)) ; ; 現在の関数名をモードラインに表示 ;; formatter (require 'py-autopep8.conf) ;; clang-format.conf.el で設定したキーに合わせておく (define-key python-mode-map (kbd "C-c i") 'py-autopep8-region) ; 選択リジョン内のコード整形 (define-key python-mode-map (kbd "C-c u") 'py-autopep8) ; バッファ全体のコード整形 ;; import 文を適切な順序に自動で sort する (require 'py-isort.conf) ;; linter ;; (when (expand-file-name "pylint") ; システム上に pylint があるときだけ ;; ;; flycheck で使う linter の設定 ;; ;; flycheck では勝手に linter を探してくれるらしく、パスの通ってない ;; ;; ところに置かれている物を使うのでない限り、以下の linter を指定する設定は不要な模様 ;; ; (setq flycheck-python-pylint-executable "pylint") ; for flycheck ;; ; (setq flycheck-python-flake8-executable "flake8") ; for flycheck ;; ; (setq flycheck-python-mypy-executable "mypy") ; for flycheck ;; ) ) ) (provide 'python-mode.conf) ;;; python-mode.conf.el ends here + これを、${HOME}/.emacs.d/init.el 等から適当に呼ぶようにする。 ; python-mode 関係の設定 (require 'python-mode.conf)