PyMuPdf (fitz) 在 docker 中无法访问

问题描述 投票:0回答:1

我正在尝试在 docker 文件中完成一些 OCR,因为我无法让它与 Tesseract 一起工作,所以我尝试重构以改用 PyMuPdf。我得到的错误很简单:

File "/code/table.py", line 35, in <module>
    import fitz
ModuleNotFoundError: No module named 'fitz'

在我的本地 (windows) 机器上,我可以使用如下所示的代码运行它

import fitz
pages = fitz.open(source_path)  # open document
for page in pages:
   page_data = page.get_textpage_ocr(language='eng', dpi=600, full=True)
<etc>

但是在 Docker 中,完全相同的代码不起作用。

我的 Dockerfile 的相关部分看起来像这样

FROM python:3.10
WORKDIR /code
COPY ./requirements.txt ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# install PyMupdf
RUN pip install pymupdf

COPY . .

CMD ["python", "./run.py"]

我的需求文件中也有 pymupdf,但为了以防万一,我单独安装了它。构建图像没有错误并且可以正常工作。

Docker-compose.yml相关部分

build: .
container_name: ocr
command: python ./run.py
volumes:
  - .:/code
  - type: bind
    source: "C:/Program Files/Tesseract-OCR/tessdata"
    target: /code/tessdata

在我的

.env
文件中,我引用了绑定的安装
TESS_DATA_PREFIX='/code/tessdata

我已经将

TESS_DATA_PREFIX
添加到我的环境变量中,尽管它似乎不再需要了,而且在我尝试使用 OCR 之前就发生了错误。

python docker tesseract python-tesseract pymupdf
1个回答
0
投票

这个问题与 Docker 在构建过程中更改后没有更新有关。删除了所有容器和构建缓存,现在它可以工作了。

编辑:另外,正确的 ENV 变量应该称为

TESSDATA_PREFIX
,而不是
TESS_DATA_PREFIX
。这是我的下一个错误,但在将
.env
更改为正确的变量名称后,代码完全按照上面的配置工作。

© www.soinside.com 2019 - 2024. All rights reserved.