2016-09-28 4 views
3

Я пытаюсь задокументировать свои классы MATLAB, используя sphinx. Но всякий раз, когда я хочу запустить make html я получаю следующее сообщение об ошибке:Ошибка документации Sphinx matlab: отсутствует модуль 'std'

% 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:

yaourt -S python-sphinx # (was already installed by default, just to show that the package came from arch repo) 
sudo pip install -U sphinxcontrib-matlabdomain 

Попробуйте 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 

PS: мой по умолчанию питон имеет версию 3.5.2

Edit 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 
+1

Работает ли ваш 'sphinx-build' с Python 3.5? Что дает 'head $ (который sphinx-build)' дает вам? Кроме того, что дает 'sphinx-build'? –

+0

@MartinUeding спасибо за ваш комментарий. Я обновил сообщение с некоторой информацией. Я предполагаю, что он работает с Python 3.5. Есть ли способ узнать это наверняка? – bonanza

+1

Вы можете добавить оператор 'print()' с версией Python в 'conf.py'. Но я подозреваю, что ваш плагин предназначен для Python 2 (например, плагин 'feed' в том же репозитории) и что новые правила импорта Python 3 позволяют сбой импорта. Поэтому попробуйте установить Sphinx с 'python2', возможно, у вас есть' pip2' в Arch Linux. Тогда ваше расширение может работать. –

ответ

1

расширений в sphinx- contrib, похоже, предназначены для Python 2. Правила импорта изменены в Python 3, поэтому такие ошибки могут возникать, когда код Python 3 запускается с помощью интерпретатора Python 2.

Решение должно установить Sphinx и все его зависимости для Python 2. В вашем дистрибутиве может быть python2-sphinx. В Fedora и Ubuntu пакеты python-* всегда Python 2 или оба, python3-* - это пакет Python 3.

On Arch Linux Я знаю, что python символически связан с python3. Таким образом, могут быть дополнительные пакеты python2-*. Установите pip2 (потому что pip, вероятно, будет pip3 на Arch Linux) и использовать его для установки Sphinx.

Вы можете узнать, какой интерпретатор вызывается, запустив head -n 1 $(which sphinx-build), а затем проверьте путь.

  • /usr/bin/python: Это Python 2 на Ubuntu или Fedora, Python 3 на Arch Linux
  • /usr/bin/python3: Определенно Python 3
  • /usr/bin/python2: Определенно Python 2
  • /usr/bin/env python: Подобно другим.

В противном случае можно было бы сделать print в версии Python внутри conf.py таким образом, что она печатается в явном виде.

1

Последняя версия (> = 0.2.11) sphinxcontrib-matlabdomain поддерживает оба Python 2 и 3. Я думаю, что это должно решить проблему, которую вы видели.

Смежные вопросы