53

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

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

4

3 回答 3

64

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

它看起来足够整洁。

于 2012-07-08T10:58:59.170 回答
58

这里的问题是make html将该sphinx-build命令用作普通的 shell 命令,它明确指定在文件的第一行(即 . #!/usr/bin/python)中使用哪个 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文件的任何特定位置,所以任何关于更合适解决方案的建议都受到热烈欢迎。

于 2010-11-22T20:06:39.833 回答
0

我有同样的问题,但我无法使用公认的解决方案,因为我没有使用 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])
于 2013-08-19T21:41:43.230 回答