我有一個專案,包括一個 Python 包以及一些 Matlab 代碼,它們都應該放入由 Sphinx 創建的相同檔案中。檔案的 Python 部分已經完美地作業了很長時間 - 現在添加了 Matlab 部分并造成了一些麻煩。
資料結構或多或少如下:
|- python
|- modules
|- including subpackages
|- some sub-modules
|- matlab
|- scripts
|- functions
|- docs
|- source
|- conf.py
|- matlab.rst
|- python.rst
|- index.rst
|- ...
最相關的行conf.py是概率。下列:
import os
import sys
# for the Python autodoc package
sys.path.insert(0, os.path.abspath('../..'))
extensions = ['sphinx.ext.napoleon', 'sphinxcontrib.matlab', 'sphinx.ext.autodoc']
# Path to the Matlab files
matlab_src_dir = '../../matlab'
#matlab_src_dir = '<<abssolute_path>>/matlab'
如您所見,我嘗試了matlab_src_dir. 到目前為止,沒有任何區別。
由python.rst自動創建的apidoc包含:
python package
==============
.. automodule:: python
:members:
:undoc-members:
:show-inheritance:
Subpackages
-----------
.. toctree::
:maxdepth: 4
python.subpackages
matlab.rst是手動創建的,包含:
matlab package
==============
.. mat:automodule:: matlab
:members:
:undoc-members:
:show-inheritance:
Subscripts
----------
.. toctree::
:maxdepth: 4
matlab.function_file
因此,根據檔案python.rst,與Matlabmatlab.rst或多或少相同。mat:automodule
最后,index.rst包含:
.. toctree::
:maxdepth: 2
python
.. toctree::
:maxdepth: 2
matlab
現在,當我運行 Sphinx' 時,make html我收到以下錯誤,這導致了一個很好的 Python 檔案,但一個空的 Matlab 檔案:
WARNING: [sphinxcontrib-matlabdomain]: failed to import module 'matlab'; the following exception was raised:
Traceback (most recent call last):
File "C:\Users\<<username>>\AppData\Roaming\Python\Python39\site-packages\sphinxcontrib\mat_documenters.py", line 117, in import_object
obj = self.module = modules[self.modname]
KeyError: 'matlab'
我在這里想念什么。為什么 Sphinx 找不到包含 m 檔案的 matlab 檔案夾?
如果應該解決這個問題,也許是次要問題:是否有與apidocMatlab 檔案類似的功能,這樣我就不需要自己創建所有 *.rst 檔案?
感謝您的任何提示!
順便說一句:我在 Python 3.9.7 下的 Sphinx v4.4.0 上運行。
uj5u.com熱心網友回復:
既不提供硬編碼的絕對路徑,matlab_src_dir也不提供os.path.abspath(relative_path)成功的線索。
感謝 Steve Piercy,他在評論中提到了一個例子,我發現我應該使用os.path.dirname(os.path.abspath(relative_path)). 因此,錯誤消失了,Sphinx 正在作業。這很有趣,因為我之前已經嘗試os.path.abspath(relative_path to the parent of the package)過,我希望它與os.path.dirname(). 無論如何,我現在有了一個可行的解決方案。
如果有人對第二個問題有想法(“Matlab 檔案是否有與 apidoc 類似的功能,這樣我就不需要自己創建所有 *.rst 檔案?”)我會非常高興。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432376.html
