1

我正在使用 blob trigger python azure function app 从 pdf 中提取数据,并且在使用 tabula py 时出现以下错误。我能够毫无问题地在本地运行它,但是,当我部署该功能时,我收到以下错误:

Result: Failure
Exception: JavaNotFoundError: `java` command is not found from this Python process.Please ensure Java is installed and PATH is set for `java`
Stack:   File "/azure-functions-host/workers/python/3.6/LINUX/X64/azure_functions_worker/dispatcher.py", line 315, in _handle__invocation_request
    self.__run_sync_func, invocation_id, fi.func, args)
  File "/usr/local/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/azure-functions-host/workers/python/3.6/LINUX/X64/azure_functions_worker/dispatcher.py", line 434, in __run_sync_func
    return func(**params)
  File "/home/site/wwwroot/Assessment/__init__.py", line 21, in main
    pdfTable = tabula.read_pdf(blob_to_read,pages='all',multiple_tables=True)
  File "/home/site/wwwroot/.python_packages/lib/python3.6/site-packages/tabula/io.py", line 322, in read_pdf
    output = _run(java_options, kwargs, path, encoding)
  File "/home/site/wwwroot/.python_packages/lib/python3.6/site-packages/tabula/io.py", line 91, in _run
    raise JavaNotFoundError(JAVA_NOT_FOUND_ERROR)

这是我的代码:

import logging
import azure.functions as func

import io
import re
import os
import tabula


def main(myblob: func.InputStream,blobout: func.Out[str],context: func.Context):
    logging.info(f"--- Python blob trigger function processed blob \n"
                 f"----- Name: {myblob.name}\n"
                 f"----- Blob Size: {myblob.length} bytes")

    inputblob = myblob.read()
    blob_to_read = io.BytesIO(inputblob)

    pdfTable = tabula.read_pdf(blob_to_read,pages='all',multiple_tables=True)

我也尝试过 camelot,但遇到了与 ghostscript 安装相关的并发症。

我正在制定消费计划。任何有关如何解决此问题的帮助将不胜感激。

谢谢你。

4

3 回答 3

0

检查tabula-py要求,它需要 java8 并假设您的函数环境是 python 运行时 Linux 函数并且它没有安装 Java。

因此,第一个选择是您可以按照使用自定义容器在 Linux上创建函数来创建具有自定义映像的函数,其中包括您需要的运行时。

另一个可能的选择是将 JVM 上传到 azure,并在您的函数代码集中PATH,您可以尝试一下。

于 2020-05-18T08:30:25.130 回答
0

异常:在 python azure 功能应用程序中运行 Tabula-py 时出现 JavaNotFoundError

正如错误显示:

异常:JavaNotFoundError:java从这个 Python 进程中找不到命令。请确保已安装 Java 并设置了 PATH java

它表明未安装 Java 或未Java在您的代理上设置 PATH。

因此,您需要检查是否已安装 Java 并设置 PATH。

如果没有,您可以尝试创建您的私人代理How to Set Up a Private Agent in Visual Studio Team Services

希望这可以帮助。

于 2020-05-18T07:43:41.073 回答
-1

嗨,我遇到了同样的问题,找不到很好的答案,但终于让它工作了,诀窍是在 Azure App Service 的 Ubuntu 服务器上安装 Java。要在 Ubuntu 服务器上安装 Java,您需要通过 SSH 连接到服务器,然后按照以下步骤从https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-在-ubuntu-18-04 上。我发现 sudo 命令未被识别但设法让它在不需要它的情况下工作(即不需要将它包含在命令中)。

如何在应用服务上的 Ubuntu 服务器上安装 Java

于 2020-07-17T10:43:19.963 回答