Sublime text2のpython3開発環境整備

さて、たびたび話題に上っていたsublime text2の設定について書いておきます。
・各種Packageの導入
http://dbader.org/blog/setting-up-sublime-text-for-python-development
などを参考に各種パッケージを導入していきます。
私は以下のPackageを導入しました。

  • Package Control(パッケージマネージャー)
  • SideBarEnhancements(サイドバーの機能を強化してくれる)
  • All Autocomplete(補完機能の強化)
  • SublimeCodeIntel(補完機能の強化2)
  • SublimeREPL(sublime text内でインタプリタを使えるようにする)
  • Sublime PEP8 Lint(PEP8コーディング規約チェック)
  • SublimeRope(Python統合開発環境

続いて、Python3でプログラミングがしやすいように設定をいじっていきます。

1、Pythonコーディング中はインデント数をスペース4つにして、タブをスペースに置換する様に設定する

http://qiita.com/skinoshita/items/ef86f528fbeb5652fc05
上記のリンクにのっているように、「Syntax Specific -Users」を設定していきます。

2、command + Bでpython3を実行できるようにする

sublime text2のPreferences -> Browse PackagesでFinderでPackageを見れるようにします。続いて、Userフォルダー内にPython3-sublime-buidファイルを作成、編集します。(Pythonフォルダ内にあるPython-sublime-buildをコピーして編集するのが良いと思います。)

{
	"cmd": ["python3", "-u", "$file"],
	"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
	"selector": "source.python"
}

上記のように内容を編集して、Python3-sublime-buildを保存してください。また、最初の手順の結果同じフォルダ内に、Python-sublime-settingsが出来ているはずなので、これの名前をPython3-sublime-settingsに変更しておきます。
さらにUserフォルダ内にあるPreferences.sublime-settingsを編集し、PATHを通しておきます。

{
	"build-env":
	{
		"PATH": "/usr/local/bin:/usr/bin"
	},
	"ignored_packages":
	[
		"Vintage"
	]
}

python3をhomebrewで導入している場合は、上記のようにPATHを通しておくと、Python3-sublime-buildでFull PATHでpython3を呼ばなくても良くなります。

3、SublimeREPLでPython3およびipython3を実行できるようにする

SublimeREPLは、Sublime text2内のタブがターミナルとして使えるというplug-inです。GUIターミナルなので特定の場所にカーソルを置いたり、コピペするのが便利だったり、色がきれいだったりといい事がいっぱいです。さらにipythonが使えるようになるので、各種マジックコマンドも使えますし、matplotlibとの兼ね合いもokです。(command + Bで実行すると通常のシェルで実行したのと同じ状態になるので、matplotlibでplotすると、plotされたグラフを消すまで次の操作を受け付けなくなってしまいます。その点、ipythonなら対象のスクリプトを実行する前に、%matlibplotというマジックコマンドを実行しておく事でplotウィンドウが出ていても操作を受け付けるように出来ます。)加えて言えば、デバッグ用の事後解析モードを立ち上げる事も出来るので、デバックも容易になります。
それでは設定に移って行きます。
まず、Preferences -> Browse Packagesで、FinderでPackageを見れるようにします。そこでSublimeREPLフォルダを開いて、その中にあるconfig/Python/Main.sublime-menuをコピーします。
続いて、先ほどから自分の設定を置いているUserフォルダ内に、SublimeREPL/config/Python/というようにフォルダを作っていき、その最下層(つまりPythonフォルダ内)にMain.sublime-menuをペーストします。そしてその中身を編集します。以下のようになるように編集して下さい。

[
     {
        "id": "tools",
        "children":
        [{
            "caption": "SublimeREPL",
            "mnemonic": "r",
            "id": "SublimeREPL",
            "children":
            [
                {"caption": "Python",
                "id": "Python",

                 "children":[
                    {"command": "repl_open",
                     "caption": "Python 3",
                     "id": "repl_python3",
                     "mnemonic": "p",
                     "args": {
                        "type": "subprocess",
                        "encoding": "utf8",
                        "cmd": ["python3", "-i", "-u"],
                        "cwd": "$file_path",
                        "syntax": "Packages/Python/Python.tmLanguage",
                        "external_id": "python",
                        "extend_env": {"PYTHONIOENCODING": "utf-8"}
                        }
                    },
                    {"command": "repl_open",
                     "caption": "Python 3 - IPython",
                     "id": "repl_python_ipython3",
                     "mnemonic": "p",
                     "args": {
                        "type": "subprocess",
                        "encoding": "utf8",
                        "autocomplete_server": true,
                        "cmd": {
                            "osx": ["python3", "-u", "${packages}/SublimeREPL/config/Python/ipy_repl.py"]
                        },
                        "cwd": "$file_path",
                        "syntax": "Packages/Python/Python.tmLanguage",
                        "external_id": "python",
                        "extend_env": {
                            "PYTHONIOENCODING": "utf-8",
                            "SUBLIMEREPL_EDITOR": "$editor"
                        }
                    }
                    }
                ]}
            ]
        }]
    }
]

これで、問題なくpython3とIpython3をsublimeREPLで使えるようになります。tools->sublimeREPL->Pythonの部分にPython3とPython3 -ipython3の選択肢が出るようになりますので、それをクリックするとターミナルが立ち上がるようになるはずです。(ipython3の方は初回は立ち上がりに時間がかかる事がありますので、5〜10秒くらいは表示が出なくても問題ありません。)

以上で今回の環境構築は終了です。sublimeREPLは時たま不安定になりますが、便利なので出来るだけ使っていけるようにしようと思います。

SIPとQtとPyQt5の再設定

1月7日ごろにhomebrewのsippyqtのFomulaが更新されて、python3への対応が削除されてしまいました(なんでやねん)。いずれ修正される日が来ると期待してはいますが、pipの方についてもSIPに対応していない様なので、手動で環境を構築する方法をメモしておきます。

(注意:以前構築した環境のまま何も手を加えていない人は、brew switch で使用するsippyqtを一つ前のバージョンに戻す方が賢明です。これは間違ってそれらのパッケージをアンインストールしてしまった時などに使用する方法です。)

対象はMac OSX 10.9です。

SIPの導入

まず、公式のホームページから、ソースコードをダウンロードします。

http://www.riverbankcomputing.com/software/sip/download

今回は、sip-4.15.4.tar.gzをダウンロードします。

次に、ダウンロードしたファイルを好きな場所で展開します(私は、Downloadフォルダで展開しました)。ターミナルを起動し、展開したフォルダに移動します。そこで、

python3 configure.py --arch=x86_64

make

make install

とコマンドを順番に打っていきます。これでSIPの導入は終了です。pythonのコンソールでimport sipとやってみてください。問題なく通るはずです。

注意するべきなのは、導入が終わった後で展開し作業用に使っていたフォルダを削除しない事です。make時に作られたSIPの実行ファイルはなぜかこの作業用フォルダにだけあって、これが次のPyQtの導入時に必須になります。(Pythonで使われるモジュール本体は/usr/local/lib/python3.3/site-packages下に作られているのになぜなのでしょう?)

・Qt5の導入

homebrewでもqt5は導入できますし、先日の更新でpyqt5との兼ね合いも修正されました。にもかかわらず、python3への対応だけが削られたのは本当に解せないのですが仕方ないので、これも手動で入れていきます。

まずは公式のサイトからインストーラーを持ってきます。

http://qt-project.org/downloads

今回は、Qt 5.2.0 for Macをダウンロードしました。

後はインストーラーを起動して、指示に従って好きなところにインストールしてください。(私の場合はホームディレクトリにQtというフォルダを作って、そこにインストールしました。)

最後にパスを通します。~/Qt/5.2.0/clang_64/binをエディタなどで、~/.bash_profileに書き足して、ターミナル上(ホームディレクトリ)でsource .bash_profileを打ち込むとPATHが通ります。

PyQt5の導入

やっぱり、公式サイトからソースコードを持ってきます。

http://www.riverbankcomputing.com/software/pyqt/download5

今回は、PyQt-gpl-5.2.tar.gzを使います。

GPLライセンスなんですよね〜。LGPLライセンスのPySideがpython3とQt5に対応してないが残念です。)

