由于内存消耗,要求 PsychoPy 无法构建 readthedocs

Requiring PsychoPy fails readthedocs build due to memory consumption

我有一个项目 (https://github.com/jfkominsky/PyHab) which is essentially an extension of PsychoPy (http://psychopy.org/)。我想使用 Sphinx 和 ReadTheDocs 来编写代码文档。我将 Sphinx 的自动类功能用于我的文档,并将大部分功能包含在代码本身中,这在本地构建时效果很好。在 ReadTheDocs 上,这意味着我需要添加一个以 psychopy 作为需求的需求文件。这会导致构建以下列方式失败:

/home/docs/checkouts/readthedocs.org/user_builds/pyhab/envs/latest/bin/pip install --exists-action=w --cache-dir /home/docs/checkouts/readthedocs.org/user_builds/pyhab/.cache/pip -rdocs/requirements.txt
Command killed due to excessive memory consumption

我在这方面很业余。有没有办法使用 setup.py 虚拟环境让 psychopy 发挥作用? readthedocs 是不是对内存太吝啬了?我注意到 psychopy 本身在 RTD 构建方面存在一些问题,不确定是否相关...

编辑:我应该补充一点,我在 RTD 中使用 Cpython2 作为我的环境。当我改用 CPython3 时,我遇到了不同的失败:

我再次尝试使用 Py3,但出现了不同的错误:

ERROR: failed building wxWidgets Traceback (most recent call last): File "build.py", line 1321, in cmd_build_wx wxbuild.main(wxDir(), build_options) File "/tmp/pip-build-7a1lqn7v/wxPython/buildtools/build_wxwidgets.py", line 374, in main "Error running configure") File "/tmp/pip-build-7a1lqn7v/wxPython/buildtools/build_wxwidgets.py", line 85, in exitIfError raise builder.BuildError(msg) buildtools.builder.BuildError: Error running configure Finished command: build_wx (0m10.842s) Finished command: build (0m10.842s) Command '"/home/docs/checkouts/readthedocs.org/user_builds/pyhab/envs/latest/bin/python" -u build.py build' failed with exit code 1.

我已经设计了一个解决方案,至少 CPython2.x。它的长短,RTD 需要更好地宣传的是,您可以将一堆 'mocks' 插入 conf.py 以绕过您在编译时不想实际导入的模块文档。您需要在 2.7 中的需求文件中模拟(大概 3.x 中的 unittest.mock)

这个想法来自这里:http://blog.rtwilson.com/how-to-make-your-sphinx-documentation-compile-with-readthedocs-when-youre-using-numpy-and-scipy/

在常见问题解答中与此相关联:http://read-the-docs.readthedocs.io/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules

我意识到你可以为任何东西创建模拟模块,如果你使用 MagicMock,你可以根据需要向它们添加属性。我花了好几次尝试才得到所有正确的模拟模块(主要是因为 RTD 环境很难在本地模拟,它只会在错误消息中显示它导入失败的第一个模块),但最终,我能够说服RTD 它拥有所需的一切而不会超出其内存限制。

这个解决方案不是特定于心理的。这适用于您在 RTD 上安装 pip 时遇到的任何问题。