5

plot-directiveを使用してmatplotlib のダイアグラムをオンザフライで生成および埋め込むpython-3プロジェクトがあり、プロジェクトのドキュメントを自動生成するためにReadTheDocsを使用しています。 プロット ディレクティブは確かに python-2では正常に動作しますが、現在 python-3 では失敗しています。

具体的には、RTD のログに表示されるエラーは次のとおりです。

ビルド標準エラー

html
-----

Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/wltp/envs/master/lib/python3.4/site-packages/sphinx/application.py", line 325, in setup_extension
    mod = __import__(extension, None, None, ['setup'])
ImportError: No module named 'matplotlib'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/wltp/envs/master/lib/python3.4/site-packages/sphinx/cmdline.py", line 253, in main
    warningiserror, tags, verbosity, parallel)
  File "/home/docs/checkouts/readthedocs.org/user_builds/wltp/envs/master/lib/python3.4/site-packages/sphinx/application.py", line 119, in __init__
    self.setup_extension(extension)
  File "/home/docs/checkouts/readthedocs.org/user_builds/wltp/envs/master/lib/python3.4/site-packages/sphinx/application.py", line 328, in setup_extension
    err)
sphinx.errors.ExtensionError: Could not import extension matplotlib.sphinxext.plot_directive (exception: No module named 'matplotlib')

Extension error:
Could not import extension matplotlib.sphinxext.plot_directive (exception: No module named 'matplotlib')

そして、犯人は、「freetype」C lib を mniss したためにコンパイルされていない matplotlib にたどることができます。

セットアップ出力

...

requirements
-----
...
BUILDING MATPLOTLIB
            matplotlib: yes [1.4.2]
                python: yes [3.4.0 (default, Apr 11 2014, 13:05:11)  [GCC
                        4.8.2]]
              platform: yes [linux]

REQUIRED DEPENDENCIES AND EXTENSIONS
                 numpy: yes [not found. pip may install it below.]
                   six: yes [six was not found.]
              dateutil: yes [dateutil was not found. It is required for date
                        axis support. pip/easy_install may attempt to
                        install it after matplotlib.]
                  pytz: yes [pytz was not found. pip will attempt to install
                        it after matplotlib.]
               tornado: yes [tornado was not found. It is required for the
                        WebAgg backend. pip/easy_install may attempt to
                        install it after matplotlib.]
             pyparsing: yes [pyparsing was not found. It is required for
                        mathtext support. pip/easy_install may attempt to
                        install it after matplotlib.]
                 pycxx: yes [Official versions of PyCXX are not compatible
                        with matplotlib on Python 3.x, since they lack
                        support for the buffer object.  Using local copy]
                libagg: yes [pkg-config information for 'libagg' could not
                        be found. Using local copy.]
              freetype: no  [The C/C++ header for freetype2 (ft2build.h)
                        could not be found.  You may need to install the
                        development package.]    
    OPTIONAL LATEX DEPENDENCIES
                dvipng: yes [version 1.14]
           ghostscript: yes [version 9.10]
                 latex: yes [version 3.1415926]
               pdftops: no

============================================================================
                        * The following required packages can not be built:
                        * freetype

doc-generation パスを作成するには、RTD FAQで指示されているように、ファイル内の次のコードを使用して、プロット ディレクティブをモックアウトして "無効にする" 必要があり./conf.pyます。

virtualenv(サイトパッケージの可視性の有無にかかわらず) rtd-specificのさまざまな組み合わせを試しましたがrequirements.txt、成功しませんでした。

誰かがそれを行う方法を見つけましたか?

これらは、問題をさらに掘り下げたい人のためのヒントです。

4

2 に答える 2

4

今日から、 rtfd issue #896に従って、この問題は正式に解決されました。必要なすべての依存関係 (matplotlib、scipy、および numpy) も python-3 にインストールされるため、モックはもう必要ありません。

それを利用するにはAdvanced settings、次の選択を行います。

  • 小切手:Install Project: Install your project inside a virtualenv using setup.py install
  • 選択する:Python interpreter: CPython 3.x
  • チェック: Use system packages: Give the virtual environment access to the global site-packages dir.

...少しトレーニングすれば、python-2/3互換のコードを簡単に記述できます。

于 2015-09-17T09:08:38.283 に答える