Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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 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 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 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 par Melnofil (132 points)
...