[PyQt] Running pyqt-bundle on Qt source build
Florian Bruhin
me at the-compiler.org
Fri Apr 17 10:24:55 BST 2020
Hi,
I'm trying to run pyqt-bundle on a Qt developer build built from source
(i.e. ./configure -developer-build ...).
Such a build doesn't have an install dir, but the qtbase/ repository folder has
a lib/ subdirectory with all the .so files in it (even from other modules like
QtWebEngine).
tl;dr: It worked, but I had to patch pyqt-bundle a bit.
When initially running pyqt-bundle, it fails to find libicu:
PyQt5/pylupdate.abi3.so: RPATH=$ORIGIN/Qt/lib
PyQt5/pylupdate.abi3.so: new RPATH: $ORIGIN/Qt/lib
PyQt5/pyrcc.abi3.so: RPATH=$ORIGIN/Qt/lib
PyQt5/pyrcc.abi3.so: new RPATH: $ORIGIN/Qt/lib
PyQt5/QtBluetooth.abi3.so: RPATH=$ORIGIN/Qt/lib
PyQt5/QtBluetooth.abi3.so: new RPATH: $ORIGIN/Qt/lib
PyQt5/QtCore.abi3.so: RPATH=$ORIGIN/Qt/lib
PyQt5/QtCore.abi3.so: new RPATH: $ORIGIN/Qt/lib
pyqt-bundle: An internal error occurred...
Traceback (most recent call last):
File ".../bin/pyqt-bundle", line 8, in <module>
sys.exit(main())
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/main.py", line 77, in main
handle_exception(e)
File ".../lib/python3.8/site-packages/sipbuild/exceptions.py", line 81, in handle_exception
raise e
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/main.py", line 72, in main
bundle(wheel_path=args.wheels[0], qt_dir=args.qt_dir,
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/bundle.py", line 117, in bundle
package.bundle_qt(target_qt_dir, qt_dir, arch)
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/abstract_package.py", line 105, in bundle_qt
md.bundle(name, target_qt_dir, qt_dir,
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/qt_metadata.py", line 94, in bundle
self._bundle_library(lib, target_qt_dir, qt_dir, arch)
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/qt_metadata.py", line 209, in _bundle_library
cls._bundle_file(name,
File ".../lib/python3.8/site-packages/pyqtbuild/bundle/qt_metadata.py", line 201, in _bundle_file
shutil.copy2(src, dst)
File "/usr/lib/python3.8/shutil.py", line 432, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.8/shutil.py", line 261, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/home/florian/code/qt/5.15/qtbase/lib/libicui18n.so.56'
Additionally, even though that Qt was built against libicu 65, pyqt-bundle
seems to hardcode version 56. So I patched bundle/packages/pyqt5.py to use
version 65 and symlinked the library to my system-wide one:
$ ln -s /usr/lib/libicui18n.so.65 /usr/lib/libicuuc.so.65 /usr/lib/libicudata.so.65 \
~/code/qt/5.15/qtbase/lib/
Then libQt5Designer.so.5 was missing, fixed with --exclude QtDesigner. Next:
[...]
PyQt5/QtGui.abi3.so: RPATH=$ORIGIN/Qt/lib
PyQt5/QtGui.abi3.so: new RPATH: $ORIGIN/Qt/lib
pyqt-bundle: 'libQt5WaylandClient.so.5' is missing from the Qt installation
Again I had to patch pyqt5.py to remove the dependency of QtGui on
Qt5WaylandClient.
Then I had some other issues fixed with --exclude arguments - I ended up with:
--exclude QtDesigner --exclude QtHelp --exclude QtLocation
--exclude QtMultimedia --exclude QtMultimediaWidgets
--exclude QtNetworkAuth --exclude QtPositioning --exclude QtQuick
--exclude QtRemoteObjects --exclude QtSensors --exclude QtSerialPort
--exclude QtSvg --exclude QtWebSockets --exclude QtX11Extras
--exclude QtXmlPatterns
After all that, I got a wheel! Unfortunately it doesn't work:
ImportError: .../site-packages/PyQt5/QtCore.abi3.so:
undefined symbol: _ZN18QMetaObjectBuilderD1Ev, version Qt_5_PRIVATE_API
(that is QMetaObjectBuilder::~QMetaObjectBuilder() demangled). No idea at this
point why that wouldn't work, but that's probably not PyQt's fault.
Ideally, I'd be able to do this without having to patch pyqt-bundle :)
Thus, I'd like to request options for:
- Telling pyqt-bundle where to find libicu libraries, and what version to use
(or perhaps it could find out itself somehow?).
- Telling it to assume QtGui is built without wayland support.
However, if the answer is "source builds aren't supported", I'm fine with that
as well. After building Qt for a couple of hours, building PyQt isn't a big
deal.
Florian
--
me at the-compiler.org (Mail/XMPP) | https://www.qutebrowser.org
https://bruhin.software/ | https://github.com/sponsors/The-Compiler/
GPG: 916E B0C8 FD55 A072 | https://the-compiler.org/pubkey.asc
I love long mails! | https://email.is-not-s.ms/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20200417/5bc92b87/attachment.sig>
More information about the PyQt
mailing list