J'ai un répertoire qui stocke tous les fichiers .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Je veux utiliser les classes de user.py et dir.py in main.py .
Comment puis-je importer ces classes Python dans main.py ?
De plus, comment puis-je importer la classe User
si user.py se trouve dans un sous-répertoire?
bin/
dir.py
main.py
usr/
user.py
Créez un fichier vide appelé __init__.py
dans le même répertoire que les fichiers. Cela signifiera à Python qu'il est "ok d'importer à partir de ce répertoire".
Alors fais juste ...
from user import User
from dir import Dir
Il en va de même si les fichiers se trouvent dans un sous-répertoire - mettez également un __init__.py
dans le sous-répertoire, puis utilisez des instructions d'importation régulières, avec notation à points. Pour chaque niveau de répertoire, vous devez ajouter le chemin d'importation.
bin/
main.py
classes/
user.py
dir.py
Donc, si le répertoire s'appelle "classes", alors vous feriez ceci:
from classes.user import User
from classes.dir import Dir
Identique à la précédente, mais préfixez le nom du module avec un .
si vous n'utilisez pas de sous-répertoire:
from .user import User
from .dir import Dir
Je viens d'apprendre (grâce au commentaire de martineau ) que, pour importer des classes à partir de fichiers d'un même répertoire, vous écririez maintenant en Python 3:
from .user import User
from .dir import Dir
Dans votre main.py
:
from user import Class
où Class
est le nom de la classe que vous souhaitez importer.
Si vous souhaitez appeler une méthode de Class
, vous pouvez l’appeler de la manière suivante:
Class.method
Notez qu'il doit y avoir un fichier __init__.py
vide dans le même répertoire.
Vous pouvez importer le module et y accéder par son nom si vous ne souhaitez pas mélanger des fonctions et des classes avec le vôtre.
import util # imports util.py
util.clean()
util.setup(4)
ou vous pouvez importer les fonctions et les classes dans votre code
from util import clean, setup
clean()
setup(4)
vous pouvez utiliser wildchar * pour importer tout le contenu de ce module dans votre code
from util import *
clean()
setup(4)
Pour le rendre plus simple à comprendre:
Étape 1: permet d’aller dans un répertoire, où tout sera inclus
$ cd /var/tmp
Étape 2: permet maintenant de créer un fichier class1.py qui porte un nom de classe Class1 avec du code
$ cat > class1.py <<\EOF
class Class1:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF
Étape 3: permet maintenant de créer un fichier class2.py qui porte un nom de classe Class2 avec du code
$ cat > class2.py <<\EOF
class Class2:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF
Étape 4: permet maintenant de créer un fichier main.py qui sera exécuté une fois pour utiliser Class1 et Class2 à partir de 2 fichiers différents
$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and from that file loading Class1"""
from class1 import Class1
"""this is how we are actually calling class2.py and from that file loading Class2"""
from class2 import Class2
print Class1.OK
print Class2.OK
EOF
Étape 5: Exécuter le programme
$ python main.py
La sortie serait
[Class1 OK]:
[Class2 OK]:
from user import User
from dir import Dir
En python3, __init__.py
est n'est plus nécessaire . Si le répertoire en cours de la console est le répertoire dans lequel se trouve le script python, tout fonctionne correctement.
import user
Cependant, cela ne fonctionnera pas s'il est appelé depuis un autre répertoire, qui ne contient pas user.py
.
Dans ce cas, utilisez
from . import user
Cela fonctionne même si vous souhaitez importer le fichier entier au lieu d'une classe à partir de là.
Python 3
Idem directory
.
fichier d'importation: log.py
classe d'importation: SampleApp()
.
import log
if __== "__main__":
app = log.SampleApp()
app.mainloop()
ou
le répertoire est basic
.
importer dans le fichier: log.py
.
classe d'importation: SampleApp()
.
from basic import log
if __== "__main__":
app = log.SampleApp()
app.mainloop()
Tout simplement trop bref, Créez un fichier __init__.py
est le répertoire classes, puis importez-le dans votre script comme suit
from classes.myscript import *
importer depuis le même répertoire
from . import the_file_you_want_to_import
importer du sous répertoire le répertoire doit contenir
init. py
fichier autre que vous fichiers alors
depuis le répertoire import your_file