3

我正在尝试在 apline 图像上安装 pymupdf 包,但出现以下错误

fitz/fitz_wrap.c:2739:10: fatal error: ft2build.h: No such file or directory
     2739 | #include <ft2build.h>
          |          ^~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
 RUN pip install PyMuPDF
 ---> Running in 34d246d6f01b
Collecting PyMuPDF
  Downloading PyMuPDF-1.18.5.tar.gz (251 kB)
Using legacy 'setup.py install' for PyMuPDF, since package 'wheel' is not installed.
Installing collected packages: PyMuPDF
    Running setup.py install for PyMuPDF: started
    Running setup.py install for PyMuPDF: finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-uxc_zm2j/pymupdf/setup.py'"'"'; __file__='"'"'/tmp/pip-install-uxc_zm2j/pymupdf/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-nipvlcn8/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/PyMuPDF
         cwd: /tmp/pip-install-uxc_zm2j/pymupdf/
    Complete output (20 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.8
    creating build/lib.linux-x86_64-3.8/fitz
    copying fitz/__init__.py -> build/lib.linux-x86_64-3.8/fitz
    copying fitz/fitz.py -> build/lib.linux-x86_64-3.8/fitz
    copying fitz/utils.py -> build/lib.linux-x86_64-3.8/fitz
    copying fitz/__main__.py -> build/lib.linux-x86_64-3.8/fitz
    running build_ext
    building 'fitz._fitz' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/fitz
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Os -fomit-frame-pointer -g -Os -fomit-frame-pointer -g -Os -fomit-frame-pointer -g -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/mupdf -I/usr/local/include/mupdf -Imupdf/thirdparty/freetype/include -I/usr/include/python3.8 -c fitz/fitz_wrap.c -o build/temp.linux-x86_64-3.8/fitz/fitz_wrap.o
    fitz/fitz_wrap.c:2739:10: fatal error: ft2build.h: No such file or directory
     2739 | #include <ft2build.h>
          |          ^~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-uxc_zm2j/pymupdf/setup.py'"'"'; __file__='"'"'/tmp/pip-install-uxc_zm2j/pymupdf/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-nipvlcn8/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/PyMuPDF Check the logs for full command output.
WARNING: You are using pip version 20.2.4; however, version 20.3.3 is available.
You should consider upgrading via the '/usr/bin/python3.8 -m pip install --upgrade pip' command.
The command '/bin/sh -c pip install PyMuPDF' returned a non-zero code: 1
4

5 回答 5

3

Alpine 中的 freetype-dev 将安装在 /usr/include/freetype2 中。可以将头文件和目录链接到/usr/include apk add mupdf-dev安装的mupdf,方法结构与pymupdf不一致,所以需要从源代码编译mupdf库。

FROM python:3.8-alpine
RUN apk add gcc g++ cmake make mupdf-dev freetype-dev
ARG MUPDF=1.18.0
RUN ln -s /usr/include/freetype2/ft2build.h /usr/include/ft2build.h \
    && ln -s /usr/include/freetype2/freetype/ /usr/include/freetype \
    && wget -c -q https://www.mupdf.com/downloads/archive/mupdf-${MUPDF}-source.tar.gz \
    && tar xf mupdf-${MUPDF}-source.tar.gz \
    && cd mupdf-${MUPDF}-source \
    && make HAVE_X11=no HAVE_GLUT=no shared=yes prefix=/usr/local install \
    && cd .. \
    && rm -rf *.tar.gz mupdf-${MUPDF}-source
RUN pip install PyMuPDF==1.18.9

试试这个,它有效

此外,Alpine 的官方 Mupdf 库已经更新,使安装更容易。(更新于 2021-04-28) 在此处输入图像描述

FROM python:3.8-alpine
# Add temporary virtual environment dependencies
RUN apk --no-cache add --virtual .builddeps gcc g++

# These dependency packages cannot be removed because they continue to be used in PyMupdf
RUN apk --no-cache add  mupdf-dev freetype-dev jbig2dec-dev jpeg-dev openjpeg-dev 

# install PyMupdf
RUN pip install pymupdf

# Remove virtual environment dependencies
RUN apk del .builddeps
于 2021-03-11T07:42:15.300 回答
1

尝试先用pip install -U pip.

这是对问题的深入探讨https://github.com/pymupdf/PyMuPDF/issues/894有一个从tar.gz文件而不是.whl 获取源的旧 pip并且由于错误的 INCLUDE dir 而构建失败对于自 PyMuPDF 1.18.2 以来已解决的 freetype2,但是... Pypi 的源代码 tar.gz 已过时。

于 2021-02-11T18:12:44.713 回答
1

对于这些类型的错误,可以采取简单的步骤:

  1. 阅读错误并识别丢失的文件,您已经完成了,您似乎丢失了ft2build.h
  2. 转到Alpine 软件包网站并浏览Contents选项卡
  3. 在字段文件中输入您丢失的文件的名称;在Branch中,选择您的 Alpine 版本并在Repository中选择main
  4. 这将指向一个特定的包,只需apkDockerfile中安装它,你就可以开始使用了

在您的情况下,这是在 Alpine 3.12 版上进行此类搜索的结果: 高山内容搜索

因此,您可以修复在现有apk命令中添加包的问题freetype-dev

RUN apk add --no-cache \
      freetype-dev
于 2020-12-21T09:30:10.810 回答
0

这对我有用,并且仅适用于 python:3.8.10 或更高版本以及 Pymupdf:1.18.14:

1)。仅当您没有安装 python 时:
apk add --update py-pip

2)。安装依赖项:

apk add --no-cache \
python3-dev \
mupdf-dev \
gcc \
libc-dev \
musl-dev \
jbig2dec \
openjpeg-dev \
jpeg-dev \
harfbuzz-dev

3)。创建快捷方式:
ln -s /usr/lib/libjbig2dec.so.0 /usr/lib/libjbig2dec.so

4)。安装 PymuPdf:
pip install pymupdf

只有当你想同时做

apk add --update py-pip \
&& apk add --no-cache \
python3-dev \
mupdf-dev \
gcc \
libc-dev \
musl-dev \
jbig2dec \
openjpeg-dev \
jpeg-dev \
harfbuzz-dev \
&& ln -s /usr/lib/libjbig2dec.so.0 /usr/lib/libjbig2dec.so \
&& pip install pymupdf
于 2021-06-16T13:32:12.783 回答
0

问题是 PyPI 上没有用于 docker 文件建立的环境的轮子。在这种情况下,pip 会尝试从源代码创建 PyMuPDF。因为 PyMuPDF 是 MuPDF 的绑定,所以当没有安装 MuPDF 时,这反过来必然会失败......就像这里一样。因此解决方案是

  • 在安装 PyMuPDF 之前安装 MuPDF
  • 或使用有轮子的 OS / Python 组合之一。
于 2021-01-10T09:48:58.903 回答