俺の愛用するSublime Text3のビルド機能だけど、pythonをビルドしたとき日本語が表示されない問題がある。以前のST3初期設定記事で書いたとおりpython3に関しては解決した話なんだけど、パイソニスタの末席を汚しまくるものとしてはやっぱりpython2もカバーしとかんとなと思ってまとめてみたぜ。今回の内容は以下。

  • Python2ビルドとPython3ビルドの切り替えをできるようにする
  • 2をビルドするとき日本語が表示されるようにする
  • 3をビルドするとき日本語が表示されるようにする

切り替えがしたいときは、2と3のpythonビルドシステムを新たに追加すればよい。ツール->ビルドシステム->ビルドシステム追加 から以下の sublime-build ファイルを作ってそれぞれの名前で保存。場所はデフォルト(C:/Users/ユーザ名/AppData/Roaming/Sublime Text 3/Packages/User)のところ。

// Python2.7.sublime-build の名前で保存(Python2.7の名前で表示される)
{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",

    "windows":
    {
        "encoding": "cp932",
        "path"    : "C:/Python27"
    }
}
// Python3.4.sublime-build の名前で保存(Python3.4の名前で表示される)
{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",

    "windows":
    {
        "encoding": "cp932",
        "path"    : "C:/Python34"
    }
}

例によって丸コピペするとバックスラッシュ部分が円マークになっちまうんで適宜バックスラッシュに直すこと。これで ツール->ビルドシステム に上のふたつが追加されるので、チェックを入れることで2と3がそれぞれ実行できる。なお俺は普通ビルドシステムは「自動」にチェックを入れてるのだけど、そのとき実行されるのはいま追加した「Python2.7」でも「Python3.4」でもなく、デフォルトの「Python」だ。「Python」に対応しているのはパスで先に指定しているほうだ。俺は基本的には3を使うので C:\Python34\;C:\Python27\; の順番に指定してある。

2のビルドで日本語出力を有効にするのは、出来たことは出来たが、ちと納得いってない。とりあえず手順は以下。

上記にある「自動」あるいは「Python」で実行する場合は……

  • C:/Users/ユーザ名/AppData/Roaming/Sublime Text 3/Packages に Python というフォルダを作る
    • その中に、上に書いた Python2.7.sublime-build のビルドファイルを入れる
    • 上記にある「Python2.7」で実行する場合↑は必要ない
  • 実行するpyファイルに以下のコードを加える
import codecs, sys
sys.stdout = codecs.getwriter("cp932")(sys.stdout)

ST3で実行するためだけにコードを足すというのはどうも気持ちが悪いので他の方法を見つけなかったんだけど、見つからなかった残念。いつか見つかるといいんだけれども。

3のビルドで日本語出力を有効にするのは容易だ。2のやり方とだいたい同じ。

  • 上記にある「自動」あるいは「Python」で実行する場合は……
    • C:/Users/ユーザ名/AppData/Roaming/Sublime Text 3/Packages に Python というフォルダを作る
    • その中に、上に書いた Python3.4.sublime-build のビルドファイルを入れる
  • 上記にある「Python3.4」で実行する場合↑は必要ない

長らくpython2をいじってなかったんで、久々に文字コード問題とガチバトルを繰り広げてしまったぜ。プログラミングやり始めた頃の俺はよくメゲなかったものだよ。 付録として、バージョン切り替え、日本語出力テスト用に使ってたコードを添えておく。

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

# ==============================
# python2.7で通るコードだよ
# ==============================

# これを書くことでsublime text3でも日本語がほいほい出るようになる
import codecs, sys
sys.stdout = codecs.getwriter("cp932")(sys.stdout)

print sys.version_info
print u"aあ" + u"あa"
print u"い"
print "b"


# 以下のようになればOK
# sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)
# aああa
# い
# b
# !/usr/bin/env python
# coding: utf-8

# ==============================
# python3.4で通るコードだよ
# ==============================

import sys

print(sys.version_info)
print("aああa")
print("い")
print("b")


# 以下のようになればOK
# sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
# aああa
# い
# b