Подтвердить что ты не робот

Как заставить sphinx искать модули в virtualenv при построении html?

Я хочу создать html-документы с помощью virtualenv вместо собственной среды на моей машине.

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

4b9b3361

Ответ 1

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

Быстрый и грязный путь вокруг этого заключается в явном вызове sphinx-build Python script из интерпретатора. В 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, поэтому приветствуются любые предложения для более подходящего решения.

Ответ 2

Проблема правильно распознана 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

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

Ответ 3

У меня была та же проблема, но я не мог использовать принятое решение, потому что не использовал Makefile. Я вызывал sphinx-build из пользовательского файла сборки python. То, что я действительно хотел сделать, это вызвать sphinx-build с той же самой средой, с которой я вызывал мою сборку python script с. Поворот с путями был слишком сложным и подвержен ошибкам, поэтому я оказался с тем, что мне кажется элегантным решением, которое заключается в том, чтобы "вручную" загрузить точку входа консоли script и вызвать ее:

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