設定#
Sphinx-Gallery の設定とカスタマイズは、主に conf.py
ファイルで指定された辞書を使用して行われます。可能なキーのリストは下記に記載されており、後続のセクションで詳細に説明されています。
これらのフラグを使用する場合は、ソース Python ファイルが生成された HTML と iPython ノートブックと等価であることを確認することがベストプラクティスです(つまり、.py == .html == .ipynb
を確認してください)。この原則は、必要に応じて、ケースバイケースで破るべきです。
設定オプション#
グローバル conf.py
設定#
Sphinx の conf.py
ファイル内の sphinx_gallery_conf
辞書内で設定できる Sphinx-Gallery の設定オプション。
ギャラリーファイルと順序
examples_dirs
とgallery_dirs
(複数のギャラリーの管理)filename_pattern
、ignore_pattern
、example_extensions
、およびfiletype_parsers
(パターンによる例のパースと実行)copyfile_regex
(ファイルの手動によるパススルー)subsection_order
(ギャラリーサブセクションのソート)within_subsection_order
(ギャラリー例のソート)nested_sections
(ギャラリーセクションのネスト)
実行例
reset_argv
(例スクリプトへのコマンドライン引数の渡す)capture_repr
とignore_repr_types
(キャプチャする出力の制御)plot_gallery
(例を実行せずにビルドする)run_stale_examples
(古い例を再実行する)abort_on_example_error
(最初のエラーでビルドを中止する)expected_failing_examples
(特定の例でエラーが発生してもビルドを失敗させない)only_warn_on_example_error
(エラーでビルドを失敗させない)reset_modules
とreset_modules_order
(モジュールのリセット)parallel
(例を並列でビルドする)
相互参照
reference_url
、prefer_full_module
(例に Intersphinx リンクを追加する)backreferences_dir
、doc_module
、exclude_implicit_doc
、およびinspect_global_variables
(ミニギャラリーを追加する)minigallery_sort_order
(ファイルからミニギャラリーのサムネイルをソートする)
画像とサムネイル
default_thumb_file
(カスタムデフォルトサムネイルを使用する)thumbnail_size
(ギャラリーサムネイルサイズの設定)image_srcset
(マルチ解像度画像)image_scrapers
(画像スクレイパー)compress_images
(画像の圧縮)
計算コスト
min_reported_time
(最小報告時間)write_computation_times
(計算時間の書き込み)show_memory
(メモリ消費量の表示)junit
(JUnit XML ファイルの使用)
Jupyter ノートブックとインタラクティビティ
notebook_extensions
(ノートブックのダウンロードリンクの制御)promote_jupyter_magic
(ノートブックでセルマジックを実行可能にする)first_notebook_cell
とlast_notebook_cell
(独自の最初のセルと最後のセルを追加する)notebook_images
(ノートブックに画像を追加する)pypandoc
(reST を markdown に変換するために pypandoc を使用する)binder
(ギャラリーノートブックの Binder リンクを生成する(実験的))jupyterlite
(ギャラリーノートブックの JupyterLite リンクを生成する(実験的))
外観
line_numbers
(例に行番号を追加する)remove_config_comments
(設定コメントの削除)show_signature
(シグネチャを表示する)download_all_examples
(すべてのスクリプトのダウンロードボタンを無効にする)
その他
recommender
(例推奨システムを有効にする)log_level
(ログレベルの設定)show_api_usage
とapi_usage_ignore
(API 使用状況の表示)
例の中の設定#
いくつかのオプションは、ファイルごとに設定または上書きすることもできます。
# sphinx_gallery_line_numbers
(例に行番号を追加する)# sphinx_gallery_thumbnail_number
(サムネイル画像の選択)# sphinx_gallery_thumbnail_path
(サムネイル画像の画像を提供する)# sphinx_gallery_failing_thumbnail
(失敗した例でのサムネイルの動作を制御する)# sphinx_gallery_dummy_images
(ダミー画像の生成)# sphinx_gallery_capture_repr
(キャプチャする出力の制御)# sphinx_gallery_multi_image
(同じコードブロックからの複数の図のレイアウトを制御する)
いくつかのオプションは、ファイル内のコードブロックごとに設定できます。
# sphinx_gallery_defer_figures
(複数のコードブロックを使用して単一の図を作成する)# sphinx_gallery_multi_image_block
(同じコードブロックからの複数の図のレイアウトを制御する)
いくつかのオプションは、ファイル内の行ごとに設定できます: - # sphinx_gallery_start_ignore
と # sphinx_gallery_end_ignore
(コード行の非表示)
レンダリングされた例からファイル内の設定コメントを非表示にするには、設定コメントの削除も参照してください。
ビルドオプション#
一部のオプションは、ビルド実行ステップ(例:Makefile を使用)中に設定できます。
make html-noplot
(実行例なしでのビルド)make html_abort_on_example_error
(最初のエラーでビルドを中断)
CSS の変更#
いくつかの項目は CSS で直接調整できます。
.sphx-glr-thumbcontainer
(ギャラリーのサムネイルサイズの設定)
警告の削除#
警告が取得されてビルドされたドキュメントに含まれるのを防ぐには、conf.py
ファイルで warnings
パッケージを使用できます。例えば、Matplotlib の agg に関する特定の警告を削除するには、
import warnings
warnings.filterwarnings("ignore", category=UserWarning,
message='Matplotlib is currently using agg, which is a'
' non-GUI backend, so cannot show the figure.'
'|(\n|.)*is non-interactive, and thus cannot be shown')
を conf.py
ファイルに追加します。
上記の Matplotlib の警告は、デフォルトで削除されます。
呼び出し可能オブジェクトのインポート#
インスタンス化されたクラス、クラス、または関数である Sphinx-Gallery の設定値は、オブジェクトへの完全修飾名文字列として渡す必要があります。オブジェクトは Sphinx-Gallery でインポート可能である必要があります。
これを実現する一般的な方法は 2 つあります。
パッケージでオブジェクトを定義します。例えば、
def my_sorter
関数を記述し、mymod/utils.py
に配置し、次のように使用します。sphinx_gallery_conf = { #..., "minigallery_sort_order": "mymod.utils.my_sorter", #... }
ドキュメントでオブジェクトを定義します。例えば、別のパスにドキュメント固有のものを追加し、ビルド時に解決できるようにします。例えば、
doc/sphinxext.py
ファイルを作成し、関数を次のように定義します。def plotted_sorter(fname): return not fname.startswith("plot_"), fname
そして、設定で次のように設定します。
sys.path.insert(0, os.path.dirname(__file__)) sphinx_gallery_conf = { #..., "minigallery_sort_order": "sphinxext.plotted_sorter", #... }
Sphinx-Gallery は、
doc/
ディレクトリがパスの先頭にあるため、"sphinxext.plotted_sorter"
をplotted_sorter
オブジェクトに解決します。
sphinx_gallery.sorting.FileNameSortKey
など、組み込みのクラスは、"FileNameSortKey"
のようなより短い直接的なエイリアス文字列を使用して使用できます(詳細は ギャラリー例をソートする を参照してください)。
注記
Sphinx-Gallery >0.16.0 は、Sphinx >7.3.0 の conf.py
ファイルのキャッシングとシリアル化チェックに対する変更に対応して、完全修飾名文字列の使用をサポートしています。
これは、ビルド全体で __repr__
が安定するように設定値にクラスインスタンスを使用するという以前の方法が、名前文字列を介して設定値を渡す場合、冗長であることを意味します。名前文字列を使用する場合、設定オブジェクトは関数であるだけで済みます。
安定した __repr__
の確保#
後方互換性のために、Sphinx-Gallery は、インポート可能な名前文字列 の代わりに、特定の設定値を呼び出し可能オブジェクトにすることを許可しています。
呼び出し可能オブジェクトを使用する場合は、実行全体で __repr__
が安定していることを確認する必要があります。Sphinx は、ビルド環境が変更されたかどうか、したがってすべてのドキュメントを書き直す必要があるかどうかを、md5(str(obj).encode()).hexdigest()
を使用して設定値を検査することで判断します(sphinx/builders/html.py
)。Python のデフォルトのクラスインスタンスには、__repr__
にメモリアドレスが含まれているため、一般的に __repr__
は各ビルドで変更されます。
呼び出し可能オブジェクトは、安定した __repr__
メソッドを定義するクラスである必要があります。例えば、sphinx_gallery.sorting.ExplicitOrder
の安定性は、カスタム __repr__
によって保証されます。
def __repr__(self):
return '<%s: %s>' % (self.__class__.__name__, self.ordered_list)
したがって、ファイルは指定された順序付きリストが変更された場合にのみ再ビルドされます。
複数のギャラリーの管理#
Sphinx-Gallery は、ギャラリーディレクトリ内のサブフォルダーのネストを 1 レベルのみサポートしています。例えば、Matplotlib を使用した基本ギャラリー は、親ギャラリーを examples/ に、サブセクション(別名サブギャラリー)を examples/no_output/ に配置しています。それ以上のサブフォルダーはサポートされていません。これは制限事項となる可能性があります。または、例ギャラリーとチュートリアルギャラリーなど、異なる目的で個別のギャラリーを用意したい場合もあります。これを行うには、Sphinx の conf.py
ファイルで、Sphinx-Gallery の設定辞書のキー examples_dirs と gallery_dirs をディレクトリのリストとして設定します。
sphinx_gallery_conf = {
...
'examples_dirs': ['../examples', '../tutorials'],
'gallery_dirs': ['auto_examples', 'tutorials'],
}
両方のリストの長さは同じである必要があることに注意してください。
注記
例の実行に時間がかかる場合は、各ギャラリーディレクトリについて(ビルド中にそのディレクトリで例が実際に実行された限り)、そしてすべてのギャラリーについてグローバルに生成される 実行時間 ファイルを参照することを検討してください。
一致パターンによる例のパースと実行#
デフォルトでは、Sphinx-Gallery は .py
拡張子を持つすべてのファイルをギャラリーにパースして追加しますが、plot_
で始まるファイルのみ実行します。これらの動作は、ignore_pattern
、filename_pattern
、および example_extensions
エントリによって制御され、デフォルト値は次のとおりです。
sphinx_gallery_conf = {
...
'filename_pattern': '/plot_',
'ignore_pattern': r'__init__\.py',
'example_extensions': {'.py'}
}
ギャラリーから一部のファイルを完全に省略するには(つまり、実行、パース、追加を行わない)、ignore_pattern
オプションを変更します。パースおよび追加された Python スクリプトのうち、実際に実行するものを選択するには、filename_pattern
を変更します。例えば
sphinx_gallery_conf = {
...
'filename_pattern': '/plot_compute_',
}
は、plot_compute_
で始まるすべての例をビルドします。filename_pattern
(および ignore_pattern
)キーは、正規表現 を受け入れ、例のフルパスと照合されます。これが、先頭の '/'
が必要な理由です。オペレーティングシステムに依存しないようにするには、'/'
の代わりに re.escape(os.sep)
を使用することをお勧めします。
filename_pattern
オプションは、例の一部のみをビルドする場合にも役立ちます。例えば、ドキュメントにリンクするために 1 つの例のみをビルドする場合があります。その場合は、次のようにします。
sphinx_gallery_conf = {
...
'filename_pattern': r'plot_awesome_example\.py',
}
ここでは、ドット r'\.'
をエスケープする必要があります。そうでなければ、Python の 正規表現 は任意の文字と一致します。ただし、特定のファイルを対象としているため、このエスケープ文字がなくてもファイル名内のドットと一致します。
注記
Sphinx-Gallery は、変更された例(それらの MD5 ハッシュに基づいて)のみを再実行します。詳細は、下記の 古い例を再実行する を参照してください。
同様に、特定のディレクトリ内の例のみをビルドするには、次のようにします。
sphinx_gallery_conf = {
...
'filename_pattern': '/directory/plot_',
}
あるいは、例の実行をスキップすることもできます。例えば、plot_long_examples_
で始まる例の実行をスキップするには、次のようにします。
sphinx_gallery_conf = {
...
'filename_pattern': '/plot_(?!long_examples)',
}
パターンは 正規表現 として解析されるため、詳細は 正規表現 モジュールを参照することをお勧めします。
注記
Sphinx はコマンドラインから conf.py
の値を上書きできるため、例えば、次のようなコマンドで単一の例を直接ビルドできます。
$ sphinx-build -D sphinx_gallery_conf.filename_pattern=plot_specific_example\.py ...
また、example_extensions
に拡張子を追加することで、他の言語の構文例をパースして強調表示することもできますが、それらは実行されません。例えば、Python、Julia、C++ の例を含めるには
sphinx_gallery_conf = {
...
'example_extensions': {'.py', '.jl', '.cpp'}
}
パースと構文の強調表示は Pygments ライブラリによってサポートされており、言語はファイル拡張子によって決定されます。Pygments のデフォルトのファイル関連付けを上書きするには、filetype_parsers
オプションを使用して、example_extensions
のファイル拡張子のいずれかを pygments の言語名 のいずれかにマッピングする dict
を指定できます。例えば
sphinx_gallery_conf = {
...
'filetype_parsers': {'.m': 'Matlab'}
}
古い例を再実行する#
デフォルトでは、Sphinx-Gallery は変更された例のみを再ビルドします。例えば、クリーンな doc/
ディレクトリから開始する場合、HTML ビルドを 1 回実行すると、Sphinx-Gallery は指定された ファイル名/無視パターン に一致するすべての例を実行します。次に、まったく同じコマンドを 2 回目実行しても、例は実行されません。これは、各例の MD5 ハッシュが、最初のビルド時に例ファイルが持っていた MD5 ハッシュ(生成されたディレクトリに <filename>.md5
としてディスクに保存される)と照合されるためです。これらが一致するため、例は「古い」と判断され、Sphinx-Gallery によって再ビルドされません。この設計機能により、例が変更された場合にのみ再ビルドすることで、より迅速なドキュメントの反復が可能になります。
しかし、これはデバッグと反復処理のあるモードで問題を引き起こします。基盤となるライブラリの関数を変更しながら、特定の例を繰り返し再構築したいが、例ファイルの内容自体は変更したくないとします。これを行うには、例に何か変更を加える(例:改行を追加/削除する)か、.md5
ファイルを削除してSphinx-Galleryに例の再構築を強制する必要があります。代わりに、次の構成値を使用できます。
sphinx_gallery_conf = = {
...
'run_stale_examples': True,
}
この構成を使用すると、MD5ハッシュで例が変更されていないことが示されていても、ファイル名/無視パターンに一致するすべての例が再構築されます。これはファイル名/無視パターンと組み合わせて、単一の例を繰り返し再実行できます。たとえば、コマンドラインから実行できます。
$ make html SPHINXOPTS="-D sphinx_gallery_conf.run_stale_examples=True -D sphinx_gallery_conf.filename_pattern='my_example_name'"
このコマンドは、ファイル名パターン'my_example_name'
に一致するすべての例を、MD5ハッシュに関係なく再構築します。
例スクリプトへのコマンドライン引数の渡#
デフォルトでは、Sphinx-Galleryは例スクリプトにコマンドライン引数を渡しません。reset_argv
オプションを設定することで、この動作を変更し、コマンドライン引数を例スクリプトに渡すことができます。reset_argv
は、gallery_conf
とscript_vars
の辞書を入力として受け取り、インタープリターに追加のコマンドライン引数として渡される文字列のリストを返すCallable
である必要があります。
reset_argv
の例を以下に示します。
from pathlib import Path
def reset_argv(sphinx_gallery_conf, script_vars):
src_file = Path(script_vars['src_file']).name
if src_file == 'example1.py':
return ['-a', '1']
elif src_file == 'example2.py':
return ['-a', '2']
else:
return []
この関数はdoc/sphinxext.py
で定義されており、インポート可能であることを確認しました(Callableのインポートを参照)。
これは、構成辞書に次のように含めることができます。
sphinx_gallery_conf = {
...
'reset_argv': "sphinxext.reset_argv",
}
これはSphinx-Galleryによってreset_argv
のcallableに解決され、次のように使用されます。
import sys
sys.argv[0] = script_vars['src_file']
sys.argv[1:] = reset_argv(gallery_conf, script_vars)
注記
下位互換性のために、構成をcallableオブジェクトとして設定することもできますが、__repr__
が実行間で安定していることを確認する必要があります。安定した__repr__の確保を参照してください。
ギャラリーサブセクションのソート#
ギャラリーサブセクション(別名サブギャラリー)は、デフォルトでフォルダー名に従ってアルファベット順にソートされるため、フォルダー名を変更することで常に整理できます。または、目的の順序でconf.py
に対する相対パスとしてサブセクションのリストを提供することにより、構成値「subsection_order」を使用して順序を指定できます。
sphinx_gallery_conf = {
...
'examples_dirs': ['../examples','../tutorials'],
'subsection_order': ['../examples/sin_func',
'../examples/no_output',
'../tutorials/seaborn'],
}
ここでは、サブセクションを含む2つのメインギャラリー「examples」と「tutorials」を構築します。すべてのサブセクションをリストする必要があります。それが面倒すぎる場合は、リストされていないすべてのサブセクションを収集するエントリ「*」を使用できます(例:["first_subsection", "*", "last_subsection"]
)。
さらに一般的には、「subsection_order」を任意のcallableに設定できます。これは、サブセクションパスに対するソートキー関数として使用されます。詳細については、カスタムソートキーを参照してください。
実際、上記のリストは便宜的なショートカットであり、内部的にはsphinx_gallery.sorting.ExplicitOrder
でソートキーとしてラップされています。
注記
Sphinx-Gallery <0.16.0では、リストをExplicitOrder
でラップする必要があります。
from sphinx_gallery.sorting import ExplicitOrder
sphinx_gallery_conf = {
...
'subsection_order': ExplicitOrder([...])
}
このパターンは、単純なリストを渡すことをお勧めします。
構築されるすべてのギャラリーに対して単一のソートキーを使用しているため、対応するサブセクションフォルダーに各ギャラリーのプレフィックスを含めることに注意してください。ギャラリーごとにソートキーを定義することはありません。Linuxパスを使用できます。ドキュメントがWindowsシステムで構築されている場合、パスはそれに応じて機能するように変換されますが、その逆は当てはまりません。
ギャラリー例のソート#
特定のギャラリー(サブ)セクション内では、例ファイルは、デフォルトでkey
引数にNumberOfCodeLinesSortKey(src_dir)
が設定された標準のsorted()
関数を使用して、コード行数に基づいてファイルをソートします。
sphinx_gallery_conf = {
...
'within_subsection_order': "NumberOfCodeLinesSortKey",
}
within_subsection_order
でサポートされている組み込みの便利なクラス
sphinx_gallery.sorting.NumberOfCodeLinesSortKey
(デフォルト)は、コード行数でソートします。sphinx_gallery.sorting.FileSizeSortKey
は、ファイルサイズでソートします。sphinx_gallery.sorting.FileNameSortKey
は、ファイル名でソートします。sphinx_gallery.sorting.ExampleTitleSortKey
は、例のタイトルでソートします。
注記
これらの組み込みSphinx-Galleryクラスは、ステムのみを使用して指定できます(例:「NumberOfLinesSortKey」)。これは、完全修飾名「sphinx_gallery.sorting.NumberOfCodeLinesSortKey」を提供することと機能的に同等です。詳細については、Callableのインポートを参照してください。
カスタムソートキー#
次の構成に対してカスタムソートキーcallableを作成できます。
これを行う最良の方法は、渡されたパス文字列を受け取るソート関数を定義することです。
def plotted_sorter(fname):
return not fname.startswith("plot_"), fname
インポート可能であることを確認し(Callableのインポートを参照)、構成を設定します。
sphinx_gallery_conf = {
#...,
"minigallery_sort_order": "sphinxext.plotted_sorter",
#...
}
下位互換性のために、構成をcallableオブジェクトとして設定することもできますが、__repr__
が実行間で安定していることを確認する必要があります。詳細については、安定した__repr__の確保を参照してください。
__repr__
が実行間で安定することを保証するため、sphinx_gallery.sorting.FunctionSortKey
の使用をお勧めします。
sphinx_gallery.sorting.FunctionSortKey
は、初期化時に関数を受け取ります。ソートキー関数を使用してFunctionSortKey
インスタンスをインスタンス化することで、カスタムソートキーcallableを作成できます。たとえば、次のminigallery_sort_order
構成(パスでソートする)は、各ファイル名の最初の10文字を使用してソートします。
sphinx_gallery_conf = {
#...,
"minigallery_sort_order": FunctionSortKey(
lambda filename: filename[:10]),
#...
}
例へのIntersphinxリンクの追加#
Sphinx-Galleryを使用すると、例スクリプトにハイパーリンクを追加して、使用されている関数/メソッド/属性/オブジェクト/クラスを対応するオンラインドキュメントにリンクできます。ギャラリー内のそのようなコードスニペットは、次のように表示されます。
y = np.sin(x)
これは、導入例 - sinのプロットの例で完全に動作しているのをご覧ください。
ドキュメントでこれを機能させるには、Sphinxのconf.py
ファイル内の構成辞書に含める必要があります。
sphinx_gallery_conf = {
...
'reference_url': {
# The module you locally document uses None
'sphinx_gallery': None,
}
}
外部モジュールへのリンクを作成するには、Sphinx拡張機能sphinx.ext.intersphinx
を使用している場合、intersphinx
インベントリが自動的に使用されるため、追加の変更は必要ありません。intersphinx
を使用していない場合は、searchindex.js
を含むディレクトリを指すエントリを追加する必要があります(例:「matplotlib」:「https://matplotlib.org」)。
通常のreSTドキュメントで同じことを行う場合は、プレーンreSTの例を参照してください。
モジュールパスの解決#
オブジェクトへのリンクを見つける際、デフォルトでは最短のモジュールパスを使用し、それが依然として同じオブジェクトを指していることを確認します。これは、より深いモジュールで定義されたクラスが、上位レベルのモジュールの__init__.py
でインポートされるため(したがって、ユーザーが期待する名前空間であるため)、より浅いモジュールでドキュメント化されるのが一般的であるためです。
ただし、コードで継承されたクラスを使用していて、オブジェクトのベースクラスではなく子クラスを指すリンクという点でリンクが正しくない場合、prefer_full_module
オプションが問題を解決する可能性があります。詳細については、GitHubのissueを参照してください。
ドキュメントでこれを機能させるには、conf.py
内のSphinx-Gallery設定辞書にprefer_full_module
を含める必要があります。
sphinx_gallery_conf = {
...
# Regexes to match the fully qualified names of objects where the full
# module name should be used. To use full names for all objects use: '.*'
'prefer_full_module': {r'module\.submodule'}
}
上記の例では、正規表現'module\.submodule'
に一致するすべての完全修飾名は、短いモジュール名(例:module.meth)ではなく、完全なモジュール名(例:module.submodule.meth)を使用してリンクを作成します。その他すべては、(デフォルトの)リンク方法を使用します。
ミニギャラリーの追加#
Sphinx-Galleryは、sphinx_gallery.directives.MiniGallery
ディレクティブを提供するため、Sphinxドキュメント.rst
ファイルにギャラリーの縮小版を簡単に追加できます。そのため、minigalleryディレクティブは、以下のいずれかのリスト(スペース区切り)を渡すことをサポートしています。
オブジェクトの完全修飾名(APIドキュメントへのミニギャラリーの追加を参照) - これにより、コードで使用されたオブジェクトまたは例テキストで参照されたオブジェクトを持つすべての例が追加されます。
globスタイルを含む、例となるPythonファイルへのパスのような文字列(ファイルパスを使用したミニギャラリーの作成を参照)
オブジェクト名を使用するには、逆参照の生成を有効にする必要があります。詳細については、APIドキュメントへのミニギャラリーの追加を参照してください。逆参照の生成が有効になっていない場合、MiniGallery
ディレクティブへのオブジェクトエントリは無視され、すべてのエントリはパスのような文字列またはglobスタイルのパスのような文字列として扱われます。ファイルパスを使用したミニギャラリーの作成で詳細を確認してください。
APIドキュメントへのミニギャラリーの追加#
Sphinx-Galleryは、指定されたモジュールからのオブジェクトのミニギャラリーを生成できます。これは、次のいずれかの例で構成されます。
コード内で関数/メソッド/属性/オブジェクトを使用するか、クラスをインスタンス化します(*暗黙的な逆参照*と呼ばれます)。または
テキストブロックでsphinxマークアップ
:func:
/:meth:
/:attr:
/:obj:
/:class:
を使用して、その関数/メソッド/属性/オブジェクト/クラスを参照します。conf.py
でdefault_roleをこれらの役割のいずれかに設定している場合は、この役割マークアップを省略できます(*明示的な逆参照*と呼ばれます)。
これにより、オブジェクト(関数、メソッド、属性、クラスなど)の完全修飾名をminigalleryディレクティブに渡して、そのオブジェクトに関連するすべての例のminigalleryを追加できます。これは、APIドキュメントで役立ちます。
**暗黙的な逆参照**は、コード内で使用されるオブジェクトと、明示的にインスタンス化されるクラスを自動的に文書化するのに役立ちます。コードでオブジェクトが使用されているすべての例は、*暗黙的に*逆参照として追加されます。**明示的な逆参照**は、例のテキストで*明示的に*参照されているオブジェクト用です。これらは、通常はコード内で暗黙的に返されるのではなく、明示的にインスタンス化されるクラス(例:matplotlib.axes.Axes
(これは、ほとんどの場合、関数呼び出し内でのみ間接的にインスタンス化されます))に役立ちます。
たとえば、numpy.exp
を使用または参照するすべての例を含む小さなギャラリーを埋め込むことができます。これは次のようになります。
numpy.exp
を使用する例#
このような動作を利用するには、Sphinx-Galleryの設定conf.py
ファイルで次のようにアクティブ化する必要があります。
sphinx_gallery_conf = {
...
# directory where function/class granular galleries are stored
'backreferences_dir' : 'gen_modules/backreferences',
# Modules for which function/class level galleries are created. In
# this case sphinx_gallery and numpy in a tuple of strings.
'doc_module' : ('sphinx_gallery', 'numpy'),
# Regexes to match objects to exclude from implicit backreferences.
# The default option is an empty set, i.e. exclude nothing.
# To exclude everything, use: '.*'
'exclude_implicit_doc': {r'pyplot\.show'},
}
backreferences_dir
で指定したパス(ここではgen_modules/backreferences
を選択します)には、' .examples 'で終わる名前のReStructuredTextファイルが作成されます。各.rstファイルには、すべての例で使用され、doc_module
にリストされているモジュールに属するすべての関数/クラスに固有のギャラリーの縮小版が含まれます。逆参照ファイルは、すべてのオブジェクトに対して生成されます。どの例でも使用されていないオブジェクトには、autodocの解析中に包含エラーを防ぐために空のファイルが作成されます。
backreferences_dir
は、conf.py
ファイルに対する**相対的な**文字列またはpathlib.Path
オブジェクト、またはNone
である必要があります。デフォルトではNone
です。
場合によっては、Matplotlibのpyplot.show
やpyplot.subplots
関数など、特定のモジュールについて事実上すべての例で使用されている関数があり、多くの場合、無関係な例がこれらの関数にリンクされます。これを防ぐために、exclude_implicit_doc
に正規表現として含めることで、特定のオブジェクトの暗黙的な逆参照を除外できます。次の設定では、暗黙的な逆参照がすべて除外されるため、例ギャラリーは、ドキュメントブロックでSphinxマークアップによって明示的に言及されたオブジェクトに対してのみ作成されます。{'.*'}
。上記で言及した関数を除外するには、{r'pyplot\.show', r'pyplot\.subplots'}
を使用します(ドットではなく任意の文字に一致させるためのエスケープに注意してください。名前があいまいでない場合は、pyplot.show
または単にshow
と書くこともできます)。
ファイルパスを使用したミニギャラリーの作成#
共通の関数を持たないファイル(たとえば、一連のチュートリアル)を使用して、mini-gallery
を明示的に作成したい場合があります。そのため、minigalleryディレクティブは、次のものの受け渡しをサポートしています。
sphinxギャラリーの例ファイルへのパスのような文字列(
conf.py
を基準とする)Sphinx-Galleryの例ファイルへのglobスタイルのパスのような文字列(
conf.py
を基準とする)
たとえば、以下のrstは、特定の関数numpy.exp
、例examples/plot_sin_.py
、および文字列/examples/plot_4*
に一致するすべてのファイルを使用するすべての例に関するギャラリーの縮小版を追加します。
.. minigallery::
:add-heading:
numpy.exp
../examples/plot_0_sin.py
../examples/plot_4*
複数の項目をリストすると、すべての例が単一のミニギャラリーにマージされます。ミニギャラリーは、ファイルが存在する場合、または項目が実際に例で使用または参照されている場合にのみ表示されます。サムネイルは、複数のオブジェクト名またはオブジェクト名とファイル/glob入力に対応する場合にも重複する可能性があります。
複数のオブジェクトのいずれかを使用する例#
ディレクティブの本文に項目のリストを提供することもできます。
.. minigallery::
:add-heading:
numpy.exp
../examples/plot_0_sin.py
../examples/plot_4*
add-heading
オプションは、ミニギャラリーの見出しを追加します。文字列引数が提供されない場合、単一の項目のみがリストされている場合、デフォルトの見出しは
「{完全修飾オブジェクト名}を使用する例」
複数の項目を含むギャラリーの場合は、カスタムの見出しメッセージを指定することをお勧めします。それ以外の場合は、デフォルトのメッセージは
「複数のオブジェクトのいずれかの例」
上記で示した例のミニギャラリーは、デフォルトの見出しレベル^
を使用しています。これは、heading-level
オプションを使用して変更できます。このオプションは、単一の文字(例:-
)を受け入れます。
minigalleryディレクティブへの入力は、スペースで区切られた引数のリストとして渡すこともできます。
.. minigallery:: numpy.exp ../examples/plot_0_sin.py ../examples/plot_4*
ファイルからのミニギャラリーサムネイルの並べ替え#
minigalleryディレクティブは、入力ファイル文字列またはオブジェクト名に対応するサムネイルのギャラリーを生成します。 minigallery_sort_order
設定を使用して、ミニギャラリーのサムネイルの順序を指定できます。これは、すべてのミニギャラリーを並べ替える際に、sorted()
key
パラメーターに渡されます。並べ替えでは、ギャラリーの例へのパス(例:path/to/plot_example.py
)と入力に対応する逆参照(例:path/to/numpy.exp.examples
)が使用されます。
カスタムソートキーの作成方法の詳細については、カスタムソートキーを参照してください。
例として、逆参照サムネイルを最後に配置するには、doc/sphinxext.py
で以下の関数を定義できます(逆参照ファイル名は「plot_」で始まらず、False
はTrue
よりも前に並べ替えられます。0は1より小さいため)。
def function_sorter(x)
return (not os.path.basename(x).startswith("plot_"), x)::
次に、設定を(関数がインポート可能であることを確認して)次のように設定できます。
sphinx_gallery_conf = {
#...,
"minigallery_sort_order": "sphinxext.function_sorter",
#...
}
Sphinx-Galleryは"sphinxext.function_sorter"
をfunction_sorter
オブジェクトに解決します。
APIバックリファレンス(つまり、修飾されたオブジェクト名を入力としてリンクされたサムネイル)から生成されたサムネイルのセットのソートはサポートされていませんが、ミニギャラリーのソートには{input}.example
バックリファレンスファイル名が渡されるため、ソート機能を使用してバックリファレンスサムネイルのセット全体の位置を調整できます。サムネイルは、複数のオブジェクト名、またはオブジェクト名とファイル/glob入力に対応する場合、重複する可能性があります。
例へのリンクを使用したAPIの自動ドキュメント化#
前の機能は、標準のsphinx拡張機能autodocとautosummaryを組み合わせることで、すべてのモジュールに対して自動化できます。まず、conf.py
のextensionsリストでそれらを有効にします。
import sphinx_gallery
extensions = [
...
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
'sphinx_gallery.gen_gallery',
]
# generate autosummary even if no references
autosummary_generate = True
autodocとautosummaryは非常に強力な拡張機能です。それらについて読んでください。この例では、Sphinx-Gallery APIリファレンスがどのように自動生成されるかを説明します。ドキュメントはモジュールレベルで行われます。reference.rst
ファイルから始めます。
.. _sphx_glr_api_reference:
Sphinx-Gallery API Reference
============================
.. note::
Sphinx-Gallery is typically used indirectly via Sphinx execution and
configuration variables, see :ref:`configuration` for how to do this.
However, as a standard Python project, we document many functions and
classes as well below, even though these will typically not be needed
by end users.
.. currentmodule:: sphinx_gallery
.. automodule:: sphinx_gallery
:no-members:
:no-inherited-members:
:py:mod:`sphinx_gallery`:
.. autosummary::
:toctree: gen_modules/
:template: module.rst
gen_gallery
backreferences
gen_rst
scrapers
py_source_parser
block_parser
docs_resolv
notebook
downloads
sorting
interactive_example
directives
.. currentmodule:: sphinx_gallery.utils
.. automodule:: sphinx_gallery.utils
:no-members:
:no-inherited-members:
:py:mod:`sphinx_gallery.utils`:
.. autosummary::
:toctree: gen_modules/
:template: module.rst
optipng
重要なディレクティブはcurrentmodule
であり、ここでドキュメント化するモジュールを指定します。私たちの目的ではsphinx_gallery
です。autosummary
ディレクティブは、各モジュールを文書化するrst
ファイルを生成する役割を担っています。autosummary
は、rst
ファイルが保存される場所であるtoctreeオプションと、モジュールのrst
ドキュメントファイルの構築方法を記述するファイルであるtemplateオプションを受け取ります。最後に、ドキュメント化するモジュールを記述します。この場合、Sphinx-Galleryのすべてのモジュールです。
autosummary
ディレクティブのテンプレートファイルmodule.rst
は、_templates/module.rst
パスに保存する必要があります。次のブロックに設定を示します。最も関連性の高い部分は、モジュールのすべての関数/クラスを解析する**12〜21行目**間に定義されたループです。そこで、前のセクションで紹介したminigallery
ディレクティブを使用しました。
また、例ミニギャラリーを含める前に、クロス参照ラベル(16行目)を追加します。これにより、:ref:`sphx_glr_backref_<fun/class>`
を使用して、モジュールのすべての関数/クラスのミニギャラリーを参照できます。ここで「<fun/class>」は、ドット表記を使用した関数/クラスへの完全パスです(例:sphinx_gallery.backreferences.identify_names
)。例として、以下を参照してください:Examples using sphinx_gallery.backreferences.identify_names.
1{{ fullname }}
2{{ underline }}
3
4.. automodule:: {{ fullname }}
5
6 {% block functions %}
7 {% if functions %}
8
9 Functions
10 ---------
11
12 {% for item in functions %}
13
14 .. autofunction:: {{ item }}
15
16 .. _sphx_glr_backref_{{fullname}}.{{item}}:
17
18 .. minigallery:: {{fullname}}.{{item}}
19 :add-heading:
20
21 {%- endfor %}
22 {% endif %}
23 {% endblock %}
24
25 {% block classes %}
26 {% if classes %}
27
28 Classes
29 -------
30
31 {% for item in classes %}
32 .. autoclass:: {{ item }}
33 :members:
34
35 .. _sphx_glr_backref_{{fullname}}.{{item}}:
36
37 .. minigallery:: {{fullname}}.{{item}}
38 :add-heading:
39
40 {%- endfor %}
41 {% endif %}
42 {% endblock %}
43
44 {% block exceptions %}
45 {% if exceptions %}
46
47 Exceptions
48 ----------
49
50 .. autosummary::
51 {% for item in exceptions %}
52 {{ item }}
53 {%- endfor %}
54 {% endif %}
55 {% endblock %}
グローバル変数の検査の切り替え#
デフォルトでは、Sphinx-Galleryは各コードブロックの最後にグローバル変数(およびコードオブジェクト)を検査して、変数とメソッド呼び出しのクラスを見つけようとします。また、クラスで呼び出されたメソッドも検索しようとします。たとえば、このコード
lst = [1, 2]
fig, ax = plt.subplots()
ax.plot(lst)
は、(インタースフィンクスが正しく設定されていると仮定して)次のリンクで終わるはずです。
ただし、この機能はすべてのインスタンスで正常に機能するとは限りません。さらに、同じスクリプト内で異なるクラスを参照するために変数名が再利用されると、機能しなくなります。
このグローバル変数のイントロスペクションを無効にするには、構成キーを使用できます。
sphinx_gallery_conf = {
...
'inspect_global_variables' : False,
}
CSSを使用したコードリンクのスタイル設定#
コードブロックの各リンクは、2つまたは3つのCSSクラスで装飾されます。
sphx-glr-backref-module-*
オブジェクトが文書化されているモジュールにちなんで名付けられたCSSクラス。
*
はモジュールを表します(例:sphx-glr-backref-module-matplotlib-figure
)。
sphx-glr-backref-type-*
オブジェクトの種類にちなんで名付けられたCSSクラス。
*
はオブジェクトの種類を表します。これはサニタイズされたインタースフィンクスタイプです(例:py:class
にはsphx-glr-backref-type-py-class
というCSSクラスがあります)。
sphx-glr-backref-instance
オブジェクトがクラスのインスタンスである場合にのみ追加される3番目の「オプション」クラス(クラス自体、メソッド、関数などではなく)。デフォルトでは、Sphinx-Galleryは
gallery.css
に次のCSSを追加します。a.sphx-glr-backref-instance { text-decoration: none; }
これは、例コードにおけるインスタンスリンクの視覚的な影響を軽減するために行われます。つまり、次のコードの場合
x = Figure()
x
(クラスのインスタンス)にはsphx-glr-backref-instance
CSSクラスがあり、装飾されません。Figure
はクラスであるため、sphx-glr-backref-instance
CSSクラスがなく、指定された親スタイルのリンクの標準的な方法で装飾されます。
これら3つのCSSクラスは、さまざまなリンクの装飾方法をきめ細かく制御することを目的としています。たとえば、CSSセレクターを使用して、許可リストに含めるもの(独自のモジュールからのものなど)を除くすべてのsphx-glr-backref-*
リンクの強調表示を避けることができます。たとえば、次のCSSは、matplotlibを除くすべてのモジュールの装飾を妨げます。
a[class^="sphx-glr-backref-module-"] {
text-decoration: none;
}
a[class^="sphx-glr-backref-module-matplotlib"] {
text-decoration: underline;
}
text-decoration
以外にも設定する価値のある要素がある可能性があります。
これらのCSSクラスを追加するには、Sphinx構成html_static_path
を介して独自のCSSファイルを含めます。これにより、Sphinx-Gallery CSSファイルのデフォルトのCSSクラスが上書きされます。
カスタムデフォルトサムネイルの使用#
プロットを生成しない例のサムネイルに独自の画像を使用する場合は、Sphinxのconf.py
ファイルを編集して指定できます。default_thumb_fileというキーを構成辞書に追加する必要があります。例:
sphinx_gallery_conf = {
...
'default_thumb_file': 'path/to/thumb/file.png',
}
例への行番号の追加#
グローバルline_numbers
設定を追加することで、リストに表示される行番号。
sphinx_gallery_conf = {
...
'line_numbers': True,
}
または、例スクリプトにコメントを追加することで、グローバル設定を上書きできます。
# sphinx_gallery_line_numbers = True
設定コメントの削除#
一部の設定は、# sphinx_gallery_config [= value]
というパターンを持つ特別なコメントを例のソースファイルに追加することで、ファイル内で指定できます。デフォルトでは、ソースファイルはそのまま解析されるため、コメントは例に表示されます。
レンダリングされた例からコメントを削除するには、オプションを設定します。
sphinx_gallery_conf = {
...
'remove_config_comments': True,
}
これにより、テキストブロックではなくコードブロックからの設定コメントのみが削除されます。ただし、技術的には、ファイルレベルの設定コメントは、コードブロックとテキストブロックのどちらに配置しても機能します。
独自の最初のノートブックセルと最後のノートブックセルの追加#
Sphinx-Galleryを使用すると、生成されたすべてのノートブックに独自の最初のセルと/または最後のセルを追加できます。最初のセルを追加すると、ノートブックで適切に実行するために必要なコードを含めることができますが、.py
ファイルには含めることができません。デフォルトでは、最初のセルは追加されません。
最後のセルを追加すると、ユーザーの環境に関するレポートなど、必要なアクションを実行するのに役立ちます。デフォルトでは、最後のセルは追加されません。
first_notebook_cell
とlast_notebook_cell
構成パラメーターを変更することで、好きなテキストを選択できます。たとえば、次の最初のセルを追加できます。
# This cell is added by Sphinx-Gallery
# It can be customized to whatever you like
これは、次の構成によって実現されます。
sphinx_gallery_conf = {
...
'first_notebook_cell': ("# This cell is added by Sphinx-Gallery\n"
"# It can be customized to whatever you like\n"
)
}
last_notebook_cell
パラメーターを設定することで、同様に最後のセルを追加できます。
sphinx_gallery_conf = {
...
'first_notebook_cell': ("# This cell is added by Sphinx-Gallery\n"
"# It can be customized to whatever you like\n"
),
'last_notebook_cell': "# This is the last cell",
}
first_notebook_cell
またはlast_notebook_cell
の値がNone
に設定されている場合、ノートブックに追加の最初のセルまたは最後のセルは追加されません。
ノートブックへの画像の追加#
ノートブックが生成される場合、デフォルトでは(notebook_images = False
) reSTドキュメントブロックのimageディレクティブの画像パス(コードから生成された画像ではない)は、元のパスを使用してマークダウンに含まれます。これには、ローカルファイルシステムに存在するはずの画像へのパスが含まれますが、これはノートブックをダウンロードするユーザーには当てはまりません。
notebook_images = True
を設定すると、Base64でエンコードされたdata URIを介して、生成されたノートブックに画像が埋め込まれます。data URIを介した画像の包含は、ノートブックのサイズを大幅に増加させる可能性があるため、ギャラリー全体で小さな画像を使用する場合にのみ使用することをお勧めします。
別の方法として、画像に使用されるプレフィックス文字列(ドキュメントがホストされているルートURLなど)を提供することもできます。たとえば、次の構成
sphinx_gallery_conf = {
...
'examples_dirs': ['../examples'],
'gallery_dirs': ['auto_examples'],
...
'notebook_images': 'https://project.example.com/en/latest/',
...
}
reSTドキュメントブロックにimageディレクティブの例があるとします。
.. image:: ../_static/example.jpg
:alt: An example image
画像は、ソースURLhttps://project.example.com/en/latest/_static/example.jpg
を指して生成されたノートブックに追加されます。上記のreST例における画像パスは相対パスであるため、URLにはauto_examples
が含まれていません。../
はドキュメントソースディレクトリまで1つ上のディレクトリに移動しました。相対パスと絶対パス(ソースディレクトリから)の両方がサポートされています。したがって、上記の例では/_static/example.jpg
と同じURLが生成されます。
プレフィックスは直接適用されるため、必要な場合はプレフィックスに末尾の/
を含める必要があります。
ヒント
ホストされたサービスでドキュメントの複数のバージョンを作成し、プレフィックスを使用する場合は、sphinx build -Dコマンドラインオプションを使用して、リンクが正しいバージョンを指していることを確認することを検討してください。例:
sphinx-build \
-b html \
-D sphinx_gallery_conf.notebook_images="https://project.example.com/docs/${VERSION}/" \
source_dir build_dir
pypandocを用いたreSTからMarkdownへの変換#
Sphinx-Galleryは、(インストールされている場合)pypandoc を使用して、各例について生成されるIPythonノートブック(.ipynb
ファイル)のために、reSTテキストブロックをMarkdownに変換できます。これらは、生の.py
バージョンと共に、各例の最後にダウンロードできます。
Sphinx-GalleryのreSTからMarkdownへのコンバーターは、より複雑なreST構文のサポートが限られています。例がより複雑なreSTを使用している場合、pypandoc
の方が良い結果が得られる可能性があります。デフォルトでは、「pypandoc」設定はFalse
に設定されており、pypandoc
は使用されません。
pypandoc
を使用するには、次のように設定します。
sphinx_gallery_conf = {
...
'pypandoc': True,
}
pypandoc.convert_text()
パラメータのextra_args
とfilters
を使用して、pandocオプションを使用することもできます。これらのパラメータを使用するには、「pypandoc」設定をキーワード引数の辞書に設定します。
sphinx_gallery_conf = {
...
'pypandoc': {'extra_args': ['--mathjax',],
'filters': ['pandoc-citeproc',],
}
警告
特定のpandocオプションは、望ましくない影響を与える可能性があります。注意して使用してください。
JUnit XMLファイルの使用#
Sphinx-Galleryは、例のランタイム、成功、失敗のJUnit XMLファイルを作成できます。たとえば、junit-result.xml
という名前のファイルを/build
出力ディレクトリに作成するには、設定キー(パスはHTML出力ディレクトリからの相対パスです)を設定します。
sphinx_gallery_conf = {
...
'junit': '../test-results/sphinx-gallery/junit.xml',
}
デフォルトでは、JUnit XMLファイルの生成は無効になっています('junit': ''
に設定)。JUnit XMLファイルは、CircleCIビルドなどで役立ちます。CircleCI GUIで例のランタイムのサマリーを取得するために、次のような行を追加できます(これはファイルパスdoc/_build/test-results/sphinx-gallery/junit.xml
を解析し、ネストされたサブディレクトリ名に基づいてテストがsphinx-gallery
から来たことを推測します)。
- store_test_results:
path: doc/_build/test-results
- store_artifacts:
path: doc/_build/test-results
CircleCIとの統合の詳細については、関連するCircleCIドキュメントとブログ投稿を参照してください。
ログレベルの設定#
Sphinx-Galleryは、いくつかの段階でログ出力を記録します。ケース感度が必要なコード(例:plt.subplot
とplt.Subplot
)について、ケース感度のある名前付けをサポートしないファイルシステム(例:Windows)でドキュメントをビルドする場合、警告が生成される可能性があります。この場合、デフォルトではlogger.warning
が出力され、-W
を使用してビルドするとビルドエラーが発生します。ログレベルは次のように設定できます。
sphinx_gallery_conf = {
...
'log_level': {'backreference_missing': 'warning'},
}
現在有効なキーはbackreference_missing
のみです。有効な値は'debug'
、'info'
、'warning'
、および'error'
です。
サムネイル画像の選択#
複数の図を生成する例の場合、デフォルトの動作では、各例で最初に作成された図がギャラリーに表示されるサムネイル画像として使用されます。サムネイル画像を後で例スクリプトで生成された図に変更するには、例スクリプトにコメントを追加して、サムネイルとして使用したい図の番号を指定します。たとえば、2番目に作成された図をサムネイルとして使用する場合は、次のようにします。
# sphinx_gallery_thumbnail_number = 2
負の数も使用できます。これは、最後の図から数えます。たとえば、-1は、例で最後に作成された図をサムネイルとして使用することを意味します。
# sphinx_gallery_thumbnail_number = -1
デフォルトの動作はsphinx_gallery_thumbnail_number = 1
です。サムネイル図の選択で、この機能の例を参照してください。
サムネイル画像用の画像の提供#
任意の画像を例にサムネイル画像として使用できます。サムネイルとして使用する画像を指定するには、例スクリプトにコメントを追加して、目的の画像へのパスを指定します。画像へのパスはconf.py
ファイルからの相対パスにする必要があり、コメントはdocstringの下(できればコードブロック内、設定コメントの削除を参照)にする必要があります。
たとえば、次の例では、_static/
フォルダー内のdemo.png
という画像を使用してサムネイルを作成することを定義しています。
# sphinx_gallery_thumbnail_path = '_static/demo.png'
sphinx_gallery_thumbnail_number
はsphinx_gallery_thumbnail_path
よりも優先されます。サムネイル画像用の図の提供で、この機能の例を参照してください。
失敗した例におけるサムネイル動作の制御#
デフォルトでは、予期される失敗した例には、「BROKEN」という単語がスタンプされたサムネイル画像が表示されます。この動作はsphinx_gallery_failing_thumbnail
によって制御され、デフォルトではTrue
です。サムネイル画像を制御したい場合は、これをFalse
に設定します。これにより、サムネイルの動作が「通常」に戻り、サムネイルは最初に作成された図(図が作成されていない場合はデフォルトのサムネイル)または指定されたサムネイルになります。
# sphinx_gallery_failing_thumbnail = False
実行に失敗した例(通常のサムネイル動作の場合)(オプションがFalse
の場合)と実行に失敗した例(オプションがデフォルトのTrue
の場合)のサムネイルを比較して、この機能の例を参照してください。
ギャラリーノートブックのBinderリンクの生成(実験的)#
Sphinx-Galleryは、ギャラリーでビルドされたすべての例について、自動的にJupyterノートブックを生成します。Binderを使用すると、クラウドリソースに接続するインタラクティブなGitHubリポジトリを作成できます。
ドキュメントをGitHubリポジトリでホストしている場合は、各ノートブックのBinderリンクを自動生成できます。このリンクをクリックすると、ユーザーはコードをインタラクティブに実行できるJupyterノートブックのライブバージョンに移動します。詳細については、Binderドキュメントを参照してください。
警告
Binderはまだベータ版テクノロジーであるため、Binderリンクをクリックしたユーザーのエクスペリエンスに不安定さが発生する可能性があります。
Sphinx-GalleryでBinderリンクを有効にするには、conf.py
にいくつかの情報を指定する必要があります。これらは、以下のパターンに従ったネストされた辞書として与えられます。
sphinx_gallery_conf = {
...
'binder': {
# Required keys
'org': '<github_org>',
'repo': '<github_repo>',
'branch': '<github_branch>', # Can be any branch, tag, or commit hash. Use a branch that hosts your docs.
'binderhub_url': '<binder_url>', # Any URL of a binderhub deployment. Must be full URL (e.g. https://mybinder.org).
'dependencies': '<list_of_paths_to_dependency_files>',
# Optional keys
'filepath_prefix': '<prefix>' # A prefix to prepend to any filepaths in Binder links.
'notebooks_dir': '<notebooks-directory-name>' # Jupyter notebooks for Binder will be copied to this directory (relative to built documentation root).
'use_jupyter_lab': <bool> # Whether Binder links should start Jupyter Lab instead of the Jupyter Notebook interface.
}
}
BinderのSphinx-Gallery設定が検出されると、次の追加処理が行われます。
dependencies
で指定された依存ファイルは、ビルドされたドキュメントのbinder/
フォルダーにコピーされます。ドキュメントからビルドされたJupyterノートブックは、ビルドされたドキュメントのルートにある
<notebooks_dir/>
という名前のフォルダーにコピーされます(ノートブックディレクトリフォルダー内では同じフォルダー階層に従います)。各Sphinx-Gallery例のreST出力には、
launch binder
ボタンが表示されるようになります。そのボタンは、次の構造のBinderリンクを指します。
<binderhub_url>/v2/gh/<org>/<repo>/<ref>?filepath=<filepath_prefix>/<notebooks_dir>/path/to/notebook.ipynb
各フィールドのより詳しい説明を以下に示します。
- org(型:文字列)
ドキュメントが保存されているGitHub組織。
- repo(型:文字列)
ドキュメントが保存されているGitHubリポジトリ。
- branch(型:文字列)
ドキュメントが存在するリポジトリのバージョンの参照。たとえば、ビルドされたドキュメントが
gh-pages
ブランチに保存されている場合、このフィールドはgh-pages
に設定する必要があります。- binderhub_url(型:文字列)
例を実行するBinderHubデプロイメントへの完全なURL。
https://mybinder.org
には公開されているBinderHubデプロイメントがありますが、(ユーザーと)別のものへのアクセス権がある場合は、このフィールドで設定できます。- dependencies(型:リスト)
Binderがあなたのサンプルを実行するために必要な環境を推測するために使用する依存ファイルへのパス(
conf.py
を基準とした相対パス)のリストです。例えば、requirements.txt
ファイルなどです。これらは、作成されたドキュメントフォルダ内のbinder/
というフォルダにコピーされます。使用可能な依存ファイルの完全なリストについては、Binderの設定ドキュメントを参照してください。- filepath_prefix(型: 文字列 | None、デフォルト:
None
) Binderリンクのファイルパスに追加するプレフィックスです。ルートではなくリポジトリのサブフォルダに作成されたドキュメントを保存する場合に使用します。
- notebooks_dir(型: 文字列、デフォルト:
notebooks
) 作成されたJupyter Notebookをコピーするフォルダの名前です。これにより、ユーザーが1つのセッションで複数のNotebookサンプルを参照できるように、すべてのNotebookが1箇所にまとめられます(ただし、フォルダ階層は保持されます)。
- use_jupyter_lab(型: ブール値、デフォルト:
False
) Binderリンクによってアクティブ化されるデフォルトのインターフェースが、Jupyter Labか従来のJupyter Notebookインターフェースのどちらになるかを指定します。
生成されたJupyter Notebookはそれぞれ、notebooks_dir
で指定されたフォルダにコピーされます。これはSphinx出力ディレクトリのサブフォルダになり、サイトビルドに含まれます。BinderリンクはこれらのNotebookを指します。
注記
現在、Sphinx-Galleryで生成されたNotebookをreadthedocs.orgでホストすることはできません。RTDはBinderをリンクできるGitHubリポジトリを提供していないためです。Sphinx-GalleryとBinderリンクをreadthedocsと共に使用したい場合は、ドキュメントを独立してビルドし、GitHubブランチにもホストする必要があります。
Sphinxの設定ファイルを参照してください。公開Binderサーバーを使用する例を示しています。
ギャラリーNotebookのJupyterLiteリンクを生成(実験的)#
Sphinx-Galleryは、ギャラリーを使用して作成されたすべてのサンプルに対してJupyter Notebookを自動的に生成します。JupyterLiteを使用すると、ブラウザでサンプルを実行できます。Binderと同様、Notebookとして対話的にサンプルを実行できるJupyter環境が提供されます。Binderとの主な違いは、
JupyterLiteでは、サンプルがブラウザ内で実際に実行されるため、クラウド上の別のマシンでPythonコードを実行する必要がありません。つまり、Jupyterサーバーの起動が一般的に速くなり、Binderイメージがビルドされるのを待つ必要がありません。
JupyterLiteでは、最初のインポートに時間がかかります。執筆時点(2023年2月)では、
import scipy
に約15~30秒かかる場合があります。一見無害なPythonコードでも、予期せぬ方法で動作が停止する可能性があります。JupyterカーネルはPyodideに基づいており、Pyodideのいくつかの制限についてはこちらを参照してください。JupyterLite環境はBinderほど柔軟ではありません。例えば、Dockerイメージを使用することはできませんが、デフォルトのPyodide環境のみを使用できます。つまり、純粋なPythonパッケージではないパッケージの中には使用できないものがあります。Pyodideで使用可能なパッケージのリストを参照してください。
警告
JupyterLiteはまだベータ版技術であり、Binderほど成熟していないため、JupyterLiteリンクをクリックしたユーザーのエクスペリエンスにおいて、不安定性や予期せぬ動作が発生する可能性があります。
Sphinx-GalleryでJupyterLiteリンクを有効にするには、jupyterlite-sphinxパッケージをインストールする必要があります。jupyterlite-sphinx>=0.8(2023年3月15日リリース)以降は、jupyterlite-pyodide-kernelもインストールする必要があります。
次に、conf.py
でSphinx拡張機能にjupyterlite_sphinxを追加する必要があります。
extensions = [
...,
'jupyterlite_sphinx',
]
conf.py
でsphinx_gallery_conf['jupyterlite']
を設定して、JupyterLiteの統合を構成できます。
sphinx_gallery_conf = {
...
'jupyterlite': {
'use_jupyter_lab': <bool>, # Whether JupyterLite links should start Jupyter Lab instead of the Retrolab Notebook interface.
'notebook_modification_function': <str>, # fully qualified name of a function that implements JupyterLite-specific modifications of notebooks
'jupyterlite_contents': <str>, # where to copy the example notebooks (relative to Sphinx source directory)
}
}
各フィールドのより詳しい説明を以下に示します。
- use_jupyter_lab(型: ブール値、デフォルト:
True
) JupyterLiteリンクによってアクティブ化されるデフォルトのインターフェースが、Jupyter LabかRetroLab Notebookインターフェースのどちらになるかを指定します。
- notebook_modification_function(型: 文字列、デフォルト:
None
) JupyterLite固有のNotebookの変更を実装する関数の完全修飾名です。デフォルトでは
None
であり、Notebookは変更されません。シグネチャはnotebook_modification_function(json_dict: dict, notebook_filename: str) -> None
でなければなりません。ここでjson_dict
はjson.load(open(notebook_filename))
を実行したときに得られるものです。この関数は、Notebookセルを追加することでjson_dict
をインプレースで変更するものと期待されます。sphinx-gallery
が担当しているため、ファイルへの書き込みは期待されていません。notebook_filename
は、ファイル名に基づいてNotebookを変更する場合に役立つため、便宜上提供されています。この関数の潜在的な用途としては、%pip install seaborn
コードセルを使用して追加のパッケージをインストールしたり、NotebookがPyodideにパッケージ化されていないパッケージを使用しているため、JupyterLite内では動作しないことを示すMarkdownセルを追加したりすることがあります。下位互換性のために、呼び出し可能でも構いませんが、Sphinxによって環境の一部として適切にキャッシュされません。- jupyterlite_contents(型: 文字列、デフォルト:
jupyterlite_contents
) 作成されたJupyter Notebookをコピーするフォルダの名前です(Sphinxソースディレクトリを基準とした相対パス)。Jupyterliteの内容として使用されます。
conf.py
で変数を設定してjupyterlite-sphinx
を構成できます。詳細については、jupyterlite-sphinxドキュメントを参照してください。
JupyterLite用のSphinx-Galleryの設定が検出されると、次の追加処理が行われます。
jupyterlite-sphinx
を妥当なデフォルト値で構成します(例:jupyterlite_bind_ipynb_suffix = False
を設定)。ドキュメントから作成されたJupyter Notebookは、
<jupyterlite_contents>/
というフォルダ(Sphinxソースディレクトリを基準とした相対パス)にコピーされます。notebook_modification_function
がNone
でない場合、この関数がJupyterLite固有の変更をNotebookに追加します。各Sphinx-GalleryサンプルのreST出力には、
launch JupyterLite
ボタンが表示されます。そのボタンはJupyterLiteリンクを指しており、現在のサンプルをNotebookとして持つJupyterサーバーをブラウザで起動します。
何らかの理由でjupyterlite-sphinx
拡張機能を有効にしたいが、Sphinx-Gallery Jupyterlite統合を使用しない場合は、次の操作を実行できます。
extensions = [
...,
jupyterlite_sphinx,
]
sphinx_gallery_conf = {
...
'jupyterlite': None
}
JupyterLite統合を使用する例については、Sphinx-GalleryのSphinx設定ファイルを参照してください。
Notebookダウンロードリンクの制御#
デフォルトでは、Jupyter NotebookのダウンロードリンクとBinderまたはJupyterLite(有効になっている場合)の起動リンクは、Pythonサンプルに対してのみ表示されます。他のファイル拡張子の解析が有効になっている場合(example_extensions
オプションを使用。 パターンによるサンプルの解析と実行を参照)、notebook_extensions
オプションを使用してNotebookダウンロードを有効にできます。例:
sphinx_gallery_conf = {
"notebook_extensions": {".py", ".jl"}
}
ギャラリーディレクトリのファイル名と、リストされている拡張子が比較されます。
注記
現在、生成されたすべてのNotebookはPythonをカーネルとして指定しています。ダウンロード後、ユーザーは手動で正しいカーネルに変更する必要があります。
Notebookでセルマジックを実行可能にする#
多くの場合、チュートリアルには、ユーザーがターミナルにコピー&ペーストするbashコードが含まれています。このコードは、ドキュメントを作成する際に実行する必要はありません。なぜなら、環境に既にそれらの依存関係があるからです。そのため、通常はテキスト内のコードブロックとして記述されます。
#%%
# Installing dependencies
#
# .. code-block:: bash
#
# pip install -q tensorflow
# apt-get -qq install curl
これは.py
ファイルと.html
ファイルでは問題ありませんが、Jupyter Notebookとしてレンダリングすると問題が発生します。ダウンロードされた.ipynb
ファイルにはそれらの依存関係がインストールされておらず、bashコードを実行しないと動作しません。
これを修正するために、conf.py
でpromote_jupyter_magic
フラグを設定できます。
sphinx_gallery_conf = {
...
'promote_jupyter_magic': True,
}
このフラグがTrue
の場合、Jupyter Notebookの作成時に、Jupyterセルマジック(例: %%bash
または%%writefile
)で始まるコードブロックは、実行可能なコードブロックに変換されます。
前の例では、Markdownテキストを次のように変更できます。
#%%
# Installing dependencies
#
# .. code-block:: bash
#
# %%bash
# pip install -q tensorflow
# apt-get -qq install curl
つまり、TensorFlowとCurlはJupyter Notebookの実行時に自動的にインストールされます。これは、上記のセルマジックだけでなく、すべてのセルマジックで機能し、Jupyter Notebookの作成のみに影響します。
警告
.py
ファイルと.html
ファイルが.ipynb
ファイルとできるだけ一致するようにすることがベストプラクティスです。この機能は、関連するコードをエンドユーザーが実行することを意図している場合にのみ使用する必要があります。
サンプルを実行せずにビルドする#
Sphinx-Galleryは、すべてのサンプルを解析してギャラリーを作成できますが、スクリプトを実行する必要はありません。これは、ギャラリーの速度の可視化プロセスや、ウェブサイトに表示されるサイズ、その他考えられる用途のためだけです。これを実現するには、Makefile
を変更してビルドプロセスにno plotオプションを渡す必要があります。
html-noplot:
$(SPHINXBUILD) -D plot_gallery=0 -b html $(ALLSPHINXOPTS) $(SOURCEDIR) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
Makefile
では空白が重要であり、インデントはタブでスペースではありません。
あるいは、conf.py
内のsphinx_gallery_conf
辞書にplot_gallery
オプションを追加して、デフォルトとして設定することもできます。
sphinx_gallery_conf = {
...
'plot_gallery': 'False',
}
sphinx-build
コマンドの-Dフラグには常に最高の優先順位が与えられます。
注記
Makefile
にhtml-noplot
を追加する場合は、Sphinxの設定に関する警告を避けるため、conf.py
ファイル内のsphinx_gallery_conf
ディクショナリでplot_gallery
のデフォルト値を明示的に設定する必要があります。
画像の圧縮#
PNGファイル(デフォルトのスクレーパー形式)を作成する際、Sphinx-Galleryはoptipng
を使用してPNGファイルサイズを最適化するように設定できます。通常、これによりファイルサイズが約50%削減され、ギャラリーの読み込み時間が短縮されます。ただし、ビルド時間が長くなる可能性があります。許可される値は'images'
と'thumbnails'
、またはタプル/リスト(両方最適化する場合)です。例:
sphinx_gallery_conf = {
...
'compress_images': ('images', 'thumbnails'),
}
デフォルトは()
(最適化なし)であり、最適化が要求されているのにoptipng
が利用できない場合は警告が表示されます。追加のコマンドラインオプション('-'
で始まる)を渡すこともできます。たとえば、最適化を少なくしてビルド時間を短縮するには、次のようにします。
sphinx_gallery_conf = {
...
'compress_images': ('images', 'thumbnails', '-o1'),
}
オプションの完全なリストについては、$ optipng --help
を参照してください。
マルチ解像度画像#
Webブラウザは、<img>
タグにsrcset
パラメータを使用することで、高DPI/Retinaディスプレイ向けの高解像度画像に対応できます。レスポンシブな解像度画像をサポートしています。Sphinx Galleryは、image_srcset
パラメータを使用してこれをサポートしています。
sphinx_gallery_conf = {
...
'image_srcset': ["2x"],
}
これにより、通常の図のdpi(通常は100 dpi)で1xの画像と、2倍の密度(例:200 dpi)で2xのバージョンが保存されます。デフォルトでは追加の画像はなく('image_srcset': []
)、必要に応じてリストとして他の解像度を指定できます。["2x", "1.5x"]
。
matplotlibスクレーパーは、rstファイルにカスタムイメージディレクティブimage-sg
を作成します。
.. image-sg:: /examples/images/sphx_glr_test_001.png
:alt: test
:srcset: /examples/images/sphx_glr_test_001.png, /examples/images/sphx_glr_test_001_2_0x.png 2.0x
:class: sphx-glr-single-img
これは、カスタムディレクティブによって次のようにhtmlに変換されます。
.. <img src="../_images/sphx_glr_test_001.png" alt="test", class="sphx-glr-single-img",
srcset="../_images/sphx_glr_test_001.png, ../_images/sphx_glr_test_001_2_0x.png 2.0x>
これによりWebサイトは大きくなりますが、srcset
タグをサポートするクライアントは、適切なサイズの画像のみをダウンロードします。
.. image-sg
ディレクティブは、現在width
、height
、align
などの他の.. image
ディレクティブタグを無視することに注意してください。また、*html*および*latex*ビルダーでのみ機能します。
画像スクレーパー#
画像スクレーパーは、Sphinx-Galleryが例の実行中に生成された画像を検出し、ドキュメントに埋め込むことを可能にするプラグインです。スクレーパーは、Sphinx-Galleryの設定にある'image_scrapers'
タプルにスクレーパー名を追加することで有効にできます。たとえば、matplotlibの画像をスクレイピングするには、次のようにします。
sphinx_gallery_conf = {
...
'image_scrapers': ('matplotlib',),
}
デフォルト値は'image_scrapers': ('matplotlib',)
であり、Matplotlib画像のみをスクレイピングします。これには、SeabornやYellowbrickなど、Matplotlibをベースとしたパッケージによって生成された画像も含まれることに注意してください。
Matplotlibアニメーション#
matplotlib.animation.Animation
を単一の静止画ではなくアニメーションとして埋め込む場合は、matplotlib_animations設定を使用する必要があります。これは、アニメーションを有効にするかどうかを示すbool値、または(enabled: bool, format: str)形式のタプルを受け入れます。
sphinx_gallery_conf = {
...
'matplotlib_animations': (True, 'mp4'),
}
matplotlib_animationsのデフォルトはFalseです。
Matplotlibでサポートされているアニメーションのファイル形式であればどれでも使用できます。形式が指定されていない場合(つまり、単一のbool値の場合)、または*None*の場合、形式はrcParams['animation.html']
およびmatplotlib rcParams内の関連オプションによって決定されます。これは、コードブロック内で設定できることを意味しますが、Sphinx-Galleryは各例ファイルの実行前にMatplotlibのデフォルト値をリセットすることに注意してください(モジュールのリセットを参照)。
形式が'html5'
または'jshtml'
の場合、アニメーションは結果のHTMLファイルに効果的に埋め込まれます。それ以外の場合は、アニメーションは外部ファイルに保存されるため、生成されるReSTファイルのサイズが小さくなります。外部ファイルに保存する形式を要求する場合は、環境にsphinxcontrib-video拡張機能をインストールする必要があります。
matplotlib_animations
を使用してrcParams['animation.html']
をグローバルに設定できますが、コードブロック内で設定すると、グローバル設定が上書きされることに注意してください。
また、「FFmpeg」または「imagemagick」がwriter
として使用できることを確認することをお勧めします。matplotlib.animation.ImageMagickWriter.isAvailable()
またはmatplotlib.animation.FFMpegWriter.isAvailable()
を使用して確認できます。Matplotlib <3.3.1を使用していない限り、FFMpegライターをお勧めします。
サポートされているスクレーパーは以下のとおりです。
- matplotlib
Sphinx-Galleryは、文字列
'matplotlib'
を介してmatplotlib
図のスクレーパーを維持しています。
- PyVista
PyVistaは、文字列
'pyvista'
によって有効化されるスクレーパー(PyVista ≥ 0.20.3の場合)を維持しています。
- PyGMT
Sphinx-Galleryとの統合方法の詳細については、ウェブサイトを参照してください。
- qtgallery
このライブラリは、Qtウィンドウのスクレーパーを提供します。Sphinx-Galleryとの統合方法については、リポジトリを参照してください。
上記以外のライブラリによって生成された画像のカスタムスクレーパーを作成できます。これは、任意のパッケージによって生成された画像を検出して取得する方法を定義する独自のPython関数を記述することで実現できます。手順については、カスタム画像スクレーパーの作成を参照してください。一般的に有用な実装(たとえば、プロットライブラリのカスタムスクレーパー)を考案した場合は、上記のリストに追加してください(こちらのディスカッションを参照)。
単一の図を作成するための複数のコードブロックの使用#
デフォルトでは、画像は例の各コードブロックの後にスクレイピングされます。したがって、以下は、コードブロックごとに1つのプロットを持つ2つのプロットを生成します。
# %%
# This first code block produces a plot with two lines
import matplotlib.pyplot as plt
plt.plot([1, 0])
plt.plot([0, 1])
# %%
# This second code block produces a plot with one line
plt.plot([2, 2])
plt.show()
ただし、特に図が多数のコマンドを必要とする場合、テキストブロックとインターリーブする方が有利な場合、単一の図を作成するために複数のコードブロックを使用することが有用な場合があります。オプションのフラグsphinx_gallery_defer_figures
をコードブロックの任意の場所にコメントとして挿入して、画像のスクレイピングを次のコードブロックに延期できます(必要に応じてさらに延期できます)。以下は、プロットを1つだけ生成します。
# %%
# This first code block does not produce any plot
import matplotlib.pyplot as plt
plt.plot([1, 0])
plt.plot([0, 1])
# sphinx_gallery_defer_figures
# %%
# This second code block produces a plot with three lines
plt.plot([2, 2])
plt.show()
同じコードブロックからの複数の図のレイアウトの制御#
デフォルトでは、同じコードブロックから生成された複数の図は並べて配置されます。特に幅の広い図の場合、画像が大幅に縮小され、可読性が低下する可能性があります。この動作は、次の2つのオプション変数を使用して制御できます。
ファイル全体の
sphinx_gallery_multi_image
変数コードブロック固有の
sphinx_gallery_multi_image_block
変数
デフォルトの動作では、これらの変数は"multi"
に設定され、図が並べて配置されます。これらの変数を"single"
に設定すると、コードブロックから生成された図を単一列で表示できます。
たとえば、次を追加すると
# sphinx_gallery_multi_image = "single"
例ファイル内のどこかに、複数の図が生成されるすべてのコードブロックの画像が単一列で表示されます。
または、次をコードブロックに追加すると
# sphinx_gallery_multi_image_block = "single"
そのコードブロックからの複数の図のみが単一列で表示されます。
逆に、ファイル全体に対してsphinx_gallery_multi_image = "single"
が設定されている場合、sphinx_gallery_multi_image_block = "multi"
を追加することで、単一コードブロックに対するデフォルトの動作を復元できます。
この機能のデモについては、例プロットを別々の行に表示するように強制するを参照してください。
コード行の非表示#
通常、Sphinx-Galleryは、HTMLとiPython Notebookをビルドする際に、Pythonコードのすべての行をレンダリングします。Pythonソースファイル、HTML、iPython Notebookがすべて同じ動作をするようにしたいので、これは通常望ましいことです。
ただし、実行されるが、ユーザー向けのドキュメントには含まれないPythonコードを使用する場合もあります。たとえば、ドキュメントが正常にビルドされたことを確認するためにいくつかのassert
文を追加したいが、ユーザーにこれらを表示したくないとします。sphinx_gallery_start_ignore
とsphinx_gallery_end_ignore
フラグを使用して、これを実現できます。
model.compile()
# sphinx_gallery_start_ignore
assert len(model.layers) == 5
assert model.count_params() == 219058
# sphinx_gallery_end_ignore
model.fit()
HTMLまたはiPython Notebookがビルドされると、このコードブロックは次のように表示されます。
model.compile()
model.fit()
sphinx_gallery_start_ignore
とsphinx_gallery_end_ignore
フラグは、任意のコードブロックで使用でき、同じブロック内で複数のフラグのペアを使用できます。すべての開始フラグには常に対応する終了フラグが必要です。そうでない場合、ドキュメント生成中にエラーが発生します。これらのフラグとその間のコードは、remove_config_comments
の設定に関係なく、常に削除されます。
無視されたコードからの出力は、引き続きキャプチャされることに注意してください。
警告
このフラグは控えめに使用する必要があります。なぜなら、これにより、.py
ソースファイルと生成された.html
ファイルと.ipynb
ファイルの同等性が低くなるためです。この関係を維持できる他の方法がある場合は、これを使用するのは適切な方法ではありません。
ダミー画像の生成#
特に記述プロセス中にギャラリーを迅速に視覚化するために、Sphinx-Galleryでは、コードを実行せずにギャラリーをビルドできます(実行せずにビルドするとファイル名/無視パターンを参照)。ただし、自動生成された画像へのリンクを手動で記述している場合、画像ファイルが見つからないという警告が表示される可能性があります。これらの警告を防ぐには、Sphinx-Galleryに、例の数だけのダミー画像を作成するように指示できます。
たとえば、「my_example.py」という例で2つの図を生成し、それらを他の場所で手動で参照する場合があります。例:
Below is a great figure:
.. figure:: ../auto_examples/images/sphx_glr_my_example_001.png
Here is another one:
.. figure:: ../auto_examples/images/sphx_glr_my_example_002.png
実行せずにビルドする際に、画像ファイルが見つからないという警告を防ぐには、次の例ファイルをに追加します。
# sphinx_gallery_dummy_images=2
これにより、Sphinx-Galleryは、実行してビルドしたときに生成される画像と同じ命名規則と保存場所を使用して、2つのダミー画像を生成します。既存の画像がある場合(たとえば、ビルドの以前の実行からの場合)、ダミー画像は生成されないため、上書きされません。
注記
この設定は、例の実行が設定されていない場合(つまり、plot_gallery
が'False'
である場合、例がignore_patternに含まれている場合、または例がfilename_pattern
に含まれていない場合 - ファイル名/無視パターンを参照)にのみ機能します。つまり、ギャラリーを実行してビルドする場合に、例からsphinx_gallery_dummy_images
行を削除する必要はありません。
モジュールのリセット#
多くの場合、1つの例でプロットの動作に加えられた変更が他の例に伝播しないようにするために、可視化パッケージの動作を「リセット」したいことがあります。
デフォルトでは、各例ファイルの実行前に、Sphinx-Galleryはmatplotlib
(matplotlib.pyplot.rcdefaults()
を使用して、ユニットレジストリを設定するサブモジュールを再ロードする)とseaborn
(sys.modules
からモジュールをアンロードしようとする)をリセットします。これは、次の設定と同じです。
sphinx_gallery_conf = {
...
'reset_modules': ('matplotlib', 'seaborn'),
}
現在、Sphinx-Galleryはmatplotlib
とseaborn
のリセットをネイティブにサポートしています。ただし、このタプルに独自の関数を追加して、他の可視化ライブラリの動作のリセットを定義することもできます。
これを行うには、各例の前に行うリセットの手順に従ってください。
モジュールのリセットの順序#
デフォルトでは、Sphinx-Galleryは各例の実行前にモジュールをリセットします。reset_modules_order
の選択肢はbefore
(デフォルト)、after
、およびboth
です。Sphinx-Galleryで実行された最後の例がモジュールを変更した場合、変更されたモジュールがSphinxのビルドプロセスの他の部分に漏れるのを防ぐために、after
またはboth
を使用することをお勧めします。たとえば、設定でreset_modules_order
をboth
に設定します。
sphinx_gallery_conf = {
...
'reset_modules_order': 'both',
}
例の前または後に呼び出されるかどうかに応じて、独自の機能を持つカスタム関数を構築できます。各例の前に行うリセットで詳細情報を確認してください。
ギャラリーの例スクリプトの失敗への対処#
プロジェクトが進化するにつれて、例スクリプトの一部が正常に実行されなくなる場合があります。Sphinx-Galleryは、これらのバグのある例を発見するプロセスを支援します。デフォルトの動作は、ギャラリーのこれらの例のサムネイルを壊れたサムネイルに置き換えることです。これにより、ギャラリーを簡単に見て、どの例が失敗したかをすばやく見つけることができます。壊れた例はギャラリーのhtmlビューでアクセス可能であり、失敗したコードブロックのトレースバックメッセージが書き込まれます。デフォルトの動作を確認するには、例実行に失敗する例を参照してください。
ビルドはコード1で終了して失敗し、失敗した例とそのトレースバックのサマリーが表示されます。これにより、ビルド後すぐに失敗した例がわかり、簡単にそれらを見つけることができます。
壊れた例に対処するための追加のオプションがあります。
最初の失敗時にビルドを中止する#
Sphinx-Galleryは早期失敗オプションを提供します。このモードでは、例スクリプトの実行で例外が発生するとすぐに、ギャラリーのビルドプロセスが中断されます。この動作を有効にするには、ビルドプロセスでフラグを渡す必要があります。Makefile
に含めることができます。
html_abort_on_example_error:
$(SPHINXBUILD) -D abort_on_example_error=1 -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
Makefile
では空白が重要であり、インデントはタブでスペースではありません。
あるいは、conf.py
設定ファイル内のsphinx_gallery_conf
辞書にabort_on_example_error
オプションを追加して、デフォルトとして設定することもできます。
sphinx_gallery_conf = {
...
'abort_on_example_error': True,
}
sphinx-build
コマンドの-Dフラグには常に最高の優先順位が与えられます。
特定の例がエラーになってもビルドに失敗しない#
例が失敗してもギャラリーを維持したい場合があります。そのため、Sphinx-Galleryを設定して、特定の例が失敗しても、終了コード0で終了するようにできます。これには、ビルド中に失敗を許可するすべての例をリストする必要があります。conf.pyをそれに応じて変更します。
sphinx_gallery_conf = {
...
'expected_failing_examples': ['../examples/plot_raise.py']
}
ここでは、ビルドプロセス中に失敗を許可する例をリストします。conf.pyから例スクリプトへの完全な相対パスを指定することを忘れないでください。
注記
例が失敗すると予想される場合、Sphinx-Galleryは、例がエラーなしで実行されるとエラーになります。
エラー時にビルドを失敗させない#
Sphinx-Galleryは、例が失敗した場合に警告のみをログに記録するように設定できます。これは、-W
フラグがsphinx-build
に渡された場合にのみ、sphinxがゼロ以外の終了コードで終了することを意味します。これは、次のように設定することで有効にできます。
sphinx_gallery_conf = {
...
'only_warn_on_example_error': True
}
並列で例をビルドする#
Sphinx-Galleryは、joblib
を使用して、例を同時に実行するように設定できます。これは、次のように設定することで有効にできます。
sphinx_gallery_conf = {
...
'parallel': 2,
}
引数がint
型の場合、その数値のジョブがjoblib.Parallel
に渡されます。引数がTrue
の場合、Sphinxの-j
フラグと同じ数のジョブが使用されます。
ドキュメント作成中にjoblib
から出力される警告(例:ワーカーの再起動に関するUserWarning)は、ギャラリー生成中に、サンプルコード実行からの警告と同時に出力されます。これらはwarnings.filterwarnings
でフィルタリングできます(警告の削除を参照)。これは、warnings.filterwarnings("error")
のような行を使用して、警告をエラーとして扱うようにドキュメント作成の警告処理を調整した場合に特に重要です。この場合、サンプルのビルド中にjoblibが警告を出力すると、警告がフィルタリングされない限り、そのサンプルは予期せず失敗します。これは、ドキュメント作成中のSphinx警告をエラーに変換する-W
/ --fail-on-warning
sphinx-build
フラグの影響を受ける警告とは異なります。
警告
一部のパッケージは並列処理と正常に動作しない可能性があるため、この機能は実験的です!
例えば、生成されたすべてのプロセスが適切に設定および終了されるようにするために、カスタムリセッターで変数を設定したり、関数を呼び出す必要がある場合があります。並列処理はjoblibのLokyバックエンドを通じて実現されます。Embarrassingly parallel for loopsを参照して、関連する多くの考慮事項(例:ピクル化、CPUリソースのオーバーサブスクリプションなど)のドキュメントを確認してください。
並列ビルドを使用すると、メモリ測定も無効になります。
サンプル推奨システムの有効化#
Sphinx-Galleryは、サンプルギャラリーのコンテンツベースの推奨事項を生成するように構成できます。関連するサンプルのリストは、テキストコンテンツのTF-IDF空間で最も近いサンプルを計算することによって自動的に生成されます。最も近いサンプルの計算には、単一のギャラリー(そのサブギャラリーを含む)内のサンプルのみが使用されます。次に、最も類似したコンテンツが、サムネイルのセットとして各サンプルの最後に表示されます。
enable
をTrue
に設定することで、推奨システムを有効にできます。設定するには、sphinx_gallery_conf
に辞書を渡します。
sphinx_gallery_conf = {
...
"recommender": {"enable": True, "n_examples": 5, "min_df": 3, "max_df": 0.9},
}
必要なパラメーターはenable
のみです。他のパラメーターが指定されていない場合、デフォルト値が使用されます。以下は、各フィールドのより詳細な説明です。
- enable (型:bool、デフォルト:False)
サンプルギャラリー内で推奨事項を生成するかどうか。この機能を有効にするには、依存関係にnumpyを追加する必要があります。
- n_examples (型:int、デフォルト:5)
表示する最も関連性の高いサンプルの数。
- min_df (型:[0.0, 1.0]の範囲のfloat | int、デフォルト:3)
語彙を作成する際に、指定されたしきい値よりも厳密に低い文書頻度を持つ用語を無視します。floatの場合、パラメーターは文書の割合を表し、整数値は絶対カウントを表します。この値は、文献ではカットオフとも呼ばれます。
- max_df (型:[0.0, 1.0]の範囲のfloat | int、デフォルト:0.9)
語彙を作成する際に、指定されたしきい値よりも厳密に高い文書頻度を持つ用語を無視します。floatの場合、パラメーターは文書の割合を表し、整数値は絶対カウントを表します。
- rubric_header (型:str、デフォルト:“Related examples”)
カスタマイズ可能なルブリックヘッダー。より説明的なテキストに変更したり、Sphinx-Galleryのドキュメントにある推奨システムのAPIドキュメントへの外部リンクを追加したりできます。
min_df
とmax_df
パラメーターは、非常にまれな単語や非常に一般的な単語をトリミングするためにユーザーがカスタマイズできます。これにより、推奨事項の品質が向上する可能性がありますが、さらに重要なのは、情報のないトークンに無駄になる計算リソースを節約できることです。
現在、サンプルの推奨事項は.py
ファイルに対してのみ計算されます。
ギャラリーサムネイルサイズの指定#
デフォルトでは、Sphinx-Galleryはサイズ(400, 280)
でサムネイルを生成します。次に、サムネイル画像はthumbnail_size
で指定されたサイズに拡大縮小され、必要に応じてピラーボックスまたはレターボックスを追加して、元の縦横比を維持します。デフォルトのthumbnail_size
は(400, 280)
(拡大縮小なし)であり、thumbnail_size
設定で変更できます。
sphinx_gallery_conf = {
...
'thumbnail_size': (250, 250),
}
ギャラリーでは、これらのサムネイルを表示するためにさまざまなCSSクラスが使用され、デフォルトでは最大160x112pxになります。これを変更するには、Sphinx設定html_static_path
を介して独自のCSSファイルを含めることで、デフォルトのCSSを修正できます(Sphinx-GalleryのCSSファイルのデフォルトのCSSクラスを上書きします)。次のCSSでは、画像はデフォルトの160x112pxではなく250x250pxで表示されます。
.sphx-glr-thumbcontainer {
min-height: 320px !important;
margin: 20px !important;
}
.sphx-glr-thumbcontainer .figure {
width: 250px !important;
}
.sphx-glr-thumbcontainer img {
max-height: 250px !important;
width: 250px !important;
}
.sphx-glr-thumbcontainer a.internal {
padding: 270px 10px 0 !important;
}
注記
thumbnail_size
のデフォルト値は、バージョン0.9.0で(400, 280)
(CSSで指定された最大値の2.5倍)から(320, 224)
(CSSで指定された最大値の2倍)に変更されます。これは、不要なオーバーサンプリングを防ぐためです。
最小報告時間#
デフォルトでは、Sphinx-Galleryは、各スクリプトの実行にかかった時間をログに記録し、HTML出力に埋め込みます。ほとんどのサンプルが高速に実行される場合、この情報は必要ない可能性があります。
min_reported_time
パラメーターは、秒数に設定できます。その時間よりも速く実行されたスクリプトの継続時間は、ログに記録されず、HTML出力にも埋め込まれません。
計算時間の書き込み#
すべてのギャラリー出力から計算時間を省略する場合は、False
に設定します。これは、再現可能なビルドに役立ちます。SOURCE_DATE_EPOCH
環境変数が設定されていない限り、デフォルトはTrue
です。
メモリ消費量の表示#
Sphinx-Galleryは、インストールされている場合、memory_profiler
を使用して、サンプルの実行中のピークメモリを報告できます。memory_profiler
をインストールした後、次のように実行できます。
sphinx_gallery_conf = {
...
'show_memory': True,
}
GPUメモリなどを表示する必要がある場合など、独自のメモリレポーターを使用することもできます。その場合、show_memory
は、呼び出す単一の関数(つまり、個々のスクリプトコードブロックを実行するために内部で生成されたもの)を受け取り、次の2つの要素のタプルを返すcallableでなければなりません。
関数の実行中に使用されたメモリ(MiB単位)、および
関数の出力
常に0のメモリ使用量を報告するバージョンは次のとおりです。
sphinx_gallery_conf = {
...
'show_memory': lambda func: (0., func()),
}
シグネチャの表示#
デフォルトでは、Sphinx-Galleryは生成された出力に**Generated by …**という通知を書き込みます。
show_signature
パラメーターを使用して、これを無効にすることができます。
キャプチャする出力の制御#
注記
バージョンv0.5.0より前の出力キャプチャ動作に戻すには、capture_repr
を空のタプル(つまり、capture_repr: ())に設定します。
capture_repr
設定により、サンプルの.py
ファイルの実行中にキャプチャする出力を制御し、その後、構築されたドキュメントに組み込むことができます。標準出力に送られたデータは常にキャプチャされます。*各*コードブロックの最後のステートメントの値が式である場合も、キャプチャできます。これを行うには、優先順位に従ってcapture_repr
タプルにキャプチャする「表現」メソッドの名前を提供します。現在サポートされている表現メソッドは次のとおりです。
__repr__
- オブジェクトの公式な文字列表現を返します。これは、Pythonシェルで式を評価したときに返されるものです。__str__
- オブジェクトの適切に印刷可能な表現を含む文字列を返します。これは、オブジェクトをprint()
するとき、またはformat()
に渡すときに使用されます。_repr_html_
- オブジェクトのHTMLバージョンを返します。このメソッドは、pandasのデータフレームなどの一部のオブジェクトにのみ存在します。
出力キャプチャは、capture_repr
設定でグローバルに制御したり、サンプルファイルにコメントを追加してファイルごとに制御したりできます。これは、グローバル設定を上書きします。
# sphinx_gallery_capture_repr = ()
デフォルトの設定は次のとおりです。
sphinx_gallery_conf = {
...
'capture_repr': ('_repr_html_', '__repr__'),
}
デフォルトの設定では、Sphinx-Galleryはまず、コードブロックの最後のステートメントが式である場合、その_repr_html_
のキャプチャを試みます。このメソッドが式に存在しない場合、タプル内の2番目の「表現」メソッドである__repr__
がキャプチャされます。__repr__
も存在しない場合(ユーザー定義オブジェクト以外ではまれ)、何もキャプチャされません。標準出力に送られたデータは**常に**キャプチャされます。いくつかのサンプルについては、出力表現のキャプチャを参照してください。
標準出力に送られたデータのみをキャプチャするには、'capture_repr'
を空のタプルに設定します:'capture_repr': ()
。これにより、v0.5.0より前のSphinx-Galleryの動作が模倣されます。
別の視点から見ると、次のコードブロックを考えてみましょう。
print('Hello world')
a=2
a # this is an expression
'Hello world'
は、標準出力に送られるため、すべてのcapture_repr
設定でキャプチャされます。さらに、
capture_repr
が空のタプルである場合、それ以外は何もキャプチャされません。capture_repr
が('__repr__')
の場合、2
もキャプチャされます。capture_repr
が('_repr_html_', '__repr__')
(デフォルト)の場合、Sphinx-Gallery はまず_repr_html_
のキャプチャを試みます。a
には_repr_html_
が存在しないため、次に__repr__
のキャプチャを試みます。a
には__repr__
メソッドが存在するため、この場合も2
はキャプチャされます。
Matplotlib に関する注記: 'capture_repr'
タプルに '__repr__'
および/または '__str__'
が含まれている場合、Matplotlib 関数の呼び出しを最後の式とするコードブロックは、一般的に生成されたドキュメントに図と共に黄色の出力ボックスを生成します。これは、Matplotlib 関数の呼び出しは通常、標準出力にプロットを作成/修正するだけでなく、何かを返すためです。たとえば、matplotlib.plot()
は、プロットされたデータを表す Line2D
オブジェクトのリストを返します。このリストには __repr__
と __str__
メソッドが存在するため、キャプチャされます。これを回避するには、
(最後の)プロット関数を一時変数に代入します。例:
import matplotlib.pyplot as plt _ = plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
(何も返さない)をコードブロックの最後に追加します。例:import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.show()
'capture_repr'
が空のタプルである場合、または __repr__
や __str__
を含まない場合、不要な文字列出力は発生しません。
特定のクラスのキャプチャを防止する#
各コードブロックの最後の式の表現をキャプチャしたいが、ただし、最後の式が特定の型である場合は除外したい場合は、'ignore_repr_types'
を使用できます。'ignore_repr_types'
はデフォルトでは空の raw 文字列(r''
)であり、どの型も無視されません。特定の型を除外するには、'ignore_repr_types'
を、除外する型の名前と一致する正規表現に設定できます。
たとえば、以下の設定では、最後の式のtype()
の名前が文字列 'matplotlib.text' または 'matplotlib.axes' を含む場合を除き、各コードブロックの最後の式の __repr__
がキャプチャされます。これにより、'matplotlib.text' のすべてのサブクラス(例:'matplotlib.text.Annotation'、'matplotlib.text.OffsetFrom' など)のキャプチャが防止されます。同様に、'matplotlib.axes' のサブクラス(例:'matplotlib.axes.Axes'、'matplotlib.axes.Axes.plot' など)もキャプチャされません。
sphinx_gallery_conf = {
...
'capture_repr': ('__repr__'),
'ignore_repr_types': r'matplotlib\.(text|axes)',
}
ギャラリーセクションのネスト#
nested_sections
を使用すると、ギャラリーの examples_dirs (別名サブギャラリー)内にサブセクション(サブフォルダ)があるgallery の場合に、ギャラリーの index.rst
ファイルがどのように生成されるかを制御できます。これは、サイドバーの外観を制御するのに役立ちます。デフォルトは nested_sections=True
に設定されています。これは、一般的な pydata-sphinx-theme テーマで一般的に機能するためです。ただし、他のテーマではサイドバーに望ましくない重複が発生する可能性があるため、ユーザーは自分のテーマに最適な nested_sections
設定を選択することをお勧めします。
デフォルトの nested_sections=True
を使用すると、Sphinx-Gallery は親ギャラリーと各サブセクションの GALLERY_HEADER.[ext]
(または下位互換性のために README.[ext]
)ファイルを使用して、親ギャラリーと各サブセクションのインデックスファイルを個別に作成します。サブセクションのインデックスファイルには、サブセクションのヘッダー(GALLERY_HEADER.[ext]
ファイルから)と、サブセクション内の各ギャラリー例へのリンクを含む toctree が含まれます。親ギャラリーのメイン index.rst
ファイルには、順に
親ギャラリーのヘッダーに続いてギャラリーのサムネイル、
親ギャラリー内の各ギャラリー例へのリンクを含む toctree、
すべてのサブセクションについて、サブセクションのヘッダーに続いてサブセクションのサムネイル、
ファイルの最後に、すべてのサブセクションのインデックスファイルへのリンクを含む 2 番目の toctree が含まれます。
生成されたファイル構造と toctree は親ギャラリーフォルダの構造を模倣しており、一部のテーマでネストされたセクションを含むサイドバーを生成するために必要になる場合があります。
他のテーマでは、2 つの toctree を使用すると、サイドバーに望ましくない重複が発生する可能性があります。この場合、親ギャラリーのすべての例を独自のサブフォルダに移動してみてください。これにより、親ギャラリー index.rst
に単一の toctree が生成されるか、nested_sections=False
を使用します。
nested_sections=False
を使用すると、Sphinx-Gallery はバージョン 0.10.2 より前の動作になります。具体的には、ギャラリー全体の単一のインデックスファイルが生成されます。このインデックスファイルには、親ギャラリーと各サブセクションのヘッダーが含まれ、各ヘッダーには、親ギャラリー/サブセクションのすべての例へのリンクを含む toctree が続きます。一部のテーマでは、これらの toctree を使用して生成されたサイドバーは、すべてのギャラリーアイテムをフラットな構造でリストし、サブギャラリーのネストされたフォルダ構造を反映しません。
ファイルの手動渡し#
デフォルトでは、Sphinx-Gallery は sphinx-build ディレクトリに書き込まれるすべてのファイルを作成します。これは、ギャラリーソースの *.py
から rst と画像を生成するか、ギャラリーソースの GALLERY_HEADER.rst
(または下位互換性のために README.[rst/txt]
)から index.rst
を作成することによって行われます。ただし、ギャラリーソースから sphinx-build にファイルを渡すことが望ましい場合があります。たとえば、ギャラリーが参照するが、それ自体では生成しない画像を渡したい場合があります。ギャラリーソースから sphinx-build に raw rst を渡すこともできます。これは、その素材がギャラリーのテーマに合致するが、rst として記述する方が簡単であるためです。これに対応するために、sphinx_gallery_conf
で copyfile_regex
を設定できます。次の例では、rst ファイルがコピーされます。
sphinx_gallery_conf = {
...
'copyfile_regex': r'.*\.rst',
}
rst ファイルをコピーする場合などは、それらがドキュメント内のどこかの sphinx toctree
に含まれていることを確認する責任があります。もちろん、GALLERY_HEADER.rst
に toctree
を追加することもできます。
index.rst
の手動渡し#
ギャラリーディレクトリまたはネストされたサブギャラリーディレクトリ内の GALLERY_HEADER.rst
から Sphinx-Gallery が自動的に index.rst
を作成することを回避できます。copyfile_regex
に index.rst
が含まれており、ギャラリーソース(つまり、examples_dirs ディレクトリ)に index.rst
がある場合、Sphinx-Gallery は代わりにそれを使い、そのギャラリーまたはそのサブギャラリーのインデックスファイルを作成しません。独自の index.rst
ファイルを渡す場合は、そのインデックス(またはSphinxドキュメントの他の場所)に独自のSphinx toctree
を追加して、そのディレクトリ内のギャラリーアイテムまたはその他のファイルを含める責任があります。また、そのギャラリーのサブギャラリーに必要な index.rst
ファイルを追加する責任もあります。
API 使用状況の表示#
使用されていないAPIエントリとそのAPIエントリが使用されている各例のドキュメントとグラフは、Sphinx出力ディレクトリのsg_api_usage.html
下に生成されます。例については、Sphinx-Gallery API使用状況ドキュメントとグラフを参照してください。大規模なプロジェクトでは、多くのモジュールが存在し、各モジュールごとにAPI使用状況のグラフが生成されるため、多くのリソースを使用する可能性があります。そのため、show_api_usage
はデフォルトで'unused'
に設定されています。使用されていないAPIエントリはすべて1つのグラフに表示されるため、大規模なプロジェクトでもスケーラビリティが向上します。show_api_usage
をTrue
に設定すると、使用されているAPIエントリが接続されている例をすべて表示するモジュールごとのグラフが作成されます。これは、特定のモジュールについて学習したい場合に、どの例を参照すべきかのマップを作成するのに役立つ場合があります。show_api_usage
をFalse
に設定すると、API使用状況に関するグラフやドキュメントは作成されません。なお、使用されていないAPIエントリと使用されているAPIエントリのグラフを作成するには、graphviz
が必要です。
APIエントリの無視#
デフォルトでは、api_usage_ignore='.*__.*__'
は、この正規表現に一致するファイルを無視して、例ギャラリー内のAPIエントリの使用状況の文書化とグラフ化を行います。この正規表現を変更して、考慮すべきではない任意の種類のファイルを無視することができます。デフォルトの正規表現は、例で使用されているかどうかを文書化する必要がない可能性のある__len__()
などの関数を無視します。