2012-03-14 3 views
4

[私はより多くの試験研究の後に二つに元の質問を分割]conf.pyでsphinxのカスタム設定値を設定する方法は? (例えば、sphinx.ext.ifconfig用)

私はconf.pyに自分の設定値を定義してから、それが見えるように、最小限の拡張を書きました最初のファイル。 conf.pyで

:ローカルmyExt.pyで

sys.path.insert(0, os.path.abspath('.')) 
extensions = ['sphinx.ext.ifconfig', 'myExt'] 
testlevel = 2 

def setup(app): 
    app.add_config_value('testlevel', '', True) 

これはうまく動作します。 test.rstが含まれています:

.. ifconfig:: testlevel == 2 

    Hurray, it seems to work 

sphinx.ext.ifconfigのドキュメントによると、conf.pyから直接* app.add_config_value *呼び出すことが可能と思われます。誰も私にこれを行う方法を教えてもらえますか?ここで注意すべき

答えて

2

2つのこと:

  1. まず、conf.pyファイルは単なるPythonのファイルです。特別なことは、スフィンクスが特にそれを探して輸入することだけです。あなたは通常のpythonファイルで行うことができるこのファイル内の何かを行うことができます。
  2. 第2に、conf.pyファイルcan itself be an extensionです。つまり、拡張機能の場合と同じように動作するsetup機能を持つことができます。したがって、あなたの内線(myExt.py)の内容をconf.pyファイルにコピーする場合、それはちょうど仕事(tm)する必要があります。
+0

多くのありがとう、ケビン。私は最初にセットアップ機能をconf.pyに入れようとしていたと思っていましたが、うまくいかなかったようです。 extensions = [...、 'conf']も宣言する必要がありますか? –

+0

私はそうは思わない。少なくとも私はそれをやったことを思い出してはいません。そして、ドキュメンテーションは、conf.pyにセットアップ機能を置くだけで、そのトリックができることを示しているようです。 –

+0

conf.pyはコンパイルされ、評価され、拡張リストで提供されているものと同様に__importされません。それは問題ではありません。しかし、conf.pyの定義は節約され、適切なモジュールではないので、class mynode(nodes.Inline, nodes.Element):passのような定義はPicklingErrorにつながります:Can not pickle:それが見つかりません... –

関連する問題