Bonjour,
Je suis en windows 10.
Je veux réaliser un programme en Python (2.7.5) en utilisant des bibliothèques Python (2.7.5) du logiciel QGIS 2.18, programme utilisable sur ce système d'exploitation.
Je n'arrive pas à importer ces bibliothèques.
L'IHM de QGIS propose un console Python. Dans cette console, les imports se déroulent sans difficulté. Par contre, il y a des erreurs quand j'essaye d'effectuer ces imports avec l'émulateur de python.
J'ai effectué un petit programme me permettant de récupérer le contenu de sys.path de la console de QGIS et de l'importer dans le sys.path de l'émulateur après l'avoir vider de son contenu.
Le résultat est le suivant :
Après cela j'essaye d'effectuer des imports :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 contenu de sys.path taille de sys.path : 7 liste de sys.path C:\QGIS\code_python C:\Program Files\QGIS 2.18\bin\python27.zip C:\QGIS\code_python\DLLs C:\QGIS\code_python\lib C:\QGIS\code_python\lib\plat-win C:\QGIS\code_python\lib\lib-tk C:\Program Files\QGIS 2.18\bin effacement du contenu de sys.path taille de sys.path : 0 import de sys.path de la console QGIS dans ce sys.path taille de sys.path : 33 liste de sys.path C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python/plugins\processing C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python C:/Users/geomajic/.qgis2/python C:/Users/geomajic/.qgis2/python/plugins C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python/plugins C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\matplotlib-1.3.1-py2.7-win-amd64.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\nose-1.3.3-py2.7.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\tornado-4.0.1-py2.7-win-amd64.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\backports.ssl_match_hostname-3.4.0.2-py2.7.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\certifi-14.05.14-py2.7.egg C:\PROGRA~1\QGIS2~1.18\bin\python27.zip C:\PROGRA~1\QGIS2~1.18\apps\Python27\DLLs C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\plat-win C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\lib-tk C:\PROGRA~1\QGIS2~1.18\bin C:\PROGRA~1\QGIS2~1.18\apps\Python27 C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\PIL C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\jinja2-2.7.2-py2.7.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\markupsafe-0.23-py2.7-win-amd64.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\pytz-2012j-py2.7.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\win32 C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\win32\lib C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\Pythonwin C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\Shapely-1.2.18-py2.7-win-amd64.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\wx-2.8-msw-unicode C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\xlrd-0.9.2-py2.7.egg C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\xlwt-0.7.5-py2.7.egg C:/Users/geomajic/.qgis2//python C:\Users\geomajic\.qgis2\python\plugins\CEERAT_Regroupement\outils C:\Users\geomajic\.qgis2\python\plugins\opeNoise\tools C:\Users\geomajic\.qgis2\python\plugins
Je ne comprends pas pour quelle raison j'ai cette erreur qui n'apparait pas dans la console de QGIS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 lancement des imports import PyQt from PyQt4.QtGui import * from PyQt4.QtCore import * import qgis.PyQt Traceback (most recent call last): File "I_qgis.py", line 56, in <module> import qgis.PyQt File "C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python\qgis\__init__.py", line 26, in <module> from qgis.PyQt import QtCore File "C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python\qgis\PyQt\QtCore.py", line 28, in <module> sip.setapi(api, 2) #Remplacer sip.setapi(api, 2) par sip.setapi(api, 1) le 22 decembre ValueError: API 'QDate' has already been set to version 1
Je modifie la ligne 28 du module QtCore (je n'ai alors plus accès à la console de QGIS) et j'obtiens
Cette erreur est surprenante car, dans la console du QGIS, il me propose le module QPyNullVariant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 lancement des imports import PyQt from PyQt4.QtGui import * from PyQt4.QtCore import * import qgis.PyQt Traceback (most recent call last): File "I_qgis.py", line 56, in <module> import qgis.PyQt File "C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python\qgis\__init__.py", line 26, in <module> from qgis.PyQt import QtCore File "C:/PROGRA~1/QGIS2~1.18/apps/qgis/./python\qgis\PyQt\QtCore.py", line 37, in <module> from PyQt4.QtCore import QPyNullVariant ImportError: cannot import name QPyNullVariant
Je me suis demandé si les deux consoles utilisaient le même fichier. Dans la console de qgis j'ai effectué
Pour m'assurer que l'émulateur de Python utilise également ce fichier, j'ai modifier son nom en QtCore0.pyd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Print PyQt4.QtCore.__file__ C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\PyQt4\QtCore.pyd
J'ai relancé mon programme et
A priori, c'est donc le même fichier QtCore.pyw. Pour le confirmer, j'ai lancé une recherche dans l'explorateur de fichier de QtCore.pwd dans le répertoire QGIS 2.18.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 lancement des imports import PyQt from PyQt4.QtCore import * Traceback (most recent call last): File "I_qgis.py", line 52, in <module> from PyQt4.QtCore import * ImportError: No module named QtCore
Je ne comprend donc pas pourquoi l'émulateur Python ne trouve pas le module QPyNullVariant. Est ce que quelqu'un a une idée?
Merci
Partager