110 votes

Comment ajouter un module Python à syspath ?

J'ai une structure de fichier comme ceci :

Folder
   Common
      foo1.py
   TestFolder
      foo2.py

Je veux importer dans foo2.py et foo1.py . J'ai essayé mais cela ne fonctionne pas sur Ubuntu :

sys.path.append(os.path.abspath('../../'))
from Common import foo1.py

158voto

Jacob Vlijm Points 78990

Comment Python trouve ses modules

Au sens strict, un module est un fichier Python unique, tandis qu'un fichier paquet est un dossier contenant des fichiers Python, accompagné d'un fichier (pouvant être vide) nommé __init__.py pour indiquer à Python qu'il s'agit d'un paquet dont il faut importer des modules. Dans les deux cas, les modules ont besoin de leur .py mais leur importation se fait sans (voir plus loin).

Par défaut, Python recherche ses modules et paquets dans le répertoire $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

À l'intérieur d'un fichier Python, vous pouvez ajouter des chemins d'accès occasionnels au chemin par défaut en ajoutant les lignes suivantes dans la section head de votre application Python ou script :

import sys
sys.path.insert(0, "/path/to/your/package_or_module")

Par exemple :

si j'ai un dossier : /home/myname/pythonfiles et je veux importer le fichier module_1.py situé dans ce répertoire, j'ajoute ceci à la section head de mon code :

import sys
sys.path.insert(0, "/home/myname/pythonfiles")

Et je peux simplement importer le fichier module_1.py par :

import module_1

Lorsque je crée un paquet et que je souhaite importer un ou plusieurs modules du paquet, je dois créer un dossier dans le dossier $PYTHONPATH contenant les modules, accompagné d'un fichier (qui peut être vide) appelé __init__.py

Par exemple :

Pour importer à partir d'un paquet (dossier) appelé my_package en /home/myname/pythonfiles , ajoutez le /home/myname/pythonfiles le chemin vers votre $PYTHONPATH comme dans l'exemple 1, et importez le module appelé module_2.py (dans le dossier du paquet) simplement avec : `

from <packagename> import module_2

Ajout de répertoires à $PYTHONPATH en permanence :

Ajoutez la ligne suivante à votre ~/.profile fichier.

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

Sous-répertoires

À l'intérieur d'un paquet, les sous-répertoires ne sont pas inclus d'emblée ; vous devez "enchaîner" les répertoires. Pour importer un module module_3.py , dans le dossier subfolder à l'intérieur du dossier packagename :

import packagename.subfolder.module_3

Etant donné que tous les sous-dossiers du paquet incluent leur propre __init__.py fichier.

Lorsqu'un module se trouve 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é.

Ejemplo:

Si j'ai un dossier, contenant script.py et module.py je peux simplement importer le module par :

import module

7voto

Sylvain Pineau Points 59212

La façon correcte d'utiliser l'importation relative est :

from ..Common import foo1

Et vous avez également besoin d'un __init__.py dans tous vos dossiers.

2voto

don.joey Points 26933

NB : Cette réponse est périmée pour la dernière version de Python 3, mais elle est ici pour les versions antérieures. Pour plus d'informations, lisez les commentaires et https://www.Python.org/dev/peps/pep-0420/


Essentiellement chaque Le dossier contenant le code Python que vous voulez ajouter au syspath nécessite un fichier __init__.py. Ces fichiers __init__.py peuvent être vides.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X