这是我的文档文件:

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.

如何解决这一问题?

推荐答案

PyQt5 Pypi project要求可以找到qmake(重点是我的):

PIP还将从sdist包BUT Qt’s qmake tool must be on PATH构建和安装绑定.

这可以通过安装例如qt5-qtbase-dev,可能一起安装with other packages来完成.则可以在路径中找到qmake命令.(如果没有,可以这样添加:export PATH=/usr/lib/qt5/bin:$PATH)

因此,这应该适用于 docker 容器:

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

(100 can save memory usage. But the installation is still quite long and memory intensive.)

老实说,我还没能在内存为32 GB的电脑上安装这个软件.在高山 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的轮子文件,并且没有足够的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就没有问题了.


Remark: I am not an expert for qmake. So it is possible that there are better ways instead of installation of 100. But at least you will end having 101 available in the PATH.

Python相关问答推荐

GL pygame无法让缓冲区与vertextPointer和colorPointer一起可靠地工作

大Pandas 胚胎中产生组合

有症状地 destruct 了Python中的regex?

可变参数数量的重载类型(args或kwargs)

优化器的运行顺序影响PyTorch中的预测

如何更新pandas DataFrame上列标题的de值?

在嵌套span下的span中擦除信息

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

干燥化与列姆化的比较

无法在Spyder上的Pandas中将本地CSV转换为数据帧

如何将泛型类类型与函数返回类型结合使用?

在Django中重命名我的表后,旧表中的项目不会被移动或删除

如何从数据框列中提取特定部分并将该值填充到其他列中?

我怎么才能用拉夫分拣呢?

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

启动线程时,Python键盘模块冻结/不工作

为什么在生成时间序列时,元组索引会超出范围?

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?

如何批量训练样本大小为奇数的神经网络?

如何计算Pandas 中具有特定条件的行之间的天差