iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
Software Development

Emacs 來寫程式系列 第 15

[Emacs-15] 用 Emacs 來寫 Python 設定篇

Emacs 編輯器對 Python 的支援

  • 語法檢查:可以使用 flake8, pylint, pycompile, mypy,這裏介紹 flake8
  • 程式自動補全: 使用 company-jedi
  • 程式片段 (snippet): 使用 yasnippet
  • 跳函式定義及函式參照 (reference): 使用 jedi
  • 程式自動美化排版: 使用 autopep8
  • virtualenv 支援:使用 elpy

預先安裝

先安裝 flake8, autopep8

$pip install flake8 autopep8

新加一個檔案 ~/.flake8

[flake8]
ignore = D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-complexity = 10

安裝

Emacs 安裝,開新檔案 ~/.emacs.d/custom/python.el

(use-package python
  :ensure t
  :mode ("\\.py\\'" . python-mode)
  :interpreter ("python" . python-mode)
  :config
  (setq indent-tabs-mode nil)
  (setq python-indent-offset 4)
  (setq flycheck-flake8rc "~/.flake8")
  (use-package py-autopep8
    :ensure t
    :hook ((python-mode . py-autopep8-enable-on-save))
    )
  )
;;
;; company jedi use jedi-core
;;
(use-package company-jedi
  :ensure t
  :config
  (add-hook 'python-mode-hook 'jedi:setup)
  (add-hook 'python-mode-hook (lambda ()
                                (add-to-list (make-local-variable 'company-backends)                                             'company-jedi)))
  )

(use-package elpy
  :ensure t
  :commands (elpy-enable)
  :config
  (setq elpy-rpc-backend "jedi")
  )

直接使用 Python mode: 設定不使用 tab,使用 4 個 spaceindent,設定 flycheck-flake8rc 的位置
使用 autopep8 當儲存程式前美化排版程式。
使用 company-jedi,不直接用 jedi,因為原套件只支持 auto-complete,我習慣使用 company 來做程式補全。
加入 elpy 來支援 virtualenv

使用簡介

  • 自動補全
    第一次使用,請執行 Meta-x jedi:install-server Imgur
    它會在 ~/.emacs.d/elpa 下建立 jedi-core Imgur
    設定成功的話,執行 Ctrl-h vcompany-backends 會有三組 company-backends Imgur

開始打入 imp Imgur
其中 import[k] 是 keyword (關鍵字), importError[c] 是 class (類別)

Meta-x company-diag 檢查 Imgur

  • 程式片段
    如果打完 imp 後按 tab 會啟動 yasnippet Imgur
    因為查看 Meta-x yas-describe-table 會看到有 imp 的關鍵字來啟動 import snippet
    再按一次 enter 就可以輸入要 import 的 lib Imgur

ftab 來展開一個新的 function Imgur

company-jedi 也可以對函式庫做函式補全,例如 Imgur
Ctrl-c ? 可以啟動 jedi-doc 來看函式的文件 (docstring) 如 Imgur

  • 語法檢查
    使用 Ctrl-c ! v 來看 flycheck 狀態,Imgur
    打錯字的話會用特別顏色顯示,使用 Ctrl-c ! l 來列出相關錯誤或警告 Imgur

  • 補全自己定義的函式
    Jedi 不只補全現有的函式庫,自己寫的函式也可以顯示 Imgur

  • 跳到函式定義
    可以使用 jedi:goto-definition (C-c .) 跳到函式的定義處,不管是自己的函式,或是現有的函式庫 Imgur
    使用 jedi:goto-definition-pop-marker (C-c ,) 跳回原呼叫函式

  • 程式美化排版
    Python 有些格式要求,autopep8 可以自動排版,例如原先 Imgur
    經過存檔後,會變成 Imgur

好了,大概介紹了 Emacs 支援 Python 程式編輯的功能,下一篇我們真正來寫一個用 OpenCV 做人臉判別的 Python 程式

相關影片: 請看 Yes

相關簡報: 請看 簡報

相關程式:請看 github

相關資料,請看 我的部落格


上一篇
[Emacs-14] 用 Emacs 來寫 C/C++ 的 OpenCV 程式
下一篇
[Emacs-16] 用 Emacs 來寫 Python 人臉判別
系列文
Emacs 來寫程式30

尚未有邦友留言

立即登入留言