6

WindowsでSphinxを使用しています。
私のドキュメントのほとんどは通常のユーザー向けですが、管理者専用のコンテンツを含むサブページもあります。そのため、ドキュメントの2つのバージョンを作成したいと思います。完全なバージョンと「管理」ページを除外した2番目のバージョンです。

exclude_patternsそのためにビルド構成でを使用しました。
これまでのところ、それは動作します。名前に「admin」が含まれているすべてのサブフォルダー内のすべてのファイルは、これをconf.pyファイルに入れると無視されます。

exclude_patterns = ['**/*admin*']

問題は、両方のバージョンを取得するためにビルドを1回実行したいということです。

私が今やろうとしているのは、make.bat2回実行し、実行ごとに異なるパラメーターを指定することです。ドキュメント
に よると、と変数を設定することでこれを実現できます。BUILDDIRSPHINXOPTS

だから今私はbuild.batこのように見えるものを持っています:

path=%path%;c:\python27\scripts

rem BUILD ADMIN DOCS
set SPHINXOPTS=
set BUILDDIR=c:\build\admin
call make clean
call make html

rem BUILD USER DOCS
set SPHINXOPTS=-D exclude_patterns=['**/*admin*']
set BUILDDIR=c:\build\user
call make clean
call make html

pause

set BUILDDIR=buildsphinxで生成されたファイルから行を削除すると、2つの異なるディレクトリでのビルドが機能しmake.batます。

ただし、除外パターンは機能しませ
上記のバッチファイルは、2番目のビルド(除外パターンを持つビルド)に対してこれを出力します。

Making output directory...
Running Sphinx v1.1.3
loading translations [de]... done
loading pickled environment... not yet created

Exception occurred:
  File "C:\Python27\lib\site-packages\sphinx-1.1.3-py2.7.egg\sphinx\environment.
py", line 495, in find_files
    ['**/' + d for d in config.exclude_dirnames] +
TypeError: coercing to Unicode: need string or buffer, list found
The full traceback has been saved in c:\users\myusername\appdata\local\temp\sphinx-err-kmihxk.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
Either send bugs to the mailing list at <http://groups.google.com/group/sphinx-dev/>,
or report them in the tracker at <http://bitbucket.org/birkenfeld/sphinx/issues/>.

私は何が間違っているのですか?コマンドラインのの構文はファイルの構文と異なります
か? または、1つのステップで2つの異なるバージョンを構築するためのより良い方法はありますか?exclude_patternssphinx-buildconf.py

4

1 に答える 1

10

私が最初に考えたのは、これは見積もりの​​問題であり、Windowsのコマンドラインで見積もりを正しく行うのが難しいことで有名です。しかし、動作を変えるような引用の組み合わせを思いつくことはできませんでした。(問題は簡単に再現できます)

もちろん、それでも引用の問題である可能性がありますが、これはある種のSphinxのバグであると思われるので、Sphinxの開発者に報告してください。

それまでの間、別の解決策を次に示します。

ここから引用:

tags設定ファイルには、availableという名前の特別なオブジェクトがあります。タグのクエリと変更に使用できます(タグに基づくコンテンツを含めるを参照)。tags.has('tag')クエリtags.add('tag')tags.remove('tag')変更に使用します

これにより、基本的conf.pyにコマンドラインからファイルにフラグを渡すことができます。conf.pyファイルはPythonであるため、ステートメントを使用して、渡したタグに基づいて条件付きifでの値を設定できます。exclude_patterns

たとえば、次のようなSphinxオプションを渡すことができます。

SPHINXOPTS =-tforadminsを設定します

「foradmins」タグを渡し、次のconf.pyようにチェックします。

exclude_patterns = blah
if tags.has('foradmins'):
    exclude_patterns = []
    

それはあなたがあなたが望むことをすることを可能にするはずです。幸運を!

于 2012-12-07T15:27:44.710 に答える