PyQt5 / PyQt

PyQt Examples(PyQt各种测试和例子) PyQt4 PyQt5
GNU Lesser General Public License v2.1
6.65k stars 1.97k forks source link

PyQT5 doesn't work on docker ImportError: libsmime3.so: cannot open shared object file: No such file or directory #154

Closed godomainz closed 2 years ago

godomainz commented 2 years ago

I have a Dockerfile with PyQT installed like below

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 . 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

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.

below is my python code

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
892768447 commented 2 years ago

should install the package related to libsmime3

892768447 commented 2 years ago

https://pkgs.org/search/?q=libnss3

godomainz commented 2 years ago

@892768447 thanks that works

godomainz commented 2 years ago

@892768447 thanks that works