次に、ダウンロードしたファイルを好きなディレクトリで展開します。その後、ターミナルを立ち上げて作業ディレクトリに移動します。そこで、SIPをインストールした時と同じようにコマンドを打っていくのですが、ここで注意が必要です。PyQt5はSIPの実行ファイルを呼べるようにしないとインストールできないので、そのPATHを与えながらインストールしていきます。

python3 configure.py --sip ~/Downloads/sip-4.15.4/sipgen/sip

make

make install

としていけばインストール出来るはずです。(途中でライセンスを受け入れるかどうかを聞かれますのでyesと答えましょう。)

以上で、今回の環境構築は終了です。ただこの方法を使うと、以前導入したipython qtconsoleが機能しなくなってしまいます。ですので、次回はそれに代わるGUIコンソールをsublime text 2に導入していきます。(sublime text のpython環境構築も一緒にやっていきます。)

ipython qtconsoleのバックスラッシュ等について

macで、先日導入したipython qtconsoleで作業をしていると、「あれ?今バックスラッシュを打ったのに¥が出てるよ。どうして?」という事態に直面したので解決方法をメモしておきます。(もちろんoption + ¥と打った上での話です。)

まず第一にこの問題は、ipythonには関係なくてQt側の問題です。ですのでQtを用いるソフトの界隈では有名なバグらしく、解決済の方も多いかもしれません。

