今回は、python関係を見直してみた。 あくまで初心者用なので、projectとかtestとかは考えてない。 補完と文法チェックが出来ればよし。
環境は、debian(buster)で、pyenvを使って3.7。 virturalenvは使わず、globalにしている。 モジュールは、pipでインスト。
emacsは26.1で、use-package + ivy + company な環境。
company-jedi は使ってない。
基本はいつもどおり、コピペ。
(201912)pyvenv, jedi-core
pipenv から require されているので、pyenv だけ有効にした。(210912)
(use-package pyvenv :ensure t)
これまで pyenv-mode を使ってたが、 elpy が pyvenv を使っているので、 今回、 pyvenv にした。
jediは、elpy-module-companyがあるので、jedi-core を インストすれば良いようだ。 elpy-module-company and company-jedi are kind of redondant( https://github.com/jorgenschaefer/elpy/issues/1397)
下の設定は無効化。
(use-package pyvenv :ensure t :mode ("\\.py\\'" . pyvenv-mode) :interpreter ("python" . pyvenv-mode) :after projectile :config (use-package jedi-core :ensure t :config (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:complete-on-dot t) (setq jedi:use-shortcuts nil) ) )
pipenv, jedi-core(201906)
pipenv を使ってみようと、 変更してみた。 pipenv 自体の使い方は、以下など参考にしてやってみた。
これまでは、home ディレクトリ全体を、pyenv で 3.7 にしてあるだけで、 作業フォルダ毎の仮想環境は使っていなかった。
まだ、一つの作業でしか試してないが、 なんとか使えているように思う。 のだが、emacsの反応が少し遅くなった?ように感じる。
projectile は一応動いているかも、という状態で意識的に使ってないない。 まあ、プロジェクトなんて僅かだから。
(use-package pipenv :ensure t :diminish (pipenv-mode . "penv") :hook (python-mode . pipenv-mode) :init (setq pipenv-with-projectile nil) ;; Disable Projectile integration ;; まだ使い熟せてないし、理解もできてないから。 ;; (setq ;; pipenv-projectile-after-switch-function ;; #'pipenv-projectile-after-switch-extended) :config (setq pipenv-with-flycheck nil) ;; Use the pipenv env. when searching for Flycheck executables. ) ;; [updata 201912] ;; ;; (use-package pipenv :ensure t ;; :hook (python-mode . pipenv-mode) ;; :custom ;; (pipenv-projectile-after-switch-function #'pipenv-projectile-after-switch-extended) ;; ) ;; C-c C-p a pipenv-activate ;; C-c C-p d pipenv-deactivate ;; C-c C-p s pipenv-shell (use-package jedi-core :ensure t :config (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:complete-on-dot t) (setq jedi:use-shortcuts nil) ; M-. and M-, )
pipenv のメモ
ディレクトリ作成、移動、インスト
$ mkdir hoge $ cd hoge # 仮想環境の構築 # $ pipenv install $ pipenv --python 3.7,3 # $ pipenv --python 2.7.14 Python 2.7.14 を使う # PipfileとPipfile.lockが作成される。 # + Pipfile => 設定ファイル # + Pipfile.lock => インストールしたライブラリ情報
Pipenvシェルを有効化、パッケージ管理
$ pipenv shell $ pipenv install pylint $ pipenv install --dev epc # pipenv install --dev XXXX 開発時しか使わないなら $ exit ::停止 # emacs で使うやつ。 # epc, jedi, autopep8, pylint, yapf, isort, black # black は --pre が必要だった # Pipfile に記述して、 # $ pipenv update # で全パッケージをインスト、更新できる
python-mode
elpyを使うには python-mode が事前に有効になっている必要がある。 折り畳みは、buildinの outline-minor-mode を使っている。
Debian のパッケージでインストされる /usr/share/emacs/26.1/lisp/progmodes/python.el.gz を使うようにした。 (201908)
;; [add 201912] (add-to-list 'interpreter-mode-alist '("python3" . python-mode)) ;; (use-package python-mode :ensure nil :mode ("\\.py\\'" . python-mode) :interpreter ("python" . python-mode) ;; :after pyvenv-mode :config (python-mode) ;; (201912) (setq python-indent-guess-indent-offset-verbose nil) ;; (201912) ;; Non-nil means to emit a warning when indentation guessing fails. ;; (setq electric-indent-local-mode nil) (setq py-smart-indentation t) ;; new in ver 6.2.4 ;; (setq electric-indent-local-mode -1) ;; (setq indent-tabs-mode nil) ;; original nil (201912) ;; (setq py-indent-tabs-mode nil) ;; original nil ;; (setq python-indent-offset 4) ;; default 4 ;; ;; (setq python-check-command "~/.pyenv/shims/pylint") ;; 重複、コメントアウト (setq python-shell-interpreter "python") ;; (201912) (setq python-shell-completion-native-disabled-interpreters '("python")) ;; (201912) ;; (setq python-shell-interpreter-args "-i") ;; original "-i" ;; (flymake-mode nil) ;; (201912) (outline-minor-mode t) (setq python-check-command "~/.pyenv/shims/pylint") ;; (201912) ;; ;; (201912) move to eldoc config. ;; (eldoc-mode t) ;; (setq eldoc-echo-area-use-multiline-p t) ;; (setq eldoc-idle-delay 3) ;; (setq eldoc-minor-mode-string nil) ;; (setq python-fill-docstring-style 'pep-257) ;; original pep-257 )
elpy(includ company)
基本の設定に、上記と、gtags があれば、初心者の私には十分だと思うが、 elpy を入れると編集が少し楽になると感じている。
(use-package find-file-in-project :ensure t :after projectile ) ;; (use-package elpy :ensure t :diminish (elpy-mode . "elpy") :after python-mode :hook (python-mode . elpy-enable) ;; ここを elpy-mode にすると、python-modeになってないと怒られる。 ;:init ;(package-initialize) ;; 無くても大丈夫そう :config (elpy-mode) ;for emacs26.1 is a new flymake. (when (require 'flycheck nil t) (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) (add-hook 'elpy-mode-hook 'flycheck-mode)) (setq elpy-syntax-check-command "pylint") ; flake8 がうまく動いてくれないから。きっとversionが附合してない。 ; 初心者にはpylintよりflake8が向いていると、どこかで読んだ記憶がある。 (delete 'elpy-module-highlight-indentation elpy-modules) ;; elpy は https://github.com/antonj/Highlight-Indentation-for-Emacs ;; を使ってる。 ;; https://www.reddit.com/r/emacs/comments/8i4x57/is_it_possible_to_disable_elpy_minibuffer_output/ ;; Original value was when-shell-not-visible (201912) (setq elpy-shell-echo-output nil) ;; https://github.com/jorgenschaefer/elpy/issues/1416 (201912) (setq elpy-eldoc-show-current-function nil) (outline-minor-mode t) ;; (201912) (flymake-mode nil) ;; (201912) 記入漏れ )
elpy-config の結果は以下。
Elpy Configuration Virtualenv........: None RPC Python........: 3.7.3 (/home/hogehoge/.pyenv/shims/python) Interactive Python: python (/home/hogehoge/.pyenv/shims/python) Emacs.............: 26.1 Elpy..............: 1.18.0 Jedi..............: 0.15.1 Rope..............: 0.14.0 Autopep8..........: 1.4.4 Yapf..............: 0.29.0 Black.............: 19.3b0 Syntax checker....: pylint (/home/hogehoge/.pyenv/shims/pylint)
elpy-module-company が上手く使えているのかは不明。それなりに使えていると思う。
shell buffer、TEST、Djangoは使ってない。
C-c C-r r (elpy-refactor) は rope を使うらしいが、理解できてない。
リファクタリング (refactoring) とは、コンピュータプログラミングにお いて、プログラムの外部から見た動作を変えずにソースコードの内部構造を 整理することである。wikipedia
flymake は flychek のキーバインドを使う。
elpyのキーバインドは、flycheckに対応していないようだ。
カーソル移動は普通。
カーソルのブロック単位での移動は c-up/down(at the line head), right/left
対象領域の移動させるのは M-up/down (elpy-nav-move-line-or-region-up/down) 、
インデントは M-left/right (elpy-nav-indent-shift-left/right) 。
searchは、 counsel-git-grep 、 deadgrep を主に使うので、elpyの機能は使ってない?
- c-c c-f (elpy-find-file: Find a file in the current project)
- C-c C-s (elpy-rgrep-symbol)
- M-TAB (elpy-company-backend)
naviは、 counsel-gtags を使ってるので、elpyの機能はほとんど使ってない。
- M-. / M-* (elpy-goto-definition) (pop-tag-mark)
- C-x 4 M-. (elpy-goto-definition-other-window)
- C-c C-o (elpy-occur-definitions) imenu-list より見易い。
C-c C-d (elpy-doc) try and find the documentation for that object
C-c C-r f (elpy-format-code)
C-c C-r i (elpy-importmagic-fixup) は使えてない。
C-c C-e (elpy-multiedit-python-symbol-at-point)
うまく動かない。occur を使えばよさそう。
importmagic, py-isort
import関係は、このふたつ。 importmagic は便利そうなんだが使えてない。 結局、 py-isort を叩いている。
;; 止め。リアルタイムで動くのは、遅くなるから。(201912) ;;(use-package importmagic :ensure t ;; :defer t ;; :diminish importmagic-mode ;; :after python-mode ;; :config ;; (add-hook 'python-mode-hook 'importmagic-mode)) (use-package py-isort :ensure t :defer t :after python-mode )
highlight-indent-guides(201908up)
インデントガイドは、highlight-indent-guidesを使っている。
インデントガイドは必要だ。
elpy で使ってるやつにすればよかったかもと思ったが、
他でも使うと思うので、汎用性のあるやつとして選んだのだと思う。
(use-package highlight-indent-guides :ensure t :diminish highlight-indent-guides-mode :hook (prog-mode . highlight-indent-guides-mode) (rst-mode . highlight-indent-guides-mode) :config (setq highlight-indent-guides-method 'column) ;; fill,column,character (setq highlight-indent-guides-auto-enabled t) ;; automatically calculate faces. )
まだ使えてないものが多いのだが、 一応、使えているような気になれてるので、 よし、としておこう。
0 件のコメント:
コメントを投稿