Python2系なのに Blockly のビルドができない

(追記:2020年1月時点ですでに blockly は python 3 に対応しているようです。このページの情報は古い可能性があります。)

Blockly をローカル環境にクローンしてきて、ビルドしようとすると以下のようなエラーが出たのですが、 これはローカル環境に複数の python がインストールされていることが原因だったようです。

$ python2.7 build.py
Traceback (most recent call last):
  File "i18n/create_messages.py", line 25, in <module>
    from common import read_json_file
  File "/Users/(略)/blockly/i18n/common.py", line 62
    except ValueError, e:
                     ^
SyntaxError: invalid syntax
... (以下略)

Blockly のコードは python2.7.x 系で動くことになっているので、2.7.10 と 2.7.16 の両方で試したのですが、同じエラーが出てしまいました。 エラーそのものは「except を使うときにカンマが含まれているのがおかしい」というものですが、 2.7.x 系ではこのシンタックスはサポートされていることになっています。…謎です。

ネットを検索したら全く同じような状況に陥っている人がいて、その人は自分のローカル環境が原因だったと書いているので、 私も自分の環境の python たちを泣く泣くアンインストールすることにしました。

github.com

私の環境は以下のようになっています。

  • MacOS Mojave 10.14.5
  • Homebrew と anaconda の両方を使っています
  • Homebrew で python2.x 系と python3.x 系を両方インストール済みで、それぞれ python2.7 python3.6 というコマンドで動かすことができる

とにかく何が原因なのかわからないので、anaconda を uninstall し、その後 homebrew でインストールされている python を消します。 Homebrew では複数のパッケージで python に依存しているので、普通に brew uninstall しようとすると warning が出てきます。 そこで --ignore-dependencies というオプションをつけて強制的に uninstall してみます…。

$ conda install anaconda-clean
$ anaconda-clean
$ brew uninstall python3 --ignore-dependencies
$ brew uninstall python@2 --ignore-dependencies

ひとまずこの状態で python という名前を含むコマンドを探すと以下のようになります。

$ python [tab] [tab]
python            python2.7         pythonw           
python-config     python2.7-config  pythonw2.7 

このとき、python コマンドの指すものは /usr/bin にあるもの(もともと MacOS に入っているもの)になっています。

$ which python
/usr/bin/python
$ which python2.7
/usr/bin/python2.7
$ python --version
Python 2.7.10
$ python2.7 --version
Python 2.7.10

この状態でもう一度 blockly のビルドをすると成功しました!(ここまで頑張って uninstall してもうまくいかなかったら逆に悲しい)

uninstall してしまった python たちはまたあとで少しずつ install してあげようと思います…。