MacOSX10.6 Snow LeopardにSphinxを入れてみる

ちょっとしたきっかけがあって、OSを10.6 Snow Leopard にアップグレード。
ハードウェアを購入して以来、ユーザーのhomeディレクトリ適当に突っ込んできただけだったので、整理の必要を感じていた事もあって「新規インストール」を選択した。

ということで、イチから環境を作ることに。

MacPorts

The MacPorts Project(http://www.macports.org/)を参考にして、Package Installerを使って入れてみる。

http://distfiles.macports.org/MacPorts/MacPorts-1.8.1-10.6-SnowLeopard.dmg

ダウンロード後、マウント->Packageアイコンをダブルクリックでインストール。


インストールできたら、環境変数の追加。
これはbash, zsh向けの記述なのでcsh,tcshの場合は適宜読み替えを。

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

さらに次のコマンドを打っておく。

% sudo port -d selfupdate
% sudo port -d sync

Python

Snow Leopardの場合、OSにプレインストールされているpythonのバージョンは2.6.1なのだけれど、ここはMacPortsで入れられる最新版を入れてみる。

% sudo port install python26

自分の場合、ここでなぜか凄まじい数のパッケージを勝手にインストールしまくってくれた。
たった一行入力しただけなんだけどな。。。

Sphinx

いよいよ本丸。とは言っても、コマンドは一つだけ。

% sudo port install py26-sphinx

ところが、ここでトラブル。
テンプレートエンジンであるJinja2のインストールで、コケる。

<中略>
--->  Building py26-jinja2
Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_python_py26-jinja2/work/Jinja2-2.2.1" && /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 setup.py --no-user-cfg --with-speedups build " returned error 1
Command output: Traceback (most recent call last):
  File "setup.py", line 86, in <module>
    """
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/dist.py", line 987, in run_commands
    self.run_command(cmd)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/dist.py", line 1007, in run_command
    cmd_obj.run()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/command/build.py", line 134, in run
    self.run_command(cmd_name)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/cmd.py", line 333, in run_command
    self.distribution.run_command(command)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/dist.py", line 1007, in run_command
    cmd_obj.run()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools/command/build_ext.py", line 46, in run
    _build_ext.run(self)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/command/build_ext.py", line 340, in run
    self.build_extensions()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/command/build_ext.py", line 449, in build_extensions
    self.build_extension(ext)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools/command/build_ext.py", line 175, in build_extension
    _build_ext.build_extension(self,ext)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/command/build_ext.py", line 460, in build_extension
    ext_path = self.get_ext_fullpath(ext.name)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/command/build_ext.py", line 633, in get_ext_fullpath
    filename = self.get_ext_filename(modpath[-1])
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools/command/build_ext.py", line 85, in get_ext_filename
    ext = self.ext_map[fullname]
KeyError: '_speedups'

Error: The following dependencies failed to build: py26-jinja2 py26-pygments
Error: Status 1 encountered during processing.

いろいろと調べてみていたところ、日本語の情報は皆無。・・・こまった。
ビルドの段階で"_speedups"という文字列を使った処理の際にKeyErrorが発生してしまっているのだろうというところまでは解ったが、如何せん情報がない。

まずは日本語情報を調べてみたが、それらしい情報はヒットしなかった。
ぅーん、と悩んでも仕方がないので、英語の情報も検索範囲に含めて探してみる。。。

まずはJinja2の公式ドキュメンテーション

http://jinja.pocoo.org/2/documentation/

Installationのセクションを読むと、「speedupsはデフォルトではOFFになっているから、使うんだったら--with-speedupsを使って」という注意書きがある。
先ほどのログを見ると、そのオプションが指定されている模様。まぁ、公式ドキュメントの指示に正しく従っているのだからそれはいいとしよう。


で、発見したのがこの記事。

http://bitbucket.org/tarek/distribute/issue/41/keyerror-_speedups

結局、macportsのパッケージ自体に問題があったのではなくて、setuptoolsのbuild_ext.pyに問題があったみたい。
上記のエントリでは「0.6.2でFixされる」って書いてある。

が、現時点でmacportsを使ってインストールできるバージョンは「@0.6c9_0」となっている。
つまりは、macportsで入れる場合、上述の対応は自前でやれ、と。

ということで、以下の通り。
修正の内容は上記エントリを参照のこと。

% cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools/command
% sudo cp -p build_ext.py build_ext.py_org
% vi build_ext.py

で、修正後に改めてportsを実行する。

% sudo port install py26-sphinx

これでOK。