无法在Alpine Docker上使用pip安装PyQt5。

3
这是我的Dockerfile文件:
FROM python:3.11-alpine AS app

RUN apk update && apk add make automake gcc g++ subversion python3-dev gfortran openblas-dev

RUN pip install --upgrade pip

WORKDIR /srv

当我连接到容器并运行以下命令时:pip install pyqt5 我遇到了错误:
$ pip install pyqt5
Collecting pyqt5
  Using cached PyQt5-5.15.9.tar.gz (3.2 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [25 lines of output]
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 152, in prepare_metadata_for_build_wheel
          whl_basename = backend.build_wheel(metadata_directory, config_settings)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/sipbuild/api.py", line 46, in build_wheel
          project = AbstractProject.bootstrap('wheel',
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/sipbuild/abstract_project.py", line 87, in bootstrap
          project.setup(pyproject, tool, tool_description)
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/sipbuild/project.py", line 586, in setup
          self.apply_user_defaults(tool)
        File "/tmp/pip-install-p2ogfk1p/pyqt5_97a9414aa7ba410f9715856d348d62b4/project.py", line 68, in apply_user_defaults
          super().apply_user_defaults(tool)
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/pyqtbuild/project.py", line 70, in apply_user_defaults
          super().apply_user_defaults(tool)
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/sipbuild/project.py", line 237, in apply_user_defaults
          self.builder.apply_user_defaults(tool)
        File "/tmp/pip-build-env-z7am47sr/overlay/lib/python3.11/site-packages/pyqtbuild/builder.py", line 69, in apply_user_defaults
          raise PyProjectOptionException('qmake',
      sipbuild.pyproject.PyProjectOptionException
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

如何解决这个问题?

你是否已经安装了qmake? - Kevin Woodward
@KevinWoodward 我不明白您的意思。 - Lenny4
2个回答

2

首先尝试添加包含qmake的Qt工具包。

PyQt5是Qt库的Python绑定集,因此需要一些Qt工具才能正确构建。

在Alpine Linux中,Qt工具通常可在qt5-qtbase-dev软件包中获得。因此,您可以使用apk add进行安装。

您的Dockerfile应如下:

FROM python:3.11-alpine AS app

RUN apk update && apk add make automake gcc g++ subversion python3-dev gfortran openblas-dev qt5-qtbase-dev

RUN pip install --upgrade pip

WORKDIR /srv

2

PyQt5 Pypi项目要求可以找到qmake工具(强调是我的):

pip也会从sdist包中构建和安装绑定,但必须在PATH上安装Qt的qmake工具

这可以通过安装例如qt5-qtbase-dev来完成,可能需要与其他软件包一起安装。然后就可以在路径中找到qmake命令。(如果没有,则可以通过以下方式添加:export PATH=/usr/lib/qt5/bin:$PATH

因此,这应该可以在Docker容器上运行:

apk add qt5-qtbase-dev
pip install --no-cache-dir pyqt5

(--no-cache-dir 可以节省内存使用。但安装仍然相当长且占用内存较多。)

老实说,我还没有成功在我的32GB RAM电脑上安装它。在Alpine Docker下,安装步骤相当繁重,很容易导致OOM。可悲的是,在pypi中没有预编译的源代码可用:https://pypi.org/project/PyQt5/#files

pip install PyQt5-5.15.9-cp37-abi3-manylinux_2_17_x86_64.whl
ERROR: PyQt5-5.15.9-cp37-abi3-manylinux_2_17_x86_64.whl is not a supported wheel on this platform.

如果您在其他位置找不到适用于Alpine的wheel文件,并且没有足够的RAM来自行构建,我建议不要使用Alpine Linux。在Ubuntu和其他发行版(例如Debian Bullseye)下安装似乎更简单:

FROM python:3.11 AS app

RUN apt update && apt install -y make automake gcc g++ subversion python3-dev gfortran libopenblas-dev

RUN pip install --upgrade pip

WORKDIR /srv

然后 pip install pyqt5 没有问题。

备注:我不是qmake的专家,所以可能有更好的方法而不是安装qt5-qtbase-dev。但至少你会在PATH中拥有qmake


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接