使用以下命令导入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.dylib
,libQt5DesignerComponents.dylib
或libQt5Script.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
模块运行适当的命令,然后解析输出以获取所需的信息。