当尝试运行在 Docker 容器中通过 nbconvert 运行 export_png 的 Jupyter 笔记本时,出现以下错误。
Neither firefox and geckodriver nor a variant of chromium browser and chromedriver are available on system PATH. You can install the former with 'conda install -c conda-forge firefox geckodriver'.
我有一个配置了类似依赖项的 Linux 虚拟机,一切正常。 我发现如果路径指向脚本,则查找 Firefox 时会出现错误,但我的却没有,如下面输出的最后几行所示。 我开始认为产生的运行时错误是一个转移注意力的事情,它实际上抛出了一个不同的错误,但硬编码到该消息。
在 docker 镜像中运行 bokeh export_png 是否存在任何已知问题? 有什么必要的配置吗? 有人使用 firefox、geckodriver、selenium 和 bokeh 版本成功做到这一点吗?可以分享一下吗? 安装 chromium 并不容易,因为这一切都在公司 conda 镜像后面,没有这些软件包。
/opt/conda/lib/python3.7/site-packages/bokeh/io/webdriver.py in get(self)
116 if not self.reuse or self.current is None:
117 self.reset()
--> 118 self.current = self.create()
119 return self.current
120
/opt/conda/lib/python3.7/site-packages/bokeh/io/webdriver.py in create(self, kind)
120
121 def create(self, kind: Optional[DriverKind] = None) -> WebDriver:
--> 122 driver = self._create(kind)
123 self._drivers.add(driver)
124 return driver
/opt/conda/lib/python3.7/site-packages/bokeh/io/webdriver.py in _create(self, kind)
138 return driver
139
--> 140 raise RuntimeError("Neither firefox and geckodriver nor a variant of chromium browser and " \
141 "chromedriver are available on system PATH. You can install the former " \
142 "with 'conda install -c conda-forge firefox geckodriver'.")
RuntimeError: Neither firefox and geckodriver nor a variant of chromium browser and chromedriver are available on system PATH. You can install the former with 'conda install -c conda-forge firefox geckodriver'.
RuntimeError: Neither firefox and geckodriver nor a variant of chromium browser and chromedriver are available on system PATH. You can install the former with 'conda install -c conda-forge firefox geckodriver'.
[g_de_auto@0ff0d47b4a0f data_science_foundation]$ which firefox
/opt/conda/bin/FirefoxApp/firefox
[g_de_auto@0ff0d47b4a0f data_science_foundation]$ which geckodriver
/opt/conda/bin/geckodriver
[g_de_auto@0ff0d47b4a0f data_science_foundation]$ cat /opt/conda/bin/FirefoxApp/firefox
ELF>@@1@8
@@@@@@h@@@@@@ @ @-=@=@-=@=@0@@DDPtd` ` @` @<<QtdRtd-=@=@PP/lib64/ld-linux-x86-64.so.2GNU GNUB
m5Jzq
ms- libpthread.so.0__errno_locationlibdl.so.2__gmon_start__libstdc++.so.6libm.so.6libgcc_s.so.1libc.so.6execv__stack_chk_fail_]`@@D]fD`@@UH`@@HHHH?HHtHt @@(@@0@@8@@@@@H@H/Ht5/%/@%/h%/h%/h%/h%/h%/h%/h%R/f1I^HHPTI@Hp@H@fDU`@@H=`@@HtHt
17dH%(H;tf.DAWAAVIAUIATL%(+UH-(+SL)1H]HtLLDAHH9u[]A\A]A^A_ff./proc/self/exeCouldn't find the application directory.
-binExec failed with error: %s
更新 我从 _try_create_firefox_webdriver 函数中得到的基本错误是 SessionNotCreatedException('无法找到匹配的功能集')
选择使用Xvfb。 研究过 Kaleido,但我没有看到与 Bokeh 的轻松集成。 步骤是:
安装以下依赖项。
yum install gtk3-devel xorg-x11-server-Xvfb.x86_64 selenium geckodriver=0.26.0 firefox=74.0
告诉 Firefox 使用什么显示器(虚拟显示器)。
export DISPLAY=:0
按照我的命令启动 Xvfb。
Xvfb :0 -screen 0 1920x1080x24 & script_that_turns_charts_to_images
我也有同样的问题。花了一段时间才找到,但解决方案是在 docker 容器中添加一个 env 变量。
ENV BOKEH_IN_DOCKER=1
我必须进入 bokeh.io.webdriver 代码才能找到该 env 变量作为选项