#1 Fri 10 December 2021 14:57
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Python et Spatialite
Salut à tous
Je fais mes premiers pas avec Python et je tente de manipuler des données dans une base Spatialite.
Pas de souci avec la librairie sqlite3 pour gérer les données en SQL non spatial (SQLite).
Mais j'aimerais maintenant manipuler des données spatiales.
Des exemples que j'ai trouvés (ici par exemple), il faudrait charger l'extension comme ceci :
Code:
connR = sqlite3.connect(':memory:') connR.enable_load_extension(True) #now we can load the extension # depending on your OS and sqlite/spatialite version you might need to add # '.so' (Linux) or '.dll' (Windows) to the extension name #mod_spatialite (recommended) connR.execute('SELECT load_extension("mod_spatialite")') connR.execute('SELECT InitSpatialMetaData(1);') # libspatialite connR.execute('SELECT load_extension("libspatialite")') connR.execute('SELECT InitSpatialMetaData();')
Mais j'obtiens ce message d'erreur :
Code:
connR.execute('SELECT load_extension("mod_spatialite")') sqlite3.OperationalError: Le module spécifié est introuvable.
(que ce soit avec #mod_spatialite ou # libspatialite )
J'ai bien vu cet échange qui semble relatif au problème, mais j'ai beau avoir téléchargé les dernières DLL dans les répertoires*, j'ai toujours les messages d'erreur liés au module introuvable.
Est-ce que quelqu'un serait à l'aise sur cette thématique, et pourrait m'aider ?
Merci à lui/elle !
* répertoires :
DLL de "mod_spatialite-5.0.1-win-amd64" dans "C:\Windows\System32\mod_spatialite-5.0.1-win-amd64\"
Dernier "sqlite3.dll" dans "C:\Users\monuser\AppData\Local\Programs\Python\Python39\DLLs\"
Dernière modification par Sylvain M. (Fri 10 December 2021 15:00)
Sylvain M.
Hors ligne
#2 Fri 10 December 2021 15:18
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
Peut-être que, plutôt que d'utiliser ma version de Python installée dans "C:\Users\monuser\AppData\Local\Programs\Python\Python39", je pourrais utiliser la version de Python de QGis, située dans "C:\OSGeo4W\bin" ?
Mes scripts sont dans des fichiers "nomdefichier.py".
Savez-vous comment je peux préciser la version de Python à utiliser dans un script ?
(que je lance depuis IDLE, mais il y a peut-être d'autres manières de faire)
Sylvain M.
Hors ligne
#3 Mon 13 December 2021 08:31
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: Python et Spatialite
Salut Sylvain,
Si le but est de faire tes premiers pas avec python et spatialite, le mieux est de passer par la console python de qgis.
L'environnement est déjà configuré correctement.
Hors ligne
#4 Mon 13 December 2021 08:51
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
le mieux est de passer par la console python de qgis.
Merci pour le conseil, et effectivement je vais explorer aussi cette voie que je ne connais pas encore.
Mais dans l'idéal, j'aimerais pouvoir exécuter mes scripts de manière autonome, sans avoir à lancer QGis.
Sylvain M.
Hors ligne
#5 Tue 14 December 2021 16:27
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Python et Spatialite
Bonjour,
Heu le commentaire au dessus du code dit pas d'ajouter l'extension (dll ou so) de spatialite ?
#now we can load the extension
# depending on your OS and sqlite/spatialite version you might need to add
# '.so' (Linux) or '.dll' (Windows) to the extension name
style connR.execute('SELECT load_extension("libspatialite.dll")')
Nicolas
Hors ligne
#6 Wed 15 December 2021 16:58
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
Merci Nicolas de te pencher sur le pb.
J'ai essayé avec le .DLL à la fin, mais toujours pareil :
Code:
sqlite3.OperationalError: Le module spécifié est introuvable.
Idem pour "libspatialite.dll" ou "mod_spatialite.dll"
:-/
Sylvain M.
Hors ligne
#7 Wed 15 December 2021 17:43
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
Bon, en tout cas, depuis QGis, ça fonctionne bien comme ça :
Code:
import sqlite3 connR = sqlite3.connect(r'D:\SIG\data\mabase.sqlite') connR.enable_load_extension(True) # libspatialite connR.execute('SELECT load_extension("mod_spatialite")') connR.execute('SELECT InitSpatialMetaData();') curR = connR.cursor() curR.execute(''' SELECT * FROM matable ''')
Mais comme je voulais executer mes scripts sans avoir à lancer QGis, c'est dommage de devoir lancer QGis pour utiliser le terminal
Une idée pour lancer la version de Python de QGis en dehors de QGis ? (quand on a une autre version de Python sur son PC Windows)
Dernière modification par Sylvain M. (Wed 15 December 2021 17:44)
Sylvain M.
Hors ligne
#8 Wed 15 December 2021 18:33
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Python et Spatialite
Bonsoir,
Il faut surement copier les dll spatialite dans un répertoire qui est dans la variable d'environnement PATH, ou ajouter le répertoire C:\Windows\System32\mod_spatialite-5.0.1-win-amd64\ a la variable PATH.
Le test fait chez moi:
• décompression de spatialite dans le répertoire C:\Users\Nicolas\AppData\Local\Programs\Python\Python310
• Ajout de ce répertoire à la variable système PATH (à tester dans une CMD windows avec echo %PATH%)
• Execution du code python donné dans votre exemple (https://gis.stackexchange.com/questions … hon-script)
• spatialite est bien chargée (sans le .dll à la fin )
Nicolas
Dernière modification par Nicolas Ribot (Wed 15 December 2021 18:40)
Hors ligne
#9 Thu 16 December 2021 09:10
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
Merci Nicolas d'avoir fait ces tests
Juste 2 précisions :
Le test fait chez moi:
• décompression de spatialite dans le répertoire C:\Users\Nicolas\AppData\Local\Programs\Python\Python310
• Ajout de ce répertoire à la variable système PATH (à tester dans une CMD windows avec echo %PATH%)
- Tu décompresses dans un sous répertoire de "Python310" ou à la racine ? (moi, j'avais mis dans le sous-répertoire "DLLs" existant)
- Tu ajoutes l'éventuel sous-répertoire au PATH, ou uniquement la racine ? (moi, le "C:\Users\monuser\AppData\Local\Programs\Python\Python39" est bien dans le PATH, mais pas les sous répertoires)
Dernière modification par Sylvain M. (Thu 16 December 2021 09:10)
Sylvain M.
Hors ligne
#10 Thu 16 December 2021 10:12
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Python et Spatialite
Bonjour,
A la racine de Python310 directement: en le mettant dans le sous rep DLLs, ca n'a pas marché (extension chargée mais symbole non trouvé dans une DLL geos)
J'ai Python310 et Python310/scripts dans le path, mais pas tous les sous repertoires de l'installation python
Nicolas
Hors ligne
#11 Thu 16 December 2021 11:57
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: Python et Spatialite
Mais comme je voulais executer mes scripts sans avoir à lancer QGis, c'est dommage de devoir lancer QGis pour utiliser le terminal
Une idée pour lancer la version de Python de QGis en dehors de QGis ? (quand on a une autre version de Python sur son PC Windows)
Cela ne répond pas forcément à ta requête de base mais tu as possibilité de lancer des scripts pythons grâce à qgis sans "ouvrir" QGIS
si dans le shell osgeo4w, tu fais qgis --help
il y a une option qui te permet d'exécuter du code python.
Code:
qgis --code mon_script_python.py
Hors ligne
#12 Thu 16 December 2021 12:53
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
Super, merci pour cette info.
Mais si je lance le shell (OSGeo4W.bat dans C:\OSGeo4W), j'ai ce message :
Code:
Code:
C:\OSGeo4W>qgis --help 'qgis' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
C'est pourtant bien ça, le Shell ?
Sylvain M.
Hors ligne
#13 Thu 16 December 2021 13:28
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: Python et Spatialite
En tout cas, merci Nicolas : en mettant les DLL de Spatialite directement à la racine de mon répertoire Python, les scripts fonctionnent très bien
Sylvain M.
Hors ligne
#14 Thu 16 December 2021 13:47
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: Python et Spatialite
Super, merci pour cette info.
Mais si je lance le shell (OSGeo4W.bat dans C:\OSGeo4W), j'ai ce message :
Code:Code:
C:\OSGeo4W>qgis --help 'qgis' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.C'est pourtant bien ça, le Shell ?
sur windows c'est probablement qgis.bat ou qgis-ltr.bat
Hors ligne