うならぼ

申し訳程度のアフィリエイトとか広告とか解析とかは/aboutを参照

CodeIgniterユーザーガイドのビルド環境を作る

CodeIgniter3.0がリリースされたものの、日本語版ユーザーガイドがまだ翻訳しきれていないようなので、読むついでに訳そうかなと。

github.com

適当に環境構築

Pythonは以前3.4を入れたんですが、Sphinx入れてないので用意します。ユーザーガイドのREADMEには次のような手順が載っているのですが・・・。

easy_install "sphinx==1.2.3"
easy_install sphinxcontrib-phpdomain

「今時はpip使えばいいと思うよ」なんて噂を耳にしたのでそっちを探ります。というか、Sphinxのサイトにはpip使えって書いてありますね。

pip が実行できないなーと思ったら Python34\Scripts にPATH通ってなかったという。

バージョン指定なしでSphinx1.3.1が入ったけど、まあたぶん大丈夫でしょう。

あとは専用のPigments Lexerをインストール。 cilexer/ に入って setup.py install するだけ。さてHTMLをビルドしてみましょう。

R:\ci_user_guide_src>make html
'make' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

・・・どうしようかなーと思いながら cinst make したら入ったのでよしとします。

大人しくPython2使うことをお勧めします

R:\ci_user_guide_src>make html
Exception occurred:
  File "E:\Applications\Python34\lib\site-packages\sphinxcontrib\phpdomain.py", line 457, in generate
    modules = sorted(self.domain.data['namespaces'].iteritems(),
AttributeError: 'dict' object has no attribute 'iteritems'

Python3の辞書オブジェクトでは、Python2にあった .items() が消え、 .iteritems().items() という名前になったらしいです。すごい破壊的変更ですね。

Pythonのitems()とiteritems()の違い - 真面目に、強く、上品に

sphinx-contribのリポジトリにもIssueが挙がっているものの放置されていました。

birkenfeld / sphinx-contrib / issues / #86 - domaintools and Python 3 — Bitbucket

PullReq送ろうかと思ったものの、Mercurial用意するのが面倒だったのでモンキーパッチで済ませることにしました。当該ファイルの iteritemsitems に置き換えるだけ。少なくともCIドキュメントのビルドは通ったのでよしとします(えー。

追記:と思ったものの、language = 'ja' とか指定してみたらこけた。Python2の .items() も使っていたようなので、2to3に合わせてとりあえず list(hogehoge.items()) とすることにした。

f:id:unarist:20150523122721p:plain

まとめ

  • Sphinx は1.3.1でもよさそう
  • Python3だとsphinxcontrib-phpdomainがこける。s/iteritems/items/g で動く。
  • Windows使いなら適当にmakeを調達すること