「システム環境設定 > キーボード>入力ソース」にて、入力ソースの追加を行います。ウインドウ左下の+ボタンを押して、「英語>U.S.」を選択して新しい入力ソースを追加してください。この新しい入力ソースをことえりの英字の代わりに用いれば、冒頭に直面したような問題は回避できます。

MacOSXでのPython3環境構築

Mac OS X 10.9および10.6でPython3用の環境を構築する

Xcodeおよびhomebrewを導入する

 まずは、準備作業です。この作業は今回の説明の本筋ではないので割愛します。

当方の環境では、OS X10.9の方にはXcode 5.02、OS X10.6の方ではXcode4.02を使用しております。command line toolも入れることに注意してください。

Python3を導入する

 homebrewでpython3を導入する。インストールコマンドはbrew install (パッケージ名)となっています。

この際、当方の環境ではswigがエラーを起こしたので、これをhomebrewで--with-python3オプションを付けて再インストールしておきます。

また、python3をインストールする際には、--frameworkオプションを付けておくと良いらしいです。

ipythonを導入する

続いて、pythonをより便利に使えるshellであるipyhonを導入します。まず、依存関係にある各種ツールを入れていきます。

最初に、homebrewでzmqでを導入します。さらにpython3付属のパッケジ管理ツールのpip3を使って、pyzmq、tornado、Pygmentsを導入します。インストールコマンドはpip3 install (パッケージ名)になっています。

ここで、brew install readlineとコマンドを打ってみてください。おそらくpython3を導入した時の依存関係で導入されているはずですが、OS Xのipythonにはreadlineが必要という報告がなされているので、確認が必要です。

 ここまでの導入が済んだら、いよいよipythonを入れていきます。pip3 install ipythonでpython3用のipythonが導入されるはずです。

(注意:ここで導入したipythonはCUIモードは問題なく動作しますが、GUIモードが上手く動作しません。これは後述のQt4及びpyqtの導入によって解決します。)

Numpyの導入

python数値計算用モジュールであるnumpyをpython3に導入します。pip3 insatll numpyで問題なくインストールされるはずです。

Scipyの導入

pythonの科学計算用モジュールであるscipyを導入します。scipyは計算を高速化するためなのかFortranのコードを内部的に使用しているらしく、導入にはFortranコンパイラを導入する必要があります。

homebrewでgfortranを導入します。ここで、OS X 10.6を使用している場合には、インストールエラーが起きます。

これは、最新のgfortranがOS X10.6に対応していないからです。(さすがのsnow leopardも、もう古いんですかね?)

この問題を回避する為に、homebrewで導入するgfortranのバージョンを4.7.2に下げます。

$ brew versions gfortran
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
4.8.2    git checkout 3c86d2b Library/Formula/gfortran.rb
4.8.1    git checkout 90cb0ee Library/Formula/gfortran.rb
4.8.0    git checkout 0e654f6 Library/Formula/gfortran.rb
4.7.2    git checkout eab11ee Library/Formula/gfortran.rb
4.2.4-5664 git checkout 70c315b Library/Formula/gfortran.rb

4.2.4-5666.3 git checkout 6a79970 Library/Formula/gfortran.rb 
$ git checkout eab11ee /usr/local/Library/Formula/gfortran.rb
brew info gfortrangfortran: stable 4.7.2 (bottled)
Not installed
==> Dependencies
Required: gmp ✔, libmpc ✔, mpfr ✔
==> Options
--check
     Run the make check fortran. This is for maintainers.
--enable-profiled-build
     Make use of profile guided optimization when bootstrapping GCC
==> Caveats
Brews that require a Fortran compiler should not use:
  depends_on 'gfortran'
 
The preferred method of declaring Fortran support is to use:
  def install
    ...
    ENV.fortran
    ...
  end

$ brew install gfortran

上記のようにgit checkoutを用いて指定したバージョンのパッケージをhomebrewで入れる事が可能です。

gfortranを入れ終えたらいよいよscipyの導入です。pip3 install scipyでインストールできます。

Qtおよびpyqtの導入

ipythonのGUIモードと後述のmatplotlibのためのQtとpyqtを導入していきます。現在、Qtの最新バージョンは5.2であり、pyqtもQt5に対応したpyqt5がパッケージとして登録されていますが、現在OS X 10.9ではQt5をhomebrewで導入するとコンパイルの際にlibc++とlibstdc++の両方を用いてしまうバグがあり、libc++を持ちているpyqt5との間でエラーが発生してしまいます。また当方の環境ではOS X 10.6でも、pyqt5を導入しようとするとコンパイルエラーを起こしてしまいました。

そこで、今回はQt4とpyqt(4.10.3)を導入します。まず、Qt4の導入です。brew install qtでインストールできます。ただし、この際に注意する事があります。homebrewのqtはsipに依存しているのですが、このsipをpython3に対応させておく必要があります。brew install sip --with-python3でpython3対応のsipを導入できます。しかる後に、brew install qtでQtを導入してください。

続いて、pyqtを導入します。pyqtにもpython3対応用オプション--with-python3があるので、導入の際には必ずこのオプションを付けるようにしてください。(brew install pyqt --with-python3)

ここまで、進むとGUI対応のipython3が使えるはずです。ipython3 qtconsoleで起動してみてください。(本来はさらにipython3 notebookでブラウザ上でipython3を使えるはずなのですが、当方の環境ではエラーが発生してしまいました。)

追記:12月24日

ipython3 notebookが使えなかったのは、jinja2というパッケージが入っていなかったからだということがわかりました。ですので、pip3 install jinja2とターミナルでコマンドを実行すると、ipython3 notebookが使用できるようになります。

matplotlibの導入(OS X 10.9のみ)

いよいよpythonの環境構築も終盤です。pythonで様々なグラフ描画を行えるようにするモジュールであるmatplotlibを導入していきます。まず、matplotlibが依存しているfreetypeとlibpngをhomebrewで導入します。

brew install freetype

brew insatll libpng

で導入できるはずです。

続けてmatplotlibの導入、と行きたい所なのですがfreetypeとlbpngのインストール場所がおかしいバグがあり、これに対応する必要があります。

当方の環境では、ft2build.hとfreetype2が、/usr/X11/includeにに存在しているという問題がありました。そこで、

$ sudo ln -s /usr/X11/include/ft2build.h /usr/local/include/ft2build.h

$ sudo ln -s /usr/X11/include/freetype2/freetype /usr/local/include/freetype

以上のようにシンボリックリンクを張って、/usr/local/includeにこれらのファイルが存在しているようにします。

他にも、freetypeとlbpngの関連ファイルの位置がおかしい場合があるようなので、その場合は
を参考にすると良さそうです。
ここまで来れば、matplotlibを導入できます。pip3 install matplotlibで導入しましょう。
追記:12月25日

OS X 10.6でのインストールも出来たので追記しておきます。基本的な手順はほとんど同じですが、OS X 10.6ではfreetypeとlibpngの関連ファイルのリンク手順が多くなります。参考URLの記事に記載されている全てのファイルについて、/usr/local/includeと/usr/local/lib以下にリンクすればOKです。ただし、この際にpnglibconf.hが見当たりませんでしたので、/usr/local/Cellar/libpng/(バージョン番号)/includeからシンボリックリンクを張ります。

これでpip3 install matplotlibっと行きたいところなのですが、当方の環境では、matplotlibが依存しているnoseというパッケージがインストール時に管理者権限を要求しエラーとなってしまいました。

そこで先にnoseをインストールしてしまいます。sudo pip3 install noseで問題なくインストールできるはずです。

ここまでやってようやくmatplotlibをインストールできます。pip3 install matplotlibでインストールしましょう。 

 
 
ここまでで、python3の基本的な環境構築はおしまいです。実際にはこの後開発を楽にするsublime text2などを導入したのです、それについてはまた記事を改めたいと思います。