先安裝 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 個 space 做 indent,設定 flycheck-flake8rc 的位置
使用 autopep8 當儲存程式前美化排版程式。
使用 company-jedi,不直接用 jedi,因為原套件只支持 auto-complete,我習慣使用 company 來做程式補全。
加入 elpy 來支援 virtualenv
Meta-x jedi:install-server
Ctrl-h v
看 company-backends
會有三組 company-backends
開始打入 imp
其中 import[k] 是 keyword (關鍵字), importError[c] 是 class (類別)
用 Meta-x company-diag
檢查
imp
後按 tab 會啟動 yasnippet Meta-x yas-describe-table
會看到有 imp 的關鍵字來啟動 import snippet按 f
跟 tab 來展開一個新的 function
company-jedi 也可以對函式庫做函式補全,例如
按 Ctrl-c ?
可以啟動 jedi-doc 來看函式的文件 (docstring) 如
語法檢查
使用 Ctrl-c ! v
來看 flycheck 狀態,
打錯字的話會用特別顏色顯示,使用 Ctrl-c ! l
來列出相關錯誤或警告
補全自己定義的函式
Jedi 不只補全現有的函式庫,自己寫的函式也可以顯示
跳到函式定義
可以使用 jedi:goto-definition (C-c .)
跳到函式的定義處,不管是自己的函式,或是現有的函式庫
使用 jedi:goto-definition-pop-marker (C-c ,)
跳回原呼叫函式
程式美化排版
Python 有些格式要求,autopep8 可以自動排版,例如原先
經過存檔後,會變成
好了,大概介紹了 Emacs 支援 Python 程式編輯的功能,下一篇我們真正來寫一個用 OpenCV 做人臉判別的 Python 程式
相關簡報: 請看 簡報
相關程式:請看 github
相關資料,請看 我的部落格