UP | HOME

emacs 24 で Python の環境を作る

目次

1 環境

  • Windows 7 64bit
  • gnupackdevel-13.06-2015.11.08
    • binutils 2.25-4
    • libuuid-devel 2.25.2-2
  • GNU Emacs 24.5.1 (i686-pc-cygwin) of 2015-11-08 on gnupack
  • Python 2.7.10
    • python-setuptools 15.2-1
    • easyinstall 2.7
    • pip 8.1.1 from /usr/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg (python 2.7)
      • apipkg==1.4
      • autopep8==1.2.2
      • epc==0.0.5
      • execnet==1.4.1
      • jedi==0.9.0
      • pbr==1.8.1
      • pep8==1.7.0
      • py==1.4.31
      • pyflakes==1.1.0
      • pytest==2.9.1
      • pytest-cache==1.0
      • pytest-pep8==1.0.6
      • sexpdata==0.0.3
      • six==1.10.0
      • stevedore==1.12.0
      • virtualenv==15.0.1
      • virtualenv-clone==0.2.6
      • virtualenvwrapper==4.7.1

2 python

$ apt-cyg install python
$ python --version
Python 2.7.10

emacs で python を快適に使用するために、python-mode を入れる。

M-x package-install python-mode

init.el の設定は以下のとおり。

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

3 easyinstall

python のパッケージ管理ツール。python-setuptools の中に入っている。

$ apt-cyg install python-setuptools
$ easy_install-2.7 --version
setuptools 15.2

4 pip

easyinstall の強化版。

$ apt-cyg install binutils libuuid-devel
$ easy_install-2.7 pip
$ pip --version
pip 8.1.1 from /usr/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg (python 2.7)

5 virtualenv

プロジェクト毎に仮想環境を作れるツール。

$ easy_install-2.7 virtualenv
$ easy_install-2.7 virtualenvwrapper
$ source virtualenvwrapper.sh
$ export WORKON_HOME=~/.virtualenvs
$ virtualenv --version
15.0.1

例えば次のように使う。~/.virtualenvs/myproject を仮想環境用ディレクトリとして、cherrypy を入れている。不要になったら、削除して終り。

$ mkdir -p ~/.virtualenvs/myproject
$ cd ~/.virtualenvs/myproject
$ virtualenv .
$ source bin/activate
$ pip install cherrypy
$ deactivate
$ cd ..
$ rmvirtualenv myproject

6 PEP8

Python のコーディング規約 PEP8 のチェックなどを簡単にするツール群。

$ pip install pep8 pytest pytest-pep8 autopep8

pep8 は、PEP8 に準拠しているかを調べるツール。例えば、以下のように使う。

$ cat 2016-03-29-174409.py
import sys, os
$ pep8 2016-03-29-174409.py
2016-03-29-174409.py:1:11: E401 multiple imports on one line

pytest-pep8 は、pep8 をより見易くしたもの。例えば、以下のように使う1

$ cat 2016-03-29-174409.py
import sys, os
$ py.test --pep8 2016-03-29-174409.py
============================= test session starts ==============================
platform cygwin -- Python 2.7.10, pytest-2.9.1, py-1.4.31, pluggy-0.3.1
rootdir: /home/clothoid/junk, inifile: 
plugins: pep8-1.0.6
collected 1 items 

2016-03-29-174409.py F

=================================== FAILURES ===================================
__________________________________ PEP8-check __________________________________
/home/clothoid/junk/2016-03-29-174409.py:1:11: E401 multiple imports on one line
import sys, os
          ^

=========================== 1 failed in 0.02 seconds ===========================

autopep8 は pep8 に準拠したものとなるように自動で直してくれるツール。例えば、以下のように使う。

$ cat 2016-03-29-174409.py
import sys, os
$ autopep8 2016-03-29-174409.py
import sys
import os

pep8 を emacs から利用するために、package を入れる。

M-x package-install RET python-pep8 RET 

そして、init.el に以下を記述

(require "python-pep8")
; pep8 のインストールパスを指定
(defcustom python-pep8-command "/usr/bin/pep8"
  "PEP8 command."
  :type '(file)
  :group 'python-pep8)

python-pep8 の使い方は、例えば、2016-03-29-174409.py を開き、M-x python-pep8 とすると python-pep8 バッファに以下のように表示される。

[*python-pep8*]
===
-*- mode: python-pep8; default-directory: "~/junk/" -*-
PEP8 started at Tue Mar 29 18:01:10

pep8 --repeat /home/clothoid/junk/2016-03-29-174409.py | sort -n -t: -k2
/home/clothoid/junk/2016-03-29-174409.py:1:11: E401 multiple imports on one line

PEP8 finished at Tue Mar 29 18:01:10
===

7 pyflakes

Python の文法エラーをチェックするもの。

pip install pyflakes

pyflakes は、例えば、以下のように使う。

$ cat 2016-03-29-180555.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == '__main__'
        print 'OK!'
$ pyflakes 2016-03-29-180555.py
2016-03-29-180555.py:4:26: invalid syntax
if __name__ == '__main__'
                         ^
$ cat 2016-03-29-180555.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == '__main__':
        print 'OK!'
$ pyflakes 2016-03-29-180555.py
$ python 2016-03-29-180555.py
OK!

pyflakes を emacs から使うために、以下のように設定する。

M-x package-install RET flymake RET
M-x package-install RET flymake-python-pyflakes RET 
M-x package-install RET flymake-cursor RET 

init.el は以下のようにする。

(require 'flymake-python-pyflakes)
(require 'flymake-cursor)
(add-hook 'python-mode-hook 'flymake-python-pyflakes-load)

flymake-python-pyflakes および flymake-cursor の使い方は、例えば、以下のようなファイルで、

#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == '__main__'
        print 'OK!'

if の行にカーソルがくると、ミニバッファに以下のように表示される。

invalid syntax

8 jedi

python でのかしこい補完機能2

pip install epc jedi

emacs から利用するために、以下を設定する。

M-x package-install RET jedi RET

init.el は以下のとおり。

(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)

上記を設定後、M-x jedi:install-server とすると設定が終る。

使い方は .py ファイルを開いて、例えば、impo まで書くと補完候補が表示される。

9 参考

脚注:

1

表示されるまで、くっそ重い。。。。

2

auto-complete と同時設定するとうまく効かなかった。

著者: clothoid

Created: 2022-08-27 Sat 17:03

Validate