如何查找Qt库位置

时间:2017-09-23 14:17:26

标签: python dll path pyqt pyqt5

使用以下命令导入PyQt5模块后

from PyQt5 import QtWidgets

我可以通过以下方式找到模块的位置:

print QtWidgets

打印:

<module 'PyQt5.QtWidgets' from '/usr/local/lib/python2.7/site-packages/PyQt5/QtWidgets.so'>

但除PyQt5模块外,还有一个Qt库。此Qt库是一组驻留在磁盘上其他位置的预编译二进制文件。他们的文件名通常包含一个单词&#34; Qt5&#34;在中间,例如:libQt5Core.dyliblibQt5DesignerComponents.dyliblibQt5Script.dylib

导入PyQt5模块后,有没有办法从Python内部获取此Qt库的文件路径?如何找出Python查找PyQt5模块所需的Qt库文件的位置?

1 个答案:

答案 0 :(得分:2)

libQt5Core.dylib之类的文件是在运行时动态链接的共享库。当创建需要这些库的可执行文件时,编译时链接器只记录库的名称及其提供的应用程序所需的任何例程。运行应用程序时,操作系统的任务是执行动态链接。

Unix系统通常提供一种工具,可以确定可执行文件所需的依赖关系,并显示它们当前在系统中的位置。在Linux上,此工具称为ldd(列出动态依赖关系),OSX上的等效命令为otool -L。输出看起来像这样:

$ ldd /usr/lib/python3.6/site-packages/PyQt5/QtCore.so
    linux-vdso.so.1 (0x00007ffd351e7000)
    libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007f1cdc1c5000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f1cdbe3e000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f1cdba87000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1cdb869000)
    ...

从Python中,您只需使用subprocess模块运行相应的命令,然后解析输出以获取所需的信息。