2017-09-23 2 views
0

Après avoir importé le module PyQt5 avec:Comment trouver Qt emplacement de la bibliothèque

from PyQt5 import QtWidgets 

je peux trouver où le module est simplement:

print QtWidgets 

impressions:

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

Mais Mis à part le module PyQt5, il y a une bibliothèque Qt. Cette bibliothèque Qt est un ensemble de fichiers binaires précompilés résidant ailleurs sur un disque. Leurs noms de fichiers contiennent généralement un mot "Qt5" dans un milieu, par exemple: libQt5Core.dylib, libQt5DesignerComponents.dylib ou libQt5Script.dylib.

Existe-t-il un moyen d'obtenir le chemin d'accès au fichier de cette bibliothèque Qt depuis Python après l'importation du module PyQt5? Comment savoir où Python recherche les fichiers de bibliothèque Qt nécessaires au module PyQt5?

Répondre

1

Des fichiers comme libQt5Core.dylib sont des bibliothèques partagées qui sont liées dynamiquement au moment de l'exécution. Lorsqu'un exécutable nécessitant de telles bibliothèques est créé, l'éditeur de liens au moment de la compilation enregistre simplement le nom de la bibliothèque et les routines fournies par l'application. C'est le travail du système d'exploitation d'effectuer la liaison dynamique lorsque l'application est exécutée.

Les systèmes Unix fournissent généralement un outil qui permet de déterminer les dépendances requises par un exécutable et de montrer où ils se trouvent actuellement sur le système. Sous Linux, cet outil est appelé ldd (Liste des dépendances dynamiques) et la commande équivalente sur OSX est otool -L. La sortie ressemble à ceci:

$ 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) 
    ... 

De Python, vous pouvez simplement utiliser le module subprocess pour exécuter la commande appropriée, puis analyser la sortie pour obtenir les informations dont vous avez besoin.