Sphinx matlab文档错误:缺少模块“std”

2024-04-20 02:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用sphinx来记录我的MATLAB类。但是每当我想运行make html时,我会遇到以下错误:

% make html
sphinx-build -b html -d _build/doctrees   . _build/html
Running Sphinx v1.4.6

Extension error:
Could not import extension sphinxcontrib.matlab (exception: No module named 'std')
make: *** [Makefile:53: html] Error 1

我在ArchLinux上,尝试了以下安装方法,但结果都是相同的问题:

尝试1:

^{pr2}$

尝试2:

yaourt -R python-sphinx # (I also removed all dependencies)
sudo pip -U install sphinx
sudo pip -U install -U sphinxcontrib-matlabdomain

在这两种情况下都不起作用(总是上面的错误)。在每次尝试中,我还通过验证std模块是否存在

# ll /usr/lib/python3.5/site-packages/sphinxcontrib*
-rw-r--r-- 1 root root 326 Sep 28 11:02 /usr/lib/python3.5/site-packages/sphinxcontrib_blockdiag-1.5.5-py2.7-nspkg.pth
-rw-r--r-- 1 root root 326 Sep 28 11:00 /usr/lib/python3.5/site-packages/sphinxcontrib_matlabdomain-0.2.7-py3.5-nspkg.pth

/usr/lib/python3.5/site-packages/sphinxcontrib:
total 152
-rw-r--r-- 1 root root 11457 Sep 28 11:02 blockdiag.py
-rw-r--r-- 1 root root 37815 Jun 20  2015 mat_documenters.py
-rw-r--r-- 1 root root 27529 Oct  7  2014 matlab.py
-rw-r--r-- 1 root root 46088 Jun 20  2015 mat_types.py
drwxr-xr-x 1 root root   126 Sep 28 11:03 __pycache__
-rw-r--r-- 1 root root 22278 Feb  7  2014 std.py

/usr/lib/python3.5/site-packages/sphinxcontrib_blockdiag-1.5.5.dist-info:
total 32
-rw-r--r-- 1 root root 1033 Sep 28 11:02 DESCRIPTION.rst
-rw-r--r-- 1 root root    4 Sep 28 11:03 INSTALLER
-rw-r--r-- 1 root root 2127 Sep 28 11:02 METADATA
-rw-r--r-- 1 root root 1193 Sep 28 11:02 metadata.json
-rw-r--r-- 1 root root   14 Sep 28 11:02 namespace_packages.txt
-rw-r--r-- 1 root root 1054 Sep 28 11:03 RECORD
-rw-r--r-- 1 root root   14 Sep 28 11:02 top_level.txt
-rw-r--r-- 1 root root  110 Sep 28 11:02 WHEEL

/usr/lib/python3.5/site-packages/sphinxcontrib_matlabdomain-0.2.7-py3.5.egg-info:
total 40
-rw-r--r-- 1 root root    1 Sep 28 11:00 dependency_links.txt
-rw-r--r-- 1 root root  487 Sep 28 11:00 installed-files.txt
-rw-r--r-- 1 root root   14 Sep 28 11:00 namespace_packages.txt
-rw-r--r-- 1 root root    1 Jun 20  2015 not-zip-safe
-rw-r--r-- 1 root root 8547 Sep 28 11:00 PKG-INFO
-rw-r--r-- 1 root root   28 Sep 28 11:00 requires.txt
-rw-r--r-- 1 root root  549 Sep 28 11:00 SOURCES.txt
-rw-r--r-- 1 root root   14 Sep 28 11:00 top_level.txt

注:我的默认python版本是3.5.2

编辑1:

% head $(which sphinx-build)
#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from sphinx import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
% which sphinx-build
/usr/bin/sphinx-build
% sphinx-build --version
Sphinx (sphinx-build) 1.4.6
% python --version
Python 3.5.2
% /usr/bin/python --version
Python 3.5.2

Tags: pyimportbuildtxtmakelibpackagesusr
2条回答

sphinxcontrib-matlabdomain的最新版本(gt;=0.2.11)同时支持Python2和3。我认为这应该能解决你看到的问题。在

sphinx contrib存储库中的扩展似乎是针对python2的。Python3中的导入规则已经更改,因此在使用Python2解释器运行Python3代码时可能会发生此类错误。在

解决方案是为python2安装Sphinx及其所有依赖项。您的发行版可能有python2-sphinx。在Fedora和Ubuntu上,python-*总是python2或者两者都是,python3-*是python3包。在

在archlinux上,我知道python与{}符号链接。所以可能会有额外的python2-*包。安装pip2(因为在ArchLinux上,pip很可能是{}),并使用它来安装Sphinx。在

您可以通过运行head -n 1 $(which sphinx-build)找出调用哪个解释器,然后检查路径。在

  • /usr/bin/python:在Ubuntu或Fedora上是Python2,在ArchLinux上是Python3
  • ^{Python}
  • /usr/bin/python2:肯定是python2
  • /usr/bin/env python:与其他类似。在

否则,可以在conf.py中对Python版本执行print,这样它就显式地打印出来了。在

相关问题 更多 >