anti scroll

ブラウザと小説の新しい関係を模索する

sphinxがpython2.5でも動いた

 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でちゃんと動いてるので良しとします。