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 :
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
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
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 ne comprends pas pour quelle raison j'ai cette erreur qui n'apparait pas dans la console de QGIS.
Je modifie la ligne 28 du module QtCore (je n'ai alors plus accès à la console de QGIS) et j'obtiens
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
Cette erreur est surprenante car, dans la console du QGIS, il me propose le module QPyNullVariant.

Nom : QPyNullVariant.png
Affichages : 414
Taille : 13,2 Ko

Je me suis demandé si les deux consoles utilisaient le même fichier. Dans la console de qgis j'ai effectué
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
Pour m'assurer que l'émulateur de Python utilise également ce fichier, j'ai modifier son nom en QtCore0.pyd.
J'ai relancé mon programme et
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
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.
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