Skip to content

Instantly share code, notes, and snippets.

@cybernar
Last active May 20, 2022 13:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cybernar/cab31614fc56fd1c749d3e58b5326fe8 to your computer and use it in GitHub Desktop.
Save cybernar/cab31614fc56fd1c749d3e58b5326fe8 to your computer and use it in GitHub Desktop.
Config snappy

Configuration de snappy sur Windows 10

Création d'un environnement virtuel avec conda

snappy requiert la version 3.6 de Python (or la dernière version de Python est plutôt 3.10). L'utilisation de conda, qui permet d'utiliser plusieurs versions de python sur un même poste, prend tout son sens.

Pour créer et activer un environnement virtuel :

conda create -n snap_env -c conda-forge python=3.6 mamba
conda activate snap_env

Noter le chemin d'accès de python.exe dans l'environnement créé : C:\Users\BernardC\miniconda3\envs\snap_env\python.exe

Installation de snap

Sur mon poste, snap 8.0.6 était déjà installé dans le dossier C:\snap\bin

Installation de maven

Voir ce lien : https://maven.apache.org/install.html pour l'installation de maven 3.8.5. Remarque : sur mon poste, un jdk v11 (adoptopenjdk) était déjà installé.

La variable d'environnement PATH est modifiée manuellement pour maven.

Vérification de l'installation :

C:\Users\BernardC>mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: C:\Apps\apache-maven-3.8.5
Java version: 11.0.11, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-11.0.11.9-hotspot
Default locale: fr_FR, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
C:\>echo %JAVA_HOME%
C:\Program Files\AdoptOpenJDK\jdk-11.0.11.9-hotspot\

Liens utiles

Configuration de snappy sur Windows 10

1. Création d'un environnement virtuel avec conda

snappy requiert la version 3.6 de Python (or la dernière version de Python est plutôt 3.10). L'utilisation de conda, qui permet d'utiliser plusieurs versions de python sur un même poste, prend tout son sens.

Pour créer et activer un environnement virtuel :

conda create -n snappy_env -c conda-forge python=3.6
conda activate snappy_env

Noter le chemin d'accès de python.exe dans l'environnement créé : C:\Users\BernardC\miniconda3\envs\snappy_env\python.exe

2. Installation de snap

Pendant l'installation de snap, il est recommandé de spécifier le chemin d'installation de Python.

Ici j'ai indiqué : C:\Users\BernardC\miniconda3\envs\snappy_env\python.exe (cf screenshot)

L'installateur crée un répertoire C:\Users\BernardC\.snap\snap-python\snappy qui contient le module snappy

3. Configuration Python

Pour importer le module snappy il faut que Python connaisse le chemin d'accès du module. Il est possible de modifier la variable d'environnement PYTHONPATH ou d'utiliser sys.path.append.

J'ai plutôt opté pour l'installation de snappy dans l'environnement snappy_env :

conda activate snap_env
cd C:\Users\BernardC\.snap\snap-python\snappy
python setup.py install

Pour plus de détails se reporter à la doc : https://senbox.atlassian.net/wiki/spaces/SNAP/pages/50855941/Configure+Python+to+use+the+SNAP-Python+snappy+interface

4. Tester la configuration

Lancer l'interprétateur Python pour tester le bon fonctionnement. Dans l'interpréteur, tapez :

>>> from snappy import ProductIO

Sur mon poste, ça ne fonctionnait pas ! J'obtiens une erreur de ce type :

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\BernardC\miniconda3\envs\snap_env\lib\site-packages\snappy\__init__.py", line 64, in <module>
    jpyutil.preload_jvm_dll()
  File "C:\Users\BernardC\miniconda3\envs\snap_env\lib\site-packages\snappy\jpyutil.py", line 344, in preload_jvm_dll
    return ctypes.CDLL(jvm_dll_file, mode=ctypes.RTLD_GLOBAL)
  File "C:\Users\BernardC\miniconda3\envs\snap_env\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] Le module spécifié est introuvable

Cause de l'erreur identifiée ici : https://forum.step.esa.int/t/sen-et-problem-with-3-3-5-estimate-leaf-reflectance-and-transmittance/26230/15?u=cybernar

J'ai résolu le problème en installant Microsoft Visual C++ 2010 SP1 Redistributable Package (x64) (lien pour télécharger depuis Microsoft sur le forum ci-dessus).

Je relance l'interprétateur Python et :

>>> from snappy import ProductIO

Maintenant j'obtiens :

INFO: org.esa.s2tbx.dataio.gdal.GDALVersion: GDAL not found on system. Internal GDAL 3.0.0 from distribution will be used. (f1)
INFO: org.esa.s2tbx.dataio.gdal.GDALVersion: Internal GDAL 3.0.0 set to be used by SNAP.
INFO: org.esa.snap.core.gpf.operators.tooladapter.ToolAdapterIO: Initializing external tool adapters
INFO: org.esa.snap.core.util.EngineVersionCheckActivator: Please check regularly for new updates for the best SNAP experience.

Conclusion.

  • le module snappy contient le module jpy, qui dépend de la DLL jvm.dll, qui dépend de la DLL MSVCR100.dll. Dans le cas présent c'est cette dernière DLL qui manquait
  • il est théoriquement possible d'installer snappy après avoir installé snap grâce à la commande snappy-conf mais ça ne fonctionnait pas chez moi ... peut-être à cause de la DLL manquante.
  • il est théoriquement possible de compiler soi-même jpy pour la compatibilité avec Python 3.8, cf https://github.com/jpy-consortium/jpy
  • en cas de réinstallation de snap, attention au fichier C:\Users\BernardC.snap\snap-python\snappy\jpyconfig.py qui contient des chemins d'accès aux fichiers de snap, notamment au JRE (Java Runtime Environment) inclus dans snap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment