我有一个在 docker 容器中运行的Python项目,但我无法让convert_from_path运行(从pdf2image库).它在我的Windows PC上本地运行,但不能在基于Linux的坞站容器中运行.

我每次得到的误差是Unable to get page count. Is poppler installed and in PATH?

我的代码的相关部分如下所示

from pdf2image import convert_from_path
import os
from sys import exit

def my_function(file_source_path):
    try:
        pages = convert_from_path(file_source_path, 600, poppler_path=os.environ.get('POPPLER_PATH'))
    except Exception as e:
        print('Fail 1')
        print(e)
    try:
        pages = convert_from_path(file_source_path, 600)
    except Exception as e:
        print('Fail 2')
        print(e)
    try:
        pages = convert_from_path(file_source_path, 600, poppler_path=r'\usr\local\bin')
    except Exception as e:
        print('Fail 3')
        print(e)
        print(os.environ)
        exit('Exiting script')

在try 1中,我try 引用保存在Windows上的原始文件.基本上,路径是指'/code/poppler',这是指

[snippet from docker-compose.yml]
- type: bind
  source: "C:/Program Files/poppler-0.68.0/bin"
  target: /code/poppler

在try 2中,我只是try 将路径留空.在try 3中,我try 了一些我发现在本地其他用户处起作用的东西.

我的文档文件的相关部分如下所示

FROM python:3.10

WORKDIR /code

# install poppler
RUN apt-get update
RUN apt-get install poppler-utils -y

COPY ./requirements.txt ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

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

推荐答案

因此,问题是我的Docker映像没有正确刷新,在清除构建缓存并再次try 后,中间选项与上面的Dockerfile结合使用.

因此,Dockerfile中的RUN apt-get install poppler-utils -y+不引用代码pages = convert_from_path(file_source_path, 600)中的路径的组合将起作用,因为它将在安装poppler-utils时自动找到PATH.

绑定的挂载也可以从docker-compose.yml.env文件中删除.

Python相关问答推荐

将列表中的元素替换为收件箱中的元素

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

symy.分段使用numpy数组

从包含数字和单词的文件中读取和获取数据集

Python plt.text中重叠,包adjust_text不起作用,如何修复?

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

在Python中对分层父/子列表进行排序

DataFrame groupby函数从列返回数组而不是值

韦尔福德方差与Numpy方差不同

对某些列的总数进行民意调查,但不单独列出每列

Python 约束无法解决n皇后之谜

如何使用html从excel中提取条件格式规则列表?

使可滚动框架在tkinter环境中看起来自然

如何记录脚本输出

如何更改分组条形图中条形图的 colored颜色 ?

OR—Tools中CP—SAT求解器的IntVar设置值

将JSON对象转换为Dataframe

网格基于1.Y轴与2.x轴显示在matplotlib中

如果包含特定值,则筛选Groupby

根据客户端是否正在传输响应来更改基于Flask的API的行为