Sphinx1.1.1がpython2.5でインストールできたものの、make html してもエラーでドキュメントの出力ができず辛すぎたんですが、どうもSphinxってpython2.6からのサポートらしく……でも僕の環境はgaeの影響でpython2.5に縛り付けられているので2.6には移行しにくい。
しかし色々とドキュメントを読む限りじゃ、このSphinxってシステム、かなり良さそうなんだよなあーと諦めきれず。
というわけで、エラーが出るっぽいところを取り合えず追って、なんとか2.5で動かそうと思いました。
で、まずはエラーの確認から。
python2.5でmake htmlするとなんか「relpath」っていう関数でエラーが出ます。調べてみると、relpathって関数はpython2.6からpathモジュールに追加された関数らしく、そんなものはないよ、と怒られている模様。
なので、このrelpathに相当するソースをpython2.6のソースからコピペしてsphinxのソースに貼り付けたらよさそうだ、ということになりました。
だって、どうしてもSphinxでドキュメントが書きたかったのです。色々と楽ができそうだから。
というわけで、貼り付けたのは次のソース。
# path.relpath はpython2.6にしかないので、無理やり(POSIX版のrelpathを)引っ張ってきて追加した def relpath(path_, start="."): """Return a relative version of a path_""" if not path_: raise ValueError("no path_ specified") start_list = path.abspath(start).split("/") path_list = path.abspath(path_).split("/") # Work out how much of the filepath is shared by start and path. i = len(path.commonprefix([start_list, path_list])) rel_list = [".."] * (len(start_list)-i) + path_list[i:] if not rel_list: return "." return path.join(*rel_list)
僕はcentosで開発するので、Sphinx-1.1/sphinx/environment.py にreplathのPOSIXバージョンのロジックを貼り付けました。
windowsの人は、上のソースでパスを区切る文字を「/」から「\」とかにして下さいね。
で、貼り付けた上で呼び出すところを
#docname = path.splitext(path.relpath(source, env.srcdir))[0] docname = path.splitext(relpath(source, env.srcdir))[0]
と修正改変。
そんなこんなで、なんとかSphinxのmake html でドキュメントが出力できるようになりました。
今のところ、特に問題なしです。複雑なことやると色々と出てくるかもしれませんが、複雑なことはやらないし……
しかし、ひとまず良かったと喜んでいたら、それを嘲笑うかのように11月1日にバージョン1.1.2がリリースとな……
でもまあ今は1.1.1でちゃんと動いてるので良しとします。