我想使用virtualenv而不是我的机器上的本机环境来构建html文档。
我已经进入了virtualenv但是当我运行make html
时,我收到错误,说无法导入模块 - 我知道错误是由于我的模块不可用原生环境。
如何在搜索文档时指定应该使用哪个环境(例如virtualenv)?
答案 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])