banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 smile

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 wink )


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 smile
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

Sylvain M. a écrit:

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 big_smile


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

Sylvain M. a écrit:

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

 

Pied de page des forums

Powered by FluxBB