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

from PyQt5 import QtWidgets


我可以简单地找到模块的位置:

print QtWidgets


印刷品:

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


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

导入PyQt5模块后,是否有办法从Python内部获取此Qt库的文件路径?如何找出Python在哪里寻找PyQt5模块所需的Qt库文件?

最佳答案

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模块运行适当的命令,然后解析输出以获取所需的信息。

10-07 15:10