[英]PyQT5 doesn't work on docker ImportError: libsmime3.so: cannot open shared object file: No such file or directory
I have a Dockerfile with PyQT installed like below我有一个 Dockerfile 和 PyQT 安装如下
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN adduser --quiet --disabled-password qtuser && usermod -a -G audio qtuser
RUN apt-get update -y \
&& apt-get install alsa -y \
&& apt-get install -y python3-pyqt5 \
&& apt-get install python3-pip -y && \
pip3 install pyqtwebengine
WORKDIR /htmltopdf
I built my image like this docker build -t html-to-pdf.
我像这样构建图像
docker build -t html-to-pdf.
Then I ran my image like this docker run --rm -v "$(pwd)":/htmltopdf -u qtuser -it html-to-pdf python3 htmlToPdfnew.py --url https://www.w3schools.com/howto/howto_css_register_form.asp
然后我像这样运行图像
docker run --rm -v "$(pwd)":/htmltopdf -u qtuser -it html-to-pdf python3 htmlToPdfnew.py --url https://www.w3schools.com/howto/howto_css_register_form.asp
But I'm getting below error但是我遇到了以下错误
Traceback (most recent call last):
File "htmlToPdfnew.py", line 2, in <module>
from PyQt5 import QtWidgets, QtWebEngineWidgets
ImportError: libsmime3.so: cannot open shared object file: No such file or directory
I do NOT get that error in my PC.我的 PC 中没有出现该错误。
below is my python code下面是我的 python 代码
import sys
from PyQt5 import QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtGui import QPageLayout, QPageSize
from PyQt5.QtWidgets import QApplication
import argparse
def main():
url = ''
parser = argparse.ArgumentParser(description="Just an example", formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--url", help="Type url")
args = parser.parse_args()
config = vars(args)
url = config['url']
app = QtWidgets.QApplication(sys.argv)
loader = QtWebEngineWidgets.QWebEngineView()
loader.setZoomFactor(1)
layout = QPageLayout()
layout.setPageSize(QPageSize(QPageSize.A4Extra))
layout.setOrientation(QPageLayout.Portrait)
loader.load(QUrl(url))
loader.page().pdfPrintingFinished.connect(lambda *args: QApplication.exit())
def emit_pdf(finished):
QTimer.singleShot(2000, lambda: loader.page().printToPdf("test.pdf", pageLayout=layout))
loader.loadFinished.connect(emit_pdf)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
so how do I resolve below error?那么如何解决以下错误?
Traceback (most recent call last):
File "htmlToPdfnew.py", line 2, in <module>
from PyQt5 import QtWidgets, QtWebEngineWidgets
ImportError: libsmime3.so: cannot open shared object file: No such file or directory
You have to install libnss3 in the Docker image.您必须在 Docker 映像中安装 libnss3。
Adding apt-get install libnss3
to your installation commands in the Dockerfile
should do the trick.将
apt-get install libnss3
添加到Dockerfile
中的安装命令中应该可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.