如何在构建html时让sphinx在virtualenv中寻找模块?

时间:2010-11-08 07:42:24

标签: virtualenv python-sphinx

我想使用virtualenv而不是我的机器上的本机环境来构建html文档。

我已经进入了virtualenv但是当我运行make html时,我收到错误,说无法导入模块 - 我知道错误是由于我的模块不可用原生环境。 如何在搜索文档时指定应该使用哪个环境(例如virtualenv)?

3 个答案:

答案 0 :(得分:52)

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

看起来很整洁。

答案 1 :(得分:46)

这里的问题是make html使用sphinx-build命令作为普通shell命令,它明确指定在文件的第一行使用哪个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'

现在,如果您从VirtualEnv环境中执行make build,它应该在您的环境中使用Python解释器,您应该看到Sphinx找到它需要的所有好东西。

我很清楚这不是一个简洁的解决方案,因为Makefile这样的sphinx-build不应该假设{{1}}文件的任何特定位置,因此欢迎任何有关更合适解决方案的建议

答案 2 :(得分:0)

我遇到了同样的问题,但我无法使用已接受的解决方案,因为我没有使用Makefile。我在自定义python构建文件中调用sphinx-build。我真正想做的是用与我调用python构建脚本完全相同的环境调用sphinx-build。摆弄路径太复杂且容易出错,所以我最终得到了一个优雅的解决方案,即“手动”加载控制台脚本入口点并调用它:

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