Le python path c'est quoi?
Le python path indique à python quels dossiers il doit prendre en compte pour sa recherche de modules. Vous pouvez voir cette liste de cette manière:
>>> import sys >>> sys.path ['/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Vous ne pouvez donc pas faire d'import de module si celui-ci ne se trouve pas dans ces dossiers.
Importer ses modules
Créons le dossier /home/olivier/test
, puis le package utils
dans ce dossier.
Dans ce package on crée un fichier func.py
avec une fonction donne_moi_ton_nom
:
func.py
# coding: utf-8 def donne_moi_ton_nom(): return "Olivier"
Essayons d'intégrer notre module depuis notre interpréteur python :
olivier@bigone:~$ python Python 2.7.6 (default, Mar 22 2019, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from utils.func import * Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named utils.func
Une erreur apparait: " Le module est introuvable
".
Le dossier courant
Il existe une première manière de régler ce problème: exécuter l'interpréteur dans le dossier parent du package :
olivier@bigone:~$ cd test/ olivier@bigone:~/test$ python Python 2.7.6 (default, Mar 22 2019, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from utils.func import * >>> donne_moi_ton_nom() 'Olivier'
Alors cela est possible parce que la python path inclu le dossier en cours.
Ajouter un dossier au PYTHONPATH
Une autre manière est d'ajouter le chemin /home/olivier/test
au PYTHONPATH . Pour cela, il vous faudra exécuter la commande suivante dans votre terminal:
olivier@bigone:~$ export PYTHONPATH=$PYTHONPATH:/home/olivier/test
Vérifions le PYTHONPATH dans l'interpréteur:
Python 2.7.6 (default, Mar 22 2019, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/home/olivier', '/home/olivier/test', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Parfait, le dossier est bien inclu. Le problème c'est que si vous fermez votre terminal et que vous retournez sur l'interprếteur, le dossier en question aura disparu du PYTHONPATH.
Ajouter un dossier au PYTHONPATH de manière permanente
Pour rendre cette action pérenne, il vous faudra éditer le fichier /home/olivier/.bashrc
et y ajouter la commande:
export PYTHONPATH=$PYTHONPATH:/home/olivier/test
Ainsi cette commande sera executée à chaque ouverture de terminal.
Ajouter un dossier au PYTHONPATH en python
Dernière méthode pour ajouter un dossier au PYTHONPATH: l'indiquer directement dans le code
>>> import sys >>> sys.path.insert(0, "/home/olivier/scripts")
Cette méthode ne marchera cependant que sur le script en cours.