由于缺少 pandoc,构建文档失败



问题

在 readthedocs.io Web 界面上单击"构建"时,我无法成功构建我的文档,但它在我的本地计算机上构建得很好。为了测试这是一个环境问题,我创建了一个虚拟环境:

conda create virtualenv -n venv
conda env export -n venv
source activate venv

然后我安装了我的要求.txt文件为:

pip install -r requirements.txt

然后跑了

make clean html

在虚拟环境和在线构建文档中,我收到错误:

Notebook error:
PandocMissing in ex_degassing.ipynb:
Pandoc wasn't found.
Please check that pandoc is installed:
http://pandoc.org/installing.html
make: *** [html] Error 2

我已经搜索并搜索了一个解决方案,但我最好的猜测是 pandoc 不是通过 pip 安装的,即使它在 requirements.txt 文件中。我还尝试通过在我的要求文件中用git+git://github.com/jgm/pandoc#egg=pandoc替换pandoc来告诉它从源代码构建.txt但这不起作用(请参阅下面的文件外观)。我可以轻松地在本地计算机上安装 pandoc,但它无法通过我的虚拟环境或 readthedocs 中的 requirements.txt 文件进行安装。

我的一些文件

这是我的要求.txt文件:

sphinx>=1.4
sphinx_rtd_theme
ipykernel
nbsphinx
pandas
pandoc
numpy
matplotlib
ipynb
scipy

我通读了所有的 readthedocs 文档,具有讽刺意味的是,发现构建文档对于我编码能力有限的人来说严重不足。我尝试制作readthedocs.yml和environment.yaml文件,但我不知道它们是否在做任何事情,或者它们是否正确编写。为了完整起见,以下是这些文件:

阅读文档.yml

# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/conf.py
python:
version: 3.7
install:
- requirements: docs/requirements.txt

环境.yaml

channels:
- conda-forge
dependencies:
- python =3.7
- pandoc

总结

我已经用readthedocs和狮身人面像创建了漂亮的文档,但我无法让它在网络上构建。我该如何:a)解决安装pandoc的问题(这是问题所在吗??)或b)消除对pandoc的需求(例如,有没有办法在我的文档中包含jupyter笔记本文件而不需要pandoc?怎么做?

非常感谢任何人的建议!

目前在pandocs 的 PyPI 页面上还没有很好的解释,但 pandoc 实际上是用 Haskell 编写的,而不是 Python。你可以用pip install pandoc安装的 python pandoc 包没有附带 pandoc 的可执行副本,它只是一个包装器,用于在 python 中提供与 pandoc 的绑定。它通过对 pandoc 的系统副本进行 shell 调用来实现这一点,因此您需要将实际的 pandoc 可执行文件的副本单独安装到您的系统中,以便 python 绑定具有要绑定的内容!

例如,在 Debian/Ubuntu 上,除了使用pip安装 python 绑定外,您还需要使用apt安装 pandoc 的系统副本。

sudo apt install pandoc
pip install pandoc

虽然您可以在本地系统上执行此操作,但这不是让它在 readthedocs 上运行的可行解决方案。


与此相反,conda 尝试使软件包工作,而不管系统其余部分安装的内容如何。因此,conda pandoc软件包附带了一个实际的pandoc副本,它使用它而不是尝试使用pandoc的系统副本。如果你使用的是 conda,你只需要运行一个命令就可以让 pandoc 在 python 中工作:

conda install pandoc

如果您将 conda 环境用于您的 readthedocs 规范(就像 OP 的情况一样),您只需将 pandoc 添加到 conda 部分而不是 env 的 pip 部分。


你可以用 pip 安装的 PyPI 上的 pandoc 包实际上并不是 python 的官方 pandoc 包。还有pypandoc和py-pandoc,它们同样是非官方的。

据说py-pandoc是通过python接口安装pandoc的一站式商店。我认为您只需要执行pip install py-pandocconda install pandoc,它就可以立即工作,尽管由于缺乏文档,我不确定。

就我自己而言,我正在使用狮身人面像来构建文档。对于在构建 python 文档(包括在 readthedocs 上)时安装 pandoc 的问题,我个人的解决方案是将以下代码块添加到conf.py中。

from inspect import getsourcefile
# Get path to directory containing this file, conf.py.
DOCS_DIRECTORY = os.path.dirname(os.path.abspath(getsourcefile(lambda: 0)))
def ensure_pandoc_installed(_):
import pypandoc
# Download pandoc if necessary. If pandoc is already installed and on
# the PATH, the installed version will be used. Otherwise, we will
# download a copy of pandoc into docs/bin/ and add that to our PATH.
pandoc_dir = os.path.join(DOCS_DIRECTORY, "bin")
# Add dir containing pandoc binary to the PATH environment variable
if pandoc_dir not in os.environ["PATH"].split(os.pathsep):
os.environ["PATH"] += os.pathsep + pandoc_dir
pypandoc.ensure_pandoc_installed(
quiet=True,
targetfolder=pandoc_dir,
delete_installer=True,
)

def setup(app):
app.connect("builder-inited", ensure_pandoc_installed)

pypandoc出现在要求.txt文件中

这告诉 Sphinx 检查 pandoc 是否已经在系统路径上,如果它不可用,那么它将下载并安装一个副本到存储库的 docs/bin/pandoc 目录并将其添加到 PATH 中。

这种方法的优点是它应该是通用的,使任何下游用户都可以构建文档。虽然对于您的 readthedocs 构建,您可以控制 pandoc 是与 conda 一起安装的,但你不能保证每个想要构建文档的用户都以这种方式安装了 pandoc python 包,也不能保证他们的系统上安装了 Haskell pandoc 包。

我遇到了同样的问题。

Notebook error:
PandocMissing in getting_started.ipynb:
Pandoc wasn't found.
Please check that pandoc is installed:
https://pandoc.org/installing.html

无论是通过pip安装pandoc还是使用conda,似乎都有区别。

请尝试以下操作:

pip uninstall pandoc
conda install pandoc

使用conda版本解决了我机器上的问题。

另一方面,如果您使用的是poetry,您可能还会遇到相同的错误消息,即PandocMissing.

Windows:
InstallPandoc通过其 Windows 安装程序:https://pandoc.org/installing.html。

Linux(与Ubuntu 2204一起测试):
sudo apt install pandoc

first

pip uninstall pandoc

下一个

conda install pandoc

只需在 Anaconda 提示符下执行此操作(如有必要,重新启动内核),然后完成!

这可以由非Conda,pip粉丝完成。

我终于碰壁了,让Miniconda在Windows PC上管理我的python3.1软件包方面发挥了很小的作用。我无法让Jupyter-book将降价文件转换为mySt降价文件。 问题出在潘多克身上。

但我将始终决心继续使用 pip 自己控制我的 python 包。 我不会把控制权交给 Anaconda,我将继续自己控制 python 的包。

有了这么长的限定词,我将解释我做了什么。

我使用 pip 卸载了 pandocs:

pip uninstall pandocs

然后我安装了miniConda:https://docs.conda.io/en/latest/miniconda.html 我的python版本有一个Windows安装程序,python3.10。 它下载到Windows下载文件夹中。

几年前,我与Anaconda争夺对我的蟒蛇的控制权,并且不允许MiniConda进行任何类似的控制。在安装Miniconda的过程中,我取消了两个默认复选框,这些复选框将使Miniconda控制vsCode等... 并且也没有接受默认的安装目的地,而是将Miniconda安装到新文件夹中:

C:miniConda 

然后需要通过添加新的系统变量来添加指向 Miniconda 的路径。 这是通过编辑系统属性 - 环境变量来完成的。

C:MiniCondaScriptsconda.exe

关闭 cmd 提示符,然后再次打开。 在保存 .md 文件的文件夹中,打开 cmd 提示符。 小尺寸的 cmd 提示符优先于大的终端窗口。运行 conda 并安装 pandocs。

conda install pandoc

最后,将 .md 转换为 myst。

jupyter-book myst init myBook.md --kernel ir

它有效。 Miniconda受到控制,pandoc软件包正常工作。这个过程创建了一个mySt markdown文件。

对于那些不仔细阅读说明的人来说,他们会错过我正在使用 r 内核而不是 python 内核的提及。

好吧,我让它在我的系统上工作:

  • 从 https://pandoc.org/installing.html 下载并安装 Pandoc
  • 启动新会话(CMD 或电源外壳)
  • 再次呼叫狮身人面像

就这么简单。希望你能让它工作!

最新更新