Re: Running pyqt-bundle on Qt source build
Phil Thompson <[email protected]> Fri, 17 Apr 2020 12:39:21 +0100
| Newsgroups | gmane.comp.python.pyqt-pykde |
|---|---|
| Message-ID | <[email protected]> |
On 17/04/2020 10:24, Florian Bruhin wrote: > 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/ Changing '56' to '*' in qt_metadata.py will probably work. > 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 If Qt_5_PRIVATE_API is new in Qt v5.15 then it may be PyQt's "fault". > (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. Well, source builds aren't supported - they would never get tested. Would adding an option to treat missing things as a warning rather than an error be a more general solution? Phil _______________________________________________ PyQt mailing list [email protected] https://www.riverbankcomputing.com/mailman/listinfo/pyqt