40歳から始めるpython

もう41歳ですが、1歳くらいは気にしない。
今からでも定年までは２０年あるので遅くはないはず。ということで、python始めます。

#対象者
python初心者

#環境
ubuntu16.04 + python3.6.1 + emacs24.5.1

#Python インストール
[このへん](http://qiita.com/Kodaira_/items/feadfef9add468e3a85b)を参考にpyenvを導入してインストール。

#emacs環境構築
##python-mode
これが無いと始まらない。

```
$ cd ~/.emacs.d
$ git clone https://github.com/python-mode/python-mode.git
```

```init.el
(add-to-list 'load-path "~/.emacs.d/python-mode")
(require 'python-mode)
(setq auto-mode-alist (cons '("\\.py\\'" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist (cons '("python" . python-mode) interpreter-mode-alist))

(add-hook 'python-mode-hook
	  '(lambda ()
	     (setq indent-tabs-mode nil)
	     (setq python-indent 4)
	     (setq tab-width 4)))

```

## autopep8
自動で整形してくれるautopep8を導入。変なコーディングスタイルになる前に自動で矯正!

```
$ cd ~/.emacs.d
$ git clone https://github.com/paetzke/py-autopep8.el.git
```

``` init.el
(add-to-list 'load-path "~/.emacs.d/py-autopep8.el")
(require 'py-autopep8)
(define-key python-mode-map (kbd "C-c F") 'py-autopep8)
(define-key python-mode-map (kbd "C-c f") 'py-autopep8-region)
(add-hook 'before-save-hook 'py-autopep8-before-save)
```

## pyflakes
構文チェックしてエラーを教えてくれる。うん、これは便利。

```
$ pip3 install pyflakes
```

```init.el
(add-hook 'find-file-hook 'flymake-find-file-hook)
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
           (local-file (file-relative-name
                        temp-file
                        (file-name-directory buffer-file-name))))
      (list "~/.pyenv/shims/pyflakes"  (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.py\\'" flymake-pyflakes-init)))

(defun flymake-show-help ()
  (when (get-char-property (point) 'flymake-overlay)
    (let ((help (get-char-property (point) 'help-echo)))
      (if help (message "%s" help)))))
(add-hook 'post-command-hook 'flymake-show-help)

(custom-set-faces
  '(flymake-errline ((((class color)) (:background "red")))))
```
##yasnippet
自動挿入ですね。あると便利。

```
$ cd ~/.emacs.d
$ git clone --recursive https://github.com/joaotavora/yasnippet
```

```init.el
(add-to-list 'load-path "~/.emacs.d/yasnippet")
(require 'yasnippet)
(setq yas-snippet-dirs
      '("~/.emacs.d/yasnippet/mysnippets"
        "~/.emacs.d/yasnippet/snippets"))

(define-key yas-minor-mode-map (kbd "C-x i i") 'yas-insert-snippet)
(define-key yas-minor-mode-map (kbd "C-x i n") 'yas-new-snippet)
(define-key yas-minor-mode-map (kbd "C-x i v") 'yas-visit-snippet-file)

(yas-global-mode 1)

```

##pdb
下記ファイルを作って保存。

```pdbd
#!/bin/sh
exec python ~/.pyenv/versions/3.6.1/lib/python3.6/pdb.py "$@"

どこに置いてもいいですが、できればpathの通ってるところに
```
emacsでデバッグ対象ファイル(例：debug.py)を開いた状態で

``` 
$ emacs debug.py
(emacs上で)    M-x pdb
(ミニバッファ)  pdbd debug.py
```

emacs24だとbreak貼ったりするコマンドが変更になっている模様。[このあたり](https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html)を参考に。
C-x C-a C-bでbreak貼るとか使いにくいけど、キーバインド変更じゃなくて体を合わせるべきだよねー。

あと、

```init.el
(custom-set-variables '(py-pdb-path 'pdbd))
```
を書けばミニバッファの入力が少し楽になります。python-mode-hookのlambdaの中に書くといいかな。

とりあえず環境できたー。あ、テスト環境抜けてるか。でもそのまえにまずはpythonの構文覚えるところからですね。。。