Python3 pptx and pip install

Bonjour,

Je travaille sur un script sous python pour automatiser des rapports powerpoint. Il marchait hier sans problèmes, mais maintenant que j'essaie de le relancer j'ai l'erreur
from pptx import Presentation
ModuleNotFoundError: No module named 'pptx'

Je lance mon script après avoir fait srun --pty bash pour ouvrir une session intéractive.

Je ne peux plus installer ce module (que j'avais installer la veille de mémoire) car je ne peux plus utiliser pip install (introuvable) et je ne peux pas non plus l'installer.

Est-ce qu'il y a une raison à cela ? Je ne pense pas que ce sera le seul module qui posera problèmes.

Merci pour votre aide

Bonjour,

Les modules python dépendant de la version python utilisé.
Je pense donc que vous utilisez simplement une version différente.

Quelles commandes avez-vous utilisées ?

Bonjour,
Simplement python3 Create_ppxt_presentation_DownstreamAnalysis.py (même commande utilisée qu'hier)

Vos packages ont été installés pour la version 3.12

$ ls /shared/home/rgoulancourt2/.local/lib/python3.12/site-packages/
pdf2image  pdf2image-1.17.0.dist-info  pptx  python_pptx-1.0.2.dist-info  xlsxwriter  XlsxWriter-3.2.2.dist-info

Par défaut, il existe un python installé avec le système, mais ce python est en version 3.8:

$ python3 --version
Python 3.8.10

Pour utiliser la version 3.12 que vous avez utilisé pour installer les package python, il faut la charger au préalable:

$ module load python/3.12 
$ python3 --version
Python 3.12.4

En effet si je load la version 3.12 cela marche. Merci !

Est-il possible d'avoir pdf2image ? Car je le voit installé mais j'ai l'impression que même sous python 3.12 mon script ne le trouve pas.

Voici l'erreur qui se produit lorsque j'appelle ce module :
Traceback (most recent call last):
File "/shared/home/rgoulancourt2/.local/lib/python3.12/site-packages/pdf2image/pdf2image.py", line 581, in pdfinfo_from_path
proc = Popen(command, env=env, stdout=PIPE, stderr=PIPE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/shared/ifbstor1/software/miniconda/envs/python-3.12/lib/python3.12/subprocess.py", line 1026, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "/shared/ifbstor1/software/miniconda/envs/python-3.12/lib/python3.12/subprocess.py", line 1955, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'pdfinfo'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/shared/ifbstor1/projects/human_msc_rnaseq/2025-01-22_MSC_RNA-seq/R_analysis/Create_ppxt_presentation_DownstreamAnalysis.py", line 167, in
images = convert_from_path(boxplot_pdf, dpi=300)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/shared/home/rgoulancourt2/.local/lib/python3.12/site-packages/pdf2image/pdf2image.py", line 127, in convert_from_path
page_count = pdfinfo_from_path(
^^^^^^^^^^^^^^^^^^
File "/shared/home/rgoulancourt2/.local/lib/python3.12/site-packages/pdf2image/pdf2image.py", line 607, in pdfinfo_from_path
raise PDFInfoNotInstalledError(
pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

J'ai essayé d'installer poppler via apt mais je n'ai pas les droits et il fail lorsque je l'installe sous conda. Il ne s'installe apparemment pas sous pip

Merci pour votre aide

Poppler est bien dans mon dossier de packages pourtant lorsque je fais un which pdfinfo cela ne retourne rien. Pouvez-vous m'indiquer comment le rajouter à mon path s'il ne trouve pas l'exécutable ?
Merci

Bonjour @rgoulancourt2,

La commande which permet de retourner le chemin d'un exécutable localisé dans votre PATH, ce qui n'est pas le cas des bibliothèques.

Extrait du manuel de la commande which :

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in a strictly POSIX-conformant shell. It does this by searching the PATH for executable files matching the names of the arguments. It does not canonicalize path names.

La commande find permet d'afficher les chemins d'un fichier et/ou de toutes les occurrences possibles si celui-ci se trouve dans le répertoire.

Par exemple :

ls -l /shared/home/jdoe/lib/R/R-4.4.1/library/CytoTRACE2
total 32
-rw-rw-r-- 1 jdoe jdoe 1645 Jan 24 11:57 DESCRIPTION
drwxrwxr-x 2 jdoe jdoe 4096 Jan 24 11:57 extdata/
drwxrwxr-x 2 jdoe jdoe 4096 Jan 24 11:57 help/
drwxrwxr-x 2 jdoe jdoe 4096 Jan 24 11:57 html/
-rw-rw-r-- 1 jdoe jdoe 1455 Jan 24 11:57 INDEX
drwxrwxr-x 2 jdoe jdoe 4096 Jan 24 11:57 Meta/
-rw-rw-r-- 1 jdoe jdoe 1141 Jan 24 11:57 NAMESPACE
drwxrwxr-x 2 jdoe jdoe 4096 Jan 24 11:57 R/

ls -l /shared/home/jdoe/lib/R/R-4.4.1/library/CytoTRACE2/R/
total 72
-rw-rw-r-- 1 jdoe jdoe  1058 Jan 24 11:57 CytoTRACE2
-rw-rw-r-- 1 jdoe jdoe 59133 Jan 24 11:57 CytoTRACE2.rdb
-rw-rw-r-- 1 jdoe jdoe   504 Jan 24 11:57 CytoTRACE2.rdx

echo $HOME
/shared/home/jdoe

find $HOME -name CytoTRACE2
/shared/home/jdoe/lib/R/R-4.4.1/library/CytoTRACE2
/shared/home/jdoe/lib/R/R-4.4.1/library/CytoTRACE2/R/CytoTRACE2

Les accès aux bibliothèques des langages comme Python sont gérés par d'autres variables d'environnements. Dans le cas de Python, il s'agit de la variable PYTHONPATH. Son contenu peut être affiché dans le prompt de Python en chargeant le module sys et en affichant le résultat de la commande sys.path.
Par défaut, la version 3.8.10 est installée sur le cluster et, si aucun module n'est chargé, voici ce qu'affiche cette commande :

which python3 && python3 --version
/usr/bin/python3
Python 3.8.10

python3 -c "import sys ; print(sys.path)"
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']

Si vous installez des bibliothèques dans votre Home, il faut que vous ajoutiez le chemin du répertoire contenant les fichiers des bibliothèques à cette variable (ici, des bibliothèques ont été installées dans le répertoire /shared/home/jdoe/lib/python/python-3.8.10/site-packages):

export PYTHONPATH="/shared/home/jdoe/lib/python/python-3.8.10/site-packages;$PYTHONPATH"

python3 -c "import sys ; print(sys.path)"
['', '/shared/home/jdoe/lib/python/python-3.8.10/site-packages;', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']

ATTENTION ! Pensez à bien ajouter la variable $PYTHONPATH à la fin, afin de conserver les chemins par défaut dans votre liste.

Ainsi, dans votre script Bash :

#!/bin/bash

## Here, your SLURM options
## ...

## Modules load
module load python/3.12

## Set your Python Environment
MY_PYTHON_LIB="/shared/home/jdoe/lib/python/python-3.12/site-packages"
export PYTHONPATH="$MY_PYTHON_LIB:$PYTHONPATH"

## Call your scripts
python3 my-python-script.py [-options]
...

Bonne journée,

Bonjour,

Je vais tester et vous remercie,

Bonne journée
Rebecca

Bonjour,

Voici le code que je lance via sbatch :

#!/bin/bash

#SBATCH --job-name=pptxDA # job name in the job queue
#SBATCH --output=pptxDA%j.out # Log file of execution
#SBATCH --error=pptxDA%j.err # Error log file

module purge
module load python/3.12

MY_PYTHON_LIB="/shared/home/rgoulancourt2/.local/lib/python3.12/site-packages/"
export PYTHONPATH="$MY_PYTHON_LIB;$PYTHONPATH"

python3 Create_ppxt_presentation_DownstreamAnalysis.py

J'ai bien exporté mon chemin avec mes librairies installées mais j'obtiens le même problème.

Sinon est-ce que c'est possible d'installer poppler dans /shared/ifbstor1/software/miniconda/envs/python-3.12/lib/python3.12/site-packages ? Car j'ai l'impression que c'est là que tous les packages sont.

Je vous remercie encore pour votre aide,
Rebecca

Pour ajouter poppler, il faut l'installer.
Soit en suivant les instructions de https://poppler.freedesktop.org/, soit via conda (plus simple): Poppler | Anaconda.org.

Lorsque j'installe via conda (peut importe la ligne de commande utilisée parmis celles ci-dessous) :

L'installation se fait kill :
/shared/ifbstor1/software/miniconda/lib/python3.9/site-packages/conda_package_streaming/package_streaming.py:25: UserWarning: zstandard could not be imported. Running without .conda support.
warnings.warn("zstandard could not be imported. Running without .conda support.")
/shared/ifbstor1/software/miniconda/lib/python3.9/site-packages/conda_package_handling/api.py:29: UserWarning: Install zstandard Python bindings for .conda support
_warnings.warn("Install zstandard Python bindings for .conda support")
Collecting package metadata (repodata.json): \ Killed

Mais si je veux utiliser la première solution je ne sais pas si j'ai les droits pour l'installer dans /shared/ifbstor1/software/miniconda/envs/python-3.12/lib/python3.12/site-packages

Y a-t-il une autre solution ?