[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: [PyQt] How to build pyqt sources to provide the same content than official wheel?
From: BPL <spscener84 () gmail ! com>
Date: 2019-07-21 11:26:43
Message-ID: CAAfY3fYM2kCwZcfO6BTLyfWpScVy9rB3Zhk3YFfYUpbxLr3W+g () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
Just to let you know all the problems I've faced were mainly because I'd
compiled qt+ssl using vcpkg <https://github.com/microsoft/vcpkg>
include/lib directories and by doing so
I'd be forced to add vcpkg bin directory at runtime, otherwise the pyqt
dlls will have missing dependencies.
As a simple solution I've compiled qt with no ssl support (auto) and just
modified *qocspresponse.sip* generated by metasip, which it's
missing a code guard, :
%If (Qt_5_13_0 -)
%If (PyQt_SSL)
%ModuleCode
#include <qocspresponse.h>
%End
%End
%End
That way I've been able to use latest qt from github repo without waiting
weeks/months to be released \:O/
Phil, would it be possible to change qocspresponse.sip with this code guard
so you won't be forced to use qt with ssl feature or it's this a limitation
of metasip?
Thanks.
On Sat, Jul 20, 2019 at 6:38 PM BPL <spscener84@gmail.com> wrote:
> Phil,
>
> don't mind my previous mail, I think I've found the issue here... problem
> some Pyqt5 pyd not loading is because they were missing
> some external dlls such as libpng16.dll... right now I'm trying to figure
> out why, maybe the way I've compiled qt:
>
> configure.bat -prefix "d:/qt/5.13.0-394-g69ef6e8212" -opensource
> -confirm-license -nomake examples -nomake tests -opengl dynamic -ssl -L
> D:/software/vcpkg/installed/x86-windows/lib -I
> D:/software/vcpkg/installed/x86-windows/include -v
>
> wasn't a good idea afterall... I suspect by doing this I've been forced to
> add d:/software/vcpkg/installed/x86-windows/bin to path when importing
> PyQt as well so that libpng16.dll will be found... so probably the best
> way to link openssl is by downloading & compiling openssl in isolation (ie:
> https://www.openssl.org/source/)
> and not relying in vcpkg at all :/
>
> On Sat, Jul 20, 2019 at 5:54 PM BPL <spscener84@gmail.com> wrote:
>
>> Phil,
>>
>> Usually I don't have any of my available qt distributions in path, when
>> you said
>>
>> You don't copy your Qt installation, PyQt (when build from sources) will
>>> use it where it is.
>>
>>
>> I guess you meant PyQt (when built from sources) will use the Qt
>> installation from either path
>> or from the Qt folder in the target dir where PyQt has been installed. I
>> can see pyqt
>> __init__.py looks like this:
>>
>> def find_qt():
>> import os
>>
>> path = os.environ['PATH']
>>
>> dll_dir = os.path.dirname(__file__) + '\\Qt\\bin'
>> if os.path.isfile(dll_dir + '\\Qt5Core.dll'):
>> path = dll_dir + ';' + path
>> os.environ['PATH'] = path
>> else:
>> for dll_dir in path.split(';'):
>> if os.path.isfile(dll_dir + '\\Qt5Core.dll'):
>> break
>> else:
>> raise ImportError("unable to find Qt5Core.dll on PATH")
>>
>> try:
>> os.add_dll_directory(dll_dir)
>> except AttributeError:
>> pass
>>
>>
>> find_qt()
>> del find_qt
>>
>>
>> As a workaround I've decided to create a junction pointing out
>> to the Qt distribution used to build pyqt from sources, ie:
>>
>> (py364_32) d:\virtual_envs\py364_32\Lib\site-packages\PyQt5>mklink /j Qt
>> d:\qt\5.13.0-394-g69ef6e8212
>> Junction created for Qt <<===>> d:\qt\5.13.0-394-g69ef6e8212
>>
>>
>> But for some reason when I do `from PyQt5.Qt import *` I'll just get this
>> content
>> <https://dl.dropboxusercontent.com/s/cj9rf8mbm023rwf/2019-07-20_17-49-10.txt> where
>> you can see there isn't any available
>> QApplication :(
>>
>> And when doing `from PyQt5.QtWidgets import *` I'll get:
>>
>> from PyQt5.QtWidgets import *
>> ImportError: DLL load failed: The specified module could not be found.
>>
>> So I'm stuck at this point, could you advice?
>>
>> On Sat, Jul 20, 2019 at 4:34 PM BPL <spscener84@gmail.com> wrote:
>>
>>> Florian,
>>>
>>> Thanks to provide those wiki docs as well as the qt releasing mailing
>>> list, they're definitely
>>> helpful indeed to make proper planning.
>>>
>>> If I look in retrospective is funny though, that QTBUG-74492 is the
>>> first one I've ever been involved with,
>>> this bug was opened in 21.03.2019 and after few months passed nobody was
>>> working on it or they didn't
>>> know what the problem was. I decided to spend some days bisecting the
>>> bug and finding the root cause
>>> of the problem, thanks to that the author who introduced the bug in the
>>> first place could fix it properly in few days. In any case,
>>> finding the issue was really tricky and the fix ended up to be quite
>>> "trivial" one. The moral of the story here is,
>>> for something as trivial as this one you'll need to wait quite a lot of
>>> time to get
>>> a proper release... and that's assuming you're interested enough to help
>>> Qt team to narrow it down. The
>>> workload of Qt devs isn't small neither... which indicates there is room
>>> to optimize development in that company.
>>>
>>> Bug opened in 21.03.2019 and official release with the fix delivered in
>>> 15.08.2019... That's quite a lot
>>> of time to wait for...
>>>
>>> Anyway, at this point a global view of how things work in both Qt & pyqt
>>> has become +/- clear, which is great so you
>>> know what you can or can't expect.
>>>
>>> On Sat, Jul 20, 2019 at 3:10 PM Florian Bruhin <me@the-compiler.org>
>>> wrote:
>>>
>>>> On Sat, Jul 20, 2019 at 02:53:29PM +0200, BPL wrote:
>>>> > Anyway... I'll try again to see if I can make it work but hopefully a
>>>> new
>>>> > pyqt wheel with this annoying bug fix
>>>> > https://bugreports.qt.io/browse/QTBUG-74492
>>>> > will land soon at pypi, I've got some opengl tools in place where this
>>>> > glitch makes really annoying work with them, it's a really disturbing
>>>> bug :/
>>>>
>>>> As you can see in the bug report, the fix lands in Qt 5.12.5, 5.13.1
>>>> and 5.14.0.
>>>> Via the Qt wiki, you can see when those are planned to be released:
>>>>
>>>> https://wiki.qt.io/Qt_5.12_Release (5.12.5: 27.08.2019)
>>>> https://wiki.qt.io/Qt_5.13_Release (5.13.1: 15.08.2019)
>>>> https://wiki.qt.io/Qt_5.14_Release (5.14.0: 26.11.2019)
>>>>
>>>> After a new Qt is released, usually a couple of days afterwards, PyQt
>>>> gets
>>>> updated (might be a bit longer for new feature releases like 5.14 will
>>>> be).
>>>> So if you're okay with upgrading to Qt 5.13, you'll hopefully see an
>>>> updated
>>>> PyQt in a month or so.
>>>>
>>>> I'd also recommend subscribing to the Qt Releasing mailinglist - it's
>>>> quite
>>>> low-traffic, and you get announcement mails when Qt updates are
>>>> released, or
>>>> when there was a release team meeting (with the meeting minutes):
>>>>
>>>> https://lists.qt-project.org/listinfo/releasing
>>>>
>>>> Florian
>>>>
>>>> --
>>>> https://www.qutebrowser.org | me@the-compiler.org (Mail/XMPP)
>>>> GPG: 916E B0C8 FD55 A072 | https://the-compiler.org/pubkey.asc
>>>> I love long mails! | https://email.is-not-s.ms/
>>>>
>>>
[Attachment #5 (text/html)]
<div dir="ltr">Just to let you know all the problems I've faced were mainly because I'd \
compiled qt+ssl using <a href="https://github.com/microsoft/vcpkg">vcpkg</a> include/lib \
directories and by doing so<div>I'd be forced to add vcpkg bin directory at runtime, \
otherwise the pyqt dlls will have missing dependencies.</div><div><br></div><div>As a simple \
solution I've compiled qt with no ssl support (auto) and just modified \
<b>qocspresponse.sip</b> generated by metasip, which it's<br></div><div>missing a code \
guard, :</div><div><br></div><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>%If (Qt_5_13_0 -)</div><div>%If \
(PyQt_SSL)</div><div><br></div><div>%ModuleCode</div><div>#include \
<qocspresponse.h></div><div>%End</div><div>%End</div><div>%End</div></blockquote><div><br></div><div>That \
way I've been able to use latest qt from github repo without waiting weeks/months to be \
released \:O/</div><div><br></div><div>Phil, would it be possible to change qocspresponse.sip \
with this code guard so you won't be forced to use qt with ssl feature or it's this a \
limitation of metasip?<br></div><div><br></div><div>Thanks.</div></div><br><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 20, 2019 at 6:38 PM BPL \
<<a href="mailto:spscener84@gmail.com">spscener84@gmail.com</a>> \
wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px \
solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Phil,<div><br></div><div>don't mind \
my previous mail, I think I've found the issue here... problem some Pyqt5 pyd not loading \
is because they were missing</div><div>some external dlls such as libpng16.dll... right now \
I'm trying to figure out why, maybe the way I've compiled \
qt:</div><div><br></div><div>configure.bat -prefix "d:/qt/5.13.0-394-g69ef6e8212" \
-opensource -confirm-license -nomake examples -nomake tests -opengl dynamic -ssl -L \
D:/software/vcpkg/installed/x86-windows/lib -I D:/software/vcpkg/installed/x86-windows/include \
-v </div><div><br></div><div>wasn't a good idea afterall... I suspect by doing this \
I've been forced to add d:/software/vcpkg/installed/x86-windows/bin to path when \
importing</div><div>PyQt as well so that libpng16.dll will be found... so probably the best way \
to link openssl is by downloading & compiling openssl in isolation (ie: <a \
href="https://www.openssl.org/source/" \
target="_blank">https://www.openssl.org/source/</a>)<br></div><div>and not relying in vcpkg at \
all :/</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul \
20, 2019 at 5:54 PM BPL <<a href="mailto:spscener84@gmail.com" \
target="_blank">spscener84@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div \
dir="ltr">Phil,<div><br></div><div>Usually I don't have any of my available qt \
distributions in path, when you said</div><div><br></div><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You \
don't copy your Qt installation, PyQt (when build from sources) will <br>use it where it \
is. </blockquote><div><br></div><div>I guess you meant PyQt (when built from sources) will \
use the Qt installation from either path</div><div>or from the Qt folder in the target dir \
where PyQt has been installed. I can see pyqt </div><div>__init__.py looks like \
this:</div><div><br></div><blockquote style="margin:0px 0px 0px \
40px;border:none;padding:0px"><div>def find_qt():</div><div> import \
os</div><div><br></div><div> path = os.environ['PATH']</div><div><br></div><div> \
dll_dir = os.path.dirname(__file__) + '\\Qt\\bin'</div><div> if \
os.path.isfile(dll_dir + '\\Qt5Core.dll'):</div><div> path = dll_dir + \
';' + path</div><div> os.environ['PATH'] = path</div><div> \
else:</div><div> for dll_dir in path.split(';'):</div><div> \
if os.path.isfile(dll_dir + '\\Qt5Core.dll'):</div><div> \
break</div><div> else:</div><div> raise ImportError("unable to \
find Qt5Core.dll on PATH")</div><div><br></div><div> try:</div><div> \
os.add_dll_directory(dll_dir)</div><div> except AttributeError:</div><div> \
pass</div><div><br></div><div><br></div><div>find_qt()</div><div>del \
find_qt</div></blockquote><div><br></div><div>As a workaround I've decided to create a \
junction pointing out </div><div>to the Qt distribution used to build pyqt from sources, \
ie:</div><div><br></div><blockquote style="margin:0px 0px 0px \
40px;border:none;padding:0px"><div>(py364_32) \
d:\virtual_envs\py364_32\Lib\site-packages\PyQt5>mklink /j Qt \
d:\qt\5.13.0-394-g69ef6e8212</div><div>Junction created for Qt <<===>> \
d:\qt\5.13.0-394-g69ef6e8212</div></blockquote><div><br></div><div>But for some reason when I \
do `from PyQt5.Qt import *` I'll just get this <a \
href="https://dl.dropboxusercontent.com/s/cj9rf8mbm023rwf/2019-07-20_17-49-10.txt" \
target="_blank">content</a> where you can see there isn't any \
available</div><div>QApplication :(</div><div><br></div><div>And when doing `from \
PyQt5.QtWidgets import *` I'll get:</div><div><br></div><blockquote style="margin:0px 0px \
0px 40px;border:none;padding:0px"><div> from PyQt5.QtWidgets import \
*<br></div><div>ImportError: DLL load failed: The specified module could not be \
found.</div><div><br></div></blockquote>So I'm stuck at this point, could you \
advice?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 20, \
2019 at 4:34 PM BPL <<a href="mailto:spscener84@gmail.com" \
target="_blank">spscener84@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div \
dir="ltr">Florian,<div><br></div><div>Thanks to provide those wiki docs as well as the qt \
releasing mailing list, they're definitely</div><div>helpful indeed to make proper \
planning.</div><div><br></div><div>If I look in retrospective is funny though, that QTBUG-74492 \
is the first one I've ever been involved with, </div><div>this bug was opened in \
21.03.2019 and after few months passed nobody was working on it or they \
didn't</div><div>know what the problem was. I decided to spend some days bisecting the bug \
and finding the root cause </div><div>of the problem, thanks to that the author who introduced \
the bug in the first place could fix it properly in few days. In any case, </div><div>finding \
the issue was really tricky and the fix ended up to be quite "trivial" one. The moral \
of the story here is, </div><div>for something as trivial as this one you'll need to wait \
quite a lot of time to get</div><div>a proper release... and that's assuming you're \
interested enough to help Qt team to narrow it down. The </div><div>workload of Qt devs \
isn't small neither... which indicates there is room to optimize development in that \
company.</div><div><br></div><div>Bug opened in 21.03.2019 and official release with the fix \
delivered in 15.08.2019... That's quite a lot<br></div><div>of time to wait \
for...</div><div><br></div><div>Anyway, at this point a global view of how things work in both \
Qt & pyqt has become +/- clear, which is great so you</div><div>know what you can or \
can't expect.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On \
Sat, Jul 20, 2019 at 3:10 PM Florian Bruhin <<a href="mailto:me@the-compiler.org" \
target="_blank">me@the-compiler.org</a>> wrote:<br></div><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On \
Sat, Jul 20, 2019 at 02:53:29PM +0200, BPL wrote:<br> > Anyway... I'll try again to see \
if I can make it work but hopefully a new<br> > pyqt wheel with this annoying bug fix<br>
> <a href="https://bugreports.qt.io/browse/QTBUG-74492" rel="noreferrer" \
target="_blank">https://bugreports.qt.io/browse/QTBUG-74492</a><br> > will land soon at \
pypi, I've got some opengl tools in place where this<br> > glitch makes really annoying \
work with them, it's a really disturbing bug :/<br> <br>
As you can see in the bug report, the fix lands in Qt 5.12.5, 5.13.1 and 5.14.0.<br>
Via the Qt wiki, you can see when those are planned to be released:<br>
<br>
<a href="https://wiki.qt.io/Qt_5.12_Release" rel="noreferrer" \
target="_blank">https://wiki.qt.io/Qt_5.12_Release</a> (5.12.5: 27.08.2019)<br> <a \
href="https://wiki.qt.io/Qt_5.13_Release" rel="noreferrer" \
target="_blank">https://wiki.qt.io/Qt_5.13_Release</a> (5.13.1: 15.08.2019)<br> <a \
href="https://wiki.qt.io/Qt_5.14_Release" rel="noreferrer" \
target="_blank">https://wiki.qt.io/Qt_5.14_Release</a> (5.14.0: 26.11.2019)<br> <br>
After a new Qt is released, usually a couple of days afterwards, PyQt gets<br>
updated (might be a bit longer for new feature releases like 5.14 will be).<br>
So if you're okay with upgrading to Qt 5.13, you'll hopefully see an updated<br>
PyQt in a month or so.<br>
<br>
I'd also recommend subscribing to the Qt Releasing mailinglist - it's quite<br>
low-traffic, and you get announcement mails when Qt updates are released, or<br>
when there was a release team meeting (with the meeting minutes):<br>
<br>
<a href="https://lists.qt-project.org/listinfo/releasing" rel="noreferrer" \
target="_blank">https://lists.qt-project.org/listinfo/releasing</a><br> <br>
Florian<br>
<br>
-- <br>
<a href="https://www.qutebrowser.org" rel="noreferrer" \
target="_blank">https://www.qutebrowser.org</a> | <a href="mailto:me@the-compiler.org" \
target="_blank">me@the-compiler.org</a> (Mail/XMPP)<br>
GPG: 916E B0C8 FD55 A072 | <a href="https://the-compiler.org/pubkey.asc" rel="noreferrer" \
target="_blank">https://the-compiler.org/pubkey.asc</a><br>
I love long mails! | <a href="https://email.is-not-s.ms/" rel="noreferrer" \
target="_blank">https://email.is-not-s.ms/</a><br> </blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
[Attachment #6 (text/plain)]
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic