使用以下命令导入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.dylib
,libQt5DesignerComponents.dylib
或libQt5Script.dylib
。
导入PyQt5模块后,有没有办法从Python内部获取此Qt库的文件路径?如何找出Python查找PyQt5模块所需的Qt库文件的位置?
答案 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
模块运行相应的命令,然后解析输出以获取所需的信息。