如何使用 python3、CircleCI 和 Mayavi 对图形进行单元测试
How to unit test graphics with python3, CircleCI and Mayavi
我使用 Mayavi 在 python3 库中编写了一堆可视化函数。我对这个库不是很熟悉,也不熟悉使用 python.
测试可视化效果
理想情况下,我只是希望可视化代码在磁盘上生成一些图形,我不太关心弹出windows(虽然我不确定Mayavi是否可以正常工作没有弹出这样的 windows).
无论如何,我的代码在本地运行,但是当我将其推送到开发时,CircleCI 在 运行 测试失败并出现以下错误:
!/bin/bash -eo pipefail
python3 tests/test.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Received "aborted" signal
我使用的 Docker 图片如下:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends\
vim \
git \
gcc-9 \
g++ \
build-essential \
libboost-all-dev \
cmake \
unzip \
tar \
ca-certificates \
doxygen \
graphviz
RUN apt-get install -y libgdal-dev g++ --no-install-recommends && \
apt-get clean -y
ENV CPLUS_INCLUDE_PATH=/usr/include/gdal
ENV C_INCLUDE_PATH=/usr/include/gdal
RUN git clone --recurse-submodules https://github.com/Becheler/quetzal-EGGS \
&& cd quetzal-EGGS \
&& mkdir Release \
&& cd Release \
&& cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local/quetzal-EGGS" \
&& cmake --build . --config Release --target install
RUN set -xe \
apt-get update && apt-get install -y \
python3-pip \
--no-install-recommends
RUN pip3 install --upgrade pip
RUN pip3 install build twine pipenv numpy # for crumbs publishing
RUN pip3 install rasterio && \
pip3 install matplotlib && \
pip3 install imageio && \
pip3 install imageio-ffmpeg && \
pip3 install pyproj && \
pip3 install shapely && \
pip3 install fiona && \
pip3 install scikit-learn && \
pip3 install pyimpute && \
pip3 install geopandas && \
pip3 install pygbif
########## MAYAVI
# xcb plugin
RUN apt-get install -y --no-install-recommends libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 && \
apt-get clean -y
RUN python3 -m pip install vtk
RUN apt-get update && apt-get install -y python3-opencv && apt-get clean -y
RUN pip3 install opencv-python
RUN pip3 install mayavi PyQt5
RUN pip3 install GDAL==$(gdal-config --version) pyvolve==1.0.3 quetzal-crumbs==0.0.15
# Clean to make image smaller
RUN apt-get autoclean && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
- 我是否遗漏了一些依赖项?
- 我应该在某处设置
-X
选项吗?
- 我是否应该停用我的
mlab.show()
和 imshow()
呼叫
图书馆?
我错过了一个依赖,qt5-default
。我最终在 Docker/CircleCi:
上获得了 Mayavi 运行 的这些行
########## MAYAVI
# xcb plugin
RUN apt-get install -y --no-install-recommends xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 && \
apt-get clean -y
# Trying to solve the weird xcfb error
RUN apt-get install -y --no-install-recommends qt5-default && \
apt-get clean -y
RUN python3 -m pip install vtk
RUN apt-get update && apt-get install -y python3-opencv && apt-get clean -y
RUN pip3 install opencv-python
RUN pip3 install PyVirtualDisplay
RUN pip3 install mayavi PyQt5
我很确定其中许多依赖项是多余的或不需要的。但它有效,所以我将保持这种状态,直到我有时间进行一些清理。
我还在我的 python 库中添加了这一行:
mlab.options.offscreen = True
我使用 Mayavi 在 python3 库中编写了一堆可视化函数。我对这个库不是很熟悉,也不熟悉使用 python.
测试可视化效果理想情况下,我只是希望可视化代码在磁盘上生成一些图形,我不太关心弹出windows(虽然我不确定Mayavi是否可以正常工作没有弹出这样的 windows).
无论如何,我的代码在本地运行,但是当我将其推送到开发时,CircleCI 在 运行 测试失败并出现以下错误:
!/bin/bash -eo pipefail
python3 tests/test.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Received "aborted" signal
我使用的 Docker 图片如下:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends\
vim \
git \
gcc-9 \
g++ \
build-essential \
libboost-all-dev \
cmake \
unzip \
tar \
ca-certificates \
doxygen \
graphviz
RUN apt-get install -y libgdal-dev g++ --no-install-recommends && \
apt-get clean -y
ENV CPLUS_INCLUDE_PATH=/usr/include/gdal
ENV C_INCLUDE_PATH=/usr/include/gdal
RUN git clone --recurse-submodules https://github.com/Becheler/quetzal-EGGS \
&& cd quetzal-EGGS \
&& mkdir Release \
&& cd Release \
&& cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local/quetzal-EGGS" \
&& cmake --build . --config Release --target install
RUN set -xe \
apt-get update && apt-get install -y \
python3-pip \
--no-install-recommends
RUN pip3 install --upgrade pip
RUN pip3 install build twine pipenv numpy # for crumbs publishing
RUN pip3 install rasterio && \
pip3 install matplotlib && \
pip3 install imageio && \
pip3 install imageio-ffmpeg && \
pip3 install pyproj && \
pip3 install shapely && \
pip3 install fiona && \
pip3 install scikit-learn && \
pip3 install pyimpute && \
pip3 install geopandas && \
pip3 install pygbif
########## MAYAVI
# xcb plugin
RUN apt-get install -y --no-install-recommends libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 && \
apt-get clean -y
RUN python3 -m pip install vtk
RUN apt-get update && apt-get install -y python3-opencv && apt-get clean -y
RUN pip3 install opencv-python
RUN pip3 install mayavi PyQt5
RUN pip3 install GDAL==$(gdal-config --version) pyvolve==1.0.3 quetzal-crumbs==0.0.15
# Clean to make image smaller
RUN apt-get autoclean && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
- 我是否遗漏了一些依赖项?
- 我应该在某处设置
-X
选项吗? - 我是否应该停用我的
mlab.show()
和imshow()
呼叫 图书馆?
我错过了一个依赖,qt5-default
。我最终在 Docker/CircleCi:
########## MAYAVI
# xcb plugin
RUN apt-get install -y --no-install-recommends xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 && \
apt-get clean -y
# Trying to solve the weird xcfb error
RUN apt-get install -y --no-install-recommends qt5-default && \
apt-get clean -y
RUN python3 -m pip install vtk
RUN apt-get update && apt-get install -y python3-opencv && apt-get clean -y
RUN pip3 install opencv-python
RUN pip3 install PyVirtualDisplay
RUN pip3 install mayavi PyQt5
我很确定其中许多依赖项是多余的或不需要的。但它有效,所以我将保持这种状态,直到我有时间进行一些清理。
我还在我的 python 库中添加了这一行:
mlab.options.offscreen = True