Как заставить sphinx искать модули в virtualenv при создании html? - PullRequest
38 голосов
/ 08 ноября 2010

Я хочу создавать HTML-документы, используя virtualenv вместо собственной среды на моей машине.

Я ввел virtualenv, но когда я запускаю make html, я получаю сообщения об ошибках, которые не могут быть импортированы, - я знаю , ошибки связаны с тем, что модуль недоступен в моемродная среда.Как указать, какую среду следует использовать при поиске документов (например, virtualenv)?

Ответы [ 3 ]

52 голосов
/ 08 июля 2012

Mathijs правильно обнаружил проблему.

$ which sphinx-build
/usr/local/bin/sphinx-build

Я решил эту проблему, установив sphinx в виртуальной среде.

При активированной среде:

$ source /home/migonzalvar/envs/myenvironment/bin/activate
$ pip install sphinx
$ which sphinx-build
/home/migonzalvar/envs/myenvironment/bin/sphinx-build

Кажется, достаточно аккуратно.

46 голосов
/ 22 ноября 2010

Проблема здесь в том, что make html использует команду sphinx-build как обычную команду оболочки, которая явно указывает, какой интерпретатор Python использовать в первой строке файла (т. Е. #!/usr/bin/python).Если Python вызывается таким образом, он не будет использовать вашу виртуальную среду.

Быстрый и грязный способ обойти это путем явного вызова скрипта sphinx-build Python из интерпретатора.В Makefile это может быть достигнуто путем изменения SPHINXBUILD на следующее:

SPHINXBUILD   = python <absolute_path_to_sphinx-build-file>/sphinx-build

Если вы не хотите изменять Makefile, вы также можете передать этот параметр из командной строки,следующим образом:

make html SPHINXBUILD='python <path_to_sphinx>/sphinx-build'

Теперь, если вы выполните make build из вашей среды VirtualEnv, он должен использовать интерпретатор Python из вашей среды, и вы увидите, что Sphinx найдет все нужные ему вкусности.

Мне хорошо известно, что это не изящное решение, так как Makefile, подобный этому, не должен предполагать какое-либо конкретное местоположение для файла sphinx-build, поэтому любые предложения по более подходящему решению горячо приветствуются.

0 голосов
/ 20 августа 2013

У меня была та же проблема, но я не мог использовать принятое решение, потому что я не использовал Makefile. Я звонил sphinx-build из пользовательского файла сборки Python. Что я действительно хотел сделать, так это вызвать sphinx-build с той же самой средой, с которой я вызывал свой скрипт сборки Python. Работа с путями была слишком сложной и подверженной ошибкам, поэтому я получил то, что мне кажется элегантным решением, которое заключается в том, чтобы «вручную» загрузить точку входа консольного скрипта и вызвать ее:

from pkg_resources import load_entry_point
cmd = load_entry_point('Sphinx', 'console_scripts', 'sphinx-build')
cmd(['sphinx-build', basepath, destpath])
...