(Sorry for yesterday's double message.) I spent more time looking into this issue, and a workaround is given in https://github.com/pyinstaller/pyinstaller/issues/3668#issuecomment-428951753. Basically, I now test whether the OS is Linux, and if so, instead of calling `QDesktopServices.openUrl`, I follow the lengthy procedure given in that commented issue and finish by calling `subprocess.Popen(["xdg-open", "file.pdf", env=myEnv)`.
This workaround works for me for now. However, I expect other Qt developers may be unaware that their applications using QDesktopServices don't work in Linux unless they do a good job testing. And once I became aware of this issue, it still took me several hours to find this workaround. So I think this is a bug that should really be fixed. I mentioned this in https://github.com/pyinstaller/pyinstaller/issues/3668#issuecomment-797138475 and https://github.com/pyinstaller/pyinstaller/issues/2892#issuecomment-797140616 . Efrem Braun On Fri, Mar 12, 2021 at 4:23 AM Efrem Braun <efrem.br...@gmail.com> wrote: > I'm using PyInstaller to bundle a PySide2 application. In my application, > I use QDesktopServices.openUrl ( > https://doc.qt.io/qt-5/qdesktopservices.html#openUrl) to open a PDF > version of the user manual when the user clicks on the Help menu. > > This works fine when I run the PySide2 application from terminal, whether > it's on my Mac, Windows, or Ubuntu machines; it opens the manual in > Preview, Microsoft Edge, and Evince, respectively. However, when I use > PyInstaller to bundle the application via `pyinstaller MainWindow.py`, I > get the following error on Ubuntu when I try to open the PDF: > `evince: error while loading shared libraries: libgdk-3.so.0: failed to > map segment from shared object` > > If I remove libgdk-3.so from the application bundle, I get the error: > `evince: error while loading shared libraries: libpangocairo-1.0.so.0: > failed to map segment from shared object` > And this error continues with a different library if I then remove > libpangocairo-1.0.so. I tried doing that through about 20 different > libraries before I stopped trying to see when the issue would end. > > Evidently, this issue has been seen before. On > https://answers.launchpad.net/kathaikalam/+question/206392, the program > was explicitly calling Evince to open the PDF file, so the developer fixed > the issue by calling xpdf instead. However, since QDesktopServices opens a > local file using the operating system's default program, I can't tell it > not to use Evince. > > So is there any way to get Evince to work with PyInstaller? Or any other > workarounds? I thought about having my program determine if the OS is > Ubuntu, and if so, not using QDesktopServices but instead explicitly use > xpdf or some other program, but the issue there is that the user might not > have that program installed. QDesktopServices is very nice in that it calls > a program that's known to be present on the user's system. > > I'm using Ubuntu 20.04.2 LTS, PySide2 5.15.2, and PyInstaller 4.2. > > Efrem Braun > > -- > You received this message because you are subscribed to a topic in the > Google Groups "PyInstaller" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/pyinstaller/oKLmcV6nSe0/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > pyinstaller+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/pyinstaller/0b927c78-dcac-44d9-91ce-e252bf63e8a9n%40googlegroups.com > <https://groups.google.com/d/msgid/pyinstaller/0b927c78-dcac-44d9-91ce-e252bf63e8a9n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "PyInstaller" group. To unsubscribe from this group and stop receiving emails from it, send an email to pyinstaller+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/pyinstaller/CALV7rxnZVOmftP60%2BJnC3zRXJZzVF7fE%2BuSRtwr6_kTuqGVTag%40mail.gmail.com.