virtualenv - 使安装在 virtualenv 中的软件包对 sphinx 可见

标签 virtualenv python-sphinx autodoc

我正在使用 sphinx记录我的软件。我正在使用 virtualenv用于安装。现在有些包只安装在虚拟环境中,sphinx 看不到。

我的 conf.py 中有此代码:

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
p = os.path.abspath('..')
sys.path.insert(0, p)
if 'VIRTUAL_ENV' in os.environ:
    q = os.sep.join([os.environ['VIRTUAL_ENV'],
                     'lib', 'python2.7', 'site-packages'])
    sys.path.insert(0, q)
    p = p + ":" + q

os.environ['PYTHONPATH'] = p

然而,如果我 make html ,我收到这种警告:
/home/mario/Local/github/Bauble/bauble.classic/doc/api.rst:358: WARNING: autodoc: failed to import class u'TagItemGUI' from module u'bauble.plugins.tag'; the following exception was raised:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/sphinx/ext/autodoc.py", line 385, in import_object
    __import__(self.modname)
  File "/home/mario/Local/github/Bauble/bauble.classic/bauble/plugins/tag/__init__.py", line 30, in <module>
    from sqlalchemy import *
ImportError: No module named sqlalchemy

我的 $VIRTUAL_ENV/lib/python2.7/site-packages包含 SQLAlchemy-1.0.4-py2.7-linux-x86_64.egg .

肯定与问题有关 Sphinx autodoc dies on ImportError of third party package ,但我选择遵循的程序的描述在一个断开的链接中。

最佳答案

问题是包没有直接包含在 virtualenv 的 site-packages 中。 dir,您需要指定完整路径才能从那里导入包。我使用以下技巧:

if 'VIRTUAL_ENV' in os.environ:
    site_packages_glob = os.sep.join([
        os.environ['VIRTUAL_ENV'],
        'lib', 'python2.7', 'site-packages', 'projectname-*py2.7.egg'])
    site_packages = glob.glob(site_packages_glob)[-1]
    sys.path.insert(0, site_packages)

在哪里 projectname是我要导入的 python 模块的名称。

请注意,这很容易出错,尤其是当您有多个版本时
模块,但到目前为止它对我有用。

关于virtualenv - 使安装在 virtualenv 中的软件包对 sphinx 可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31654428/

相关文章:

python - 在 sphinx 文档中生成目录的自动模块

python - 如何添加目录树条目?

python - 通过 Chef Recipe 激活 virtualenv 并安装 python 库

python - 无法在虚拟环境中安装nltk?

python-sphinx - 在 reStructuredText 中跳过标题级别

ios - 如何使用 Apple Header doc 为 iOS 开发自动生成文档?

python - 如何使用带 Sphinx 的自动模块删除静态类变量?

python - Sphinx Autodoc 删除空的子模块和包

python-3.x - 如何让 virtualenv 运行 Python 3 而不是 Python 2.7?

python - Virtualenv创建了一个文件夹,但结果不是我想要的