Librairies Python non chargée lors du lancement d'un script

Bonjour,

j'ai un script python que j'ai fait tourner plusieurs fois les dernières semaines pour analyser des données, et jusqu'ici tout allait bien.
Je veux actuellement le faire tourner une nouvelle fois (sur un jeu de données exactement similaire aux précédents) en le soumettant à sbtach comme d'habitude, mais cette fois-ci les bibliothèques python ne sont pas chargées correctement et j'avais une erreur dès le premier import (sur des modules de base comme pandas ou requests) alors que je n'avais jamais eu cette erreur avant.
J'ai fait tourner un script vide ou je chargeais juste les bibliothèques et je me suis rendu compte que l'erreur survenait également mais seulement si je chargeais les mêmes modules dans le script batch en amont.

Voici les requirements que je demande :

#SBATCH --partition=long
#SBATCH --nodes=5
#SBATCH --cpus-per-task=5
#SBATCH --mem-per-cpu=50GB
#SBATCH --account=ecoli_dated_cluster_phylogenies

Les modules que je charge en amont

module load python/3.9
module load iqtree/2.0.3
module load clustalo/1.2.4
module load sqlite/3.30.1

Et mon script python lui-même

python3 mutation_scores.py

L'erreur en question :

Traceback (most recent call last):
File "mutation_scores.py", line 2, in
import pandas as pd
ModuleNotFoundError: No module named 'pandas'

Une chose que j'ai remarqué : si je lance mon script vide sans avoir chargé sqlite/3.30.1 je n'ai pas d'erreur.
J'arrive actuellement à le faire tourner sans avoir chargé sqlite en amont car il me semble que sqlite est également une bibliothèque de Python, mais je trouve ça très étrange que le fait d'avoir chargé un module supplémentaire fasse planter mon script alors qu'il fonctionnait très bien jusqu'à présent.

Pour l'instant je n'ai pas d'erreur malgré le fait que la version de sqlite chargée doit être différente, je vous tiens au courrant.

Toutefois, auriez-vous une idée de ce qui peut cause ce problème ? Y a t il eu une mise à jour de sqlite sur le cluster récemment ?

Bien à vous et désolé pour le dérangement,
Manolo Mischler

Bonjour,

Le module sqlite/3.30.1 vient avec sa version de python (python3.8).
Si le module est chargé en dernier, c'est cette version qui sera utilisé si on fait appel à "python"
Je pense que l'erreur vient simplement de là (même si je ne vois pas pourquoi cela aurait marché avant).

L'ordre a donc son importance et vous conseille plutôt de charger python/3.9 en dernier.

module load iqtree/2.0.3
module load python/3.9

Ou plus proprement de ne charger que le module qu'au moment de leur utilisation (et de les décharger par la suite):

module load python/3.9
python <...>

module purge
module load iqtree/2.0.3
iqtree <...>

module purge
module load clustalo/1.2.4
clustalo <...>

module purge
module load sqlite/3.30.1
sqlite <...>

Merci beaucoup pour cette réponse, je vais tenter ça pour la prochaine fois

Le script python fait appel aux logiciels iqtree et clustal omega à travers le module subprocess et lance également des requêtes SQL, c'est pour cela que je dois bien choisir quelle version je charge en amont.

Merci encore et bonne journée