Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comportement d'imports incompréhensibles

0 votes

J'essaye en vain depuis quelques jours de faire des imports de modules persos.
J'ai un environnement virtuel dans lequel je souhaite importer des modules persos situés dans mon /home/ .
Pour cela j'ai fait un fichier "module.pth" situé dans le repertoire site-packages du venv dont le contenu est le suivant

/home/utilisateur/monmodule

Lorsque je fait la commande ci-dessous, le module est bien présent dans le path:

$: python -c "import sys; print(sys.path)"
$: ['', '/srv/.venv3.6/lib/python36.zip', '/srv/.venv3.6/lib/python3.6', '/srv/.venv3.6/lib/python3.6/lib-dynload', '/usr/lib/python3.6', '/srv/.venv3.6/lib/python3.6/site-packages', '/home/utilisateur/monmodule']

Lorsque je suis dans la console python:

>>import monmodule
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'monmodule'

Lorsque je me met au-dessus du répertoire monmodule et que je lance la console python:

 $: python
 Python 3.6.0 (default, Sep 13 2018, 12:07:07) 
 [GCC 6.3.0 20170516] on linux
 Type "help", "copyright", "credits" or "license" for more information.
  >>> import monmodule

Ce qui est le comportement normal...J'ai relu des articles là-dessus mais je bloque.

Merci pour vos retours

demandé 11-Avr-2019 par torrak (172 points)

Que renvoie ls -lR /home/utilisateur/monmodule ?

Une réponse arrive quand elle sera validé, mais pour faire court python va chercher à l'intérieur des dossiers du path, donc à l'intérieur du dossier monmodule. Fait un path qui pointe vers le dossier d'avant et ce sera bon (dans ton cas /home/utilisateur)

3 Réponses

0 votes

as tu mis le fichier init.py dans ton module?

répondu 7-Aou-2019 par Bidochon
0 votes

En spécifiant /home/utilisateur/monmodule comme chemin python va regarder à l'intérieur du dossier monmodule. Donc quand tu ouvre une console python et que tu va faire un import python regardera à l'interieur (pour tester si ton path est bon tu dois ouvrir une console python à l'interieur du dossier de ton path).

Si tu veux pouvoir importer le module monmodule il faut:
- soit spécifier le chemin /home/utilisateur mais en faisant celà tu va permettre d'importer tout ce qu'il y a dans le dossier utilisateur
- soit faire un dossier /home/utilisateurs/mesmodules/, mettre /home/utilisateur/mesmodules dans ton module.pth. Tu pourra alors mettre monmodule (et tous les autres modules que tu veux) à l'interieur de ce dossier.

PS: Merci de m'avoir fait decouvrir le fichier module.pth cela m'évitera de polluer mon dossier sitepackage

répondu 7-Aou-2019 par Fomys (146 points)
+2 votes

sys.path doit lister les dossiers racines et non pas les dossiers des modules.

Il faudrait rajouter un niveau d’arborescence, par exemple :

/home/utilisateur/mesmodules/monmodule/

Et dans sys.path mettre seulement la racine (pas les modules) :

'/home/utilisateur/mesmodules'
répondu 7-Aou-2019 par Melnofil (132 points)
...