我今天在用Jupyter导出一个ipynb为PDF的时候,系统提示找不到pandoc:

我发现在我这个miniconda python环境中确实没有pandoc,于是我用下面的代码安装了pandoc:
conda install -c conda-forge pandoc
运行下面的代码检查pandoc是否安装成功:
which pandoc
输出:/root/miniconda3/envs/proj/bin/pandoc,那么pandoc安装成功了。我的环境的名称是proj,是在miniconda下创建的。
但是系统提示还是不行,于是我发现我没有选择用我这个proj的环境内核来打开文件,运行以下代码为proj环境创建内核:
python -m ipykernel install --user --name proj --display-name "Python (proj)"
这里name是标识名,必须和环境名一致,displayname是我们给这个内核的命名,可以随意设定。
然后如图所示,选择这个内核。

但是还是不行,于是我在ipynb文件里面执行了这个代码:
import sys
print(sys.executable)
输出结果是
/root/miniconda3/envs/proj/bin/python
说明我的程序是使用的proj内核
但是我继续执行这个代码的时候:
!which python
!which pandoc
就输出的是:
/usr/bin/python
说明shell命令还是在原来的环境执行
也就是说:
Notebook 的代码在用
proj内核,但 shell 命令(如!which pandoc、导出 PDF)是由非proj环境的 Jupyter 启动的,因此无法找到 pandoc。
因此回到终端,运行:
conda activate proj
jupyter notebook
重启Jupyter notebook。然后还是无法导出。
后来我发现好像如果要非得在这个图片的位置导出PDF的话,它用的是Ubuntu容器本身的环境,也就是说,和代码的内核完全无关。我需要在容器本身的环境装上pandoc和XeLaTeX。

于是我在终端运行:
conda deactivate
关闭miniconda环境,直到前面没有括号,直接是以root@...开头为止。这样就算回到了ubuntu容器。然后执行:
apt update
apt install -y pandoc
安装pandoc,然后导出PDF,还会显示:

也就是缺少xelatex,我们用图中后面那个网站的教程给的针对linux系统的代码继续执行:
apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic
来安装xelatex。
这样再导出就没有任何问题了。
Jupyter Notebook导出PDF问题解决
1840

被折叠的 条评论
为什么被折叠?



