Bonjour, j'ai une structure de fichier comme celle-ci
Folder
Common
foo1.py
TestFolder
foo2.py
Je veux importer dans foo2.py foo1.py. J'ai essayé mais ça ne marche pas sur Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Comment python trouve ses modules
Strictement pris, un module est un seul fichier python, tandis qu'un package est un dossier contenant les fichiers python, accompagnés d'un fichier (pouvant être vide) nommé __init__.py
, pour indiquer à python qu'il s'agit d'un package permettant d'importer des modules. Dans les deux cas, les modules ont besoin de leur extension .py
, mais leur importation se fait sans (voir plus bas).
Par défaut, Python recherche ses modules et packages dans $PYTHONPATH
.
Pour savoir ce qui est inclus dans $ PYTHONPATH, exécutez le code suivant dans python (3):
import sys
print(sys.path)
Comment ajouter un répertoire
Occasionnellement
À partir d'un fichier python, vous pouvez ajouter occasionnellement des chemins d'accès au chemin d'accès par défaut en ajoutant les lignes suivantes dans la section d'en-tête de votre application ou script python:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Par exemple:
si j'ai un dossier: /home/myname/pythonfiles
et que je veux importer le fichier module_1.py
, situé dans ce répertoire, j'ajoute ceci à la section d'en-tête de mon code:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Et je peux simplement importer le fichier module_1.py
en:
import module_1
Lorsque je crée un package et que je veux importer un ou plusieurs modules du package, je dois créer un dossier dans $PYTHONPATH
, contenant les modules, accompagné de un fichier (peut être vide) appelé __init__.py
Par exemple:
Pour importer depuis un paquet (dossier) appelé my_package
dans /home/myname/pythonfiles
, ajoutez le chemin /home/myname/pythonfiles
à votre $PYTHONPATH
, comme dans l'exemple 1, et importez le module appelé module_2.py
(à l'intérieur du dossier du paquet) simplement avec: `
from <packagename> import module_2
Ajout permanent de répertoires à $PYTHONPATH
:
Ajoutez la ligne suivante à votre fichier ~/.profile
.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
sous-répertoires
Dans un paquet, les sous-répertoires ne sont pas inclus simplement comme ça; vous devez "chaîner" les répertoires. Pour importer un module module_3.py
, dans le dossier subfolder
dans le dossier packagename
name__:
import packagename.subfolder.module_3
Étant donné que tous les sous-dossiers du paquet incluent leur propre fichier __init__.py
.
Lorsqu'un module est dans le même répertoire que le script ou l'application
Il n'est pas nécessaire d'insérer le chemin d'accès à un module lorsqu'il se trouve dans le même répertoire que le script ou l'application, il est automatiquement ajouté.
Exemple:
Si j'ai un dossier contenant script.py
et module.py
, je peux simplement importer le module en:
import module
La manière correcte d'utiliser l'importation relative est la suivante:
from ..Common import foo1
Et vous avez également besoin d'un __init__.py
dans tous vos dossiers.
NB: Cette réponse est obsolète pour la dernière version de python 3, mais est ici pour la version antérieure. Pour plus d'informations, lisez les commentaires et https://www.python.org/dev/peps/pep-0420/
Essentiellement chaque dossier avec le code python que vous souhaitez ajouter au chemin syspath nécessite un fichier __init__.py. Ces fichiers __init__.py peuvent être vides.