python - 如何在不初始化 GPU 的情况下使我的包可导入

标签 python python-sphinx python-import pycuda

我正在编写一个使用 PyCUDA 库进行 GPU 计算的 Python 包。 PyCUDA 需要先初始化 GPU 设备(通常通过导入 pycuda.autoinit ),然后才能导入其任何子模块。

在我自己的模块中,我从 PyCUDA 导入我需要的任何子模块和函数,这意味着如果不首先初始化 PyCUDA,我自己的模块就无法导入。这基本上没什么问题,因为如果没有 GPU,我的包就没有任何用处。但是,现在我想编写文档,Sphinx Autodoc 需要导入我的包来读取文档字符串。如果我将 import pycuda.autoinit 放入 docs/conf.py 中,效果很好,但我希望文档可以在没有 NVIDIA 的计算机上构建GPU,例如我自己的笔记本电脑或 readthedocs.org。

推迟导入我的依赖项的最优雅的方法是什么,以便我可以在未安装所有依赖项的计算机上导入我自己的子模块?

最佳答案

autodoc机制要求所有要记录的模块都是可导入的。当此要求成为问题时,模拟(用 mock objects 替换系统的某些部分)可以是一个解决方案。

这里有一篇文章解释了在使用 Sphinx 时如何使用模拟对象:http://blog.rtwilson.com/how-to-make-your-sphinx-documentation-compile-with-readthedocs-when-youre-using-numpy-and-scipy/ .

本文的要点是,如果您将如下内容添加到 conf.py 中,它应该可以工作:

import mock   # See http://www.voidspace.org.uk/python/mock/

MOCK_MODULES = ['module1', 'module2', ...]
for mod_name in MOCK_MODULES:
    sys.modules[mod_name] = mock.Mock()

关于python - 如何在不初始化 GPU 的情况下使我的包可导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207039/

相关文章:

python - MNIST:试图获得高精度

html - sphinx-rtd-theme 中自定义页脚的问题

Python 列出从模块导入的所有子模块

python - 在一个 python 文件上运行 Sphinx 的最简单方法

python-sphinx - 单独的sphinx构建目录和源目录用于版本控制

python - PyCharm 中的子包和相关导入

python - 导入模块时如何防止内联代码运行?

python - 使用一些偏移量从服务器读取文件

python - Python程序验证

python - PyCharm 运行配置的作用是什么,它与直接运行有何不同?