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 des classes de user.py et dir.py dans main.py .
Comment puis-je importer ces classes Python dans main.py ?
De plus, comment puis-je importer une classe User
si user.py est dans un sous-répertoire?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
la source
la source
Réponses:
Python 2
Créez un fichier vide appelé
__init__.py
dans le même répertoire que les fichiers. Cela signifiera à Python qu'il est "correct d'importer depuis ce répertoire".Alors fais juste ...
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 la notation par points. Pour chaque niveau de répertoire, vous devez ajouter au chemin d'importation.Donc, si le répertoire était nommé "classes", alors vous feriez ceci:
Python 3
Identique à la précédente, mais préfixez le nom du module avec a
.
si vous n'utilisez pas de sous-répertoire:la source
__init__.py
n'est pas vide, alors ce qui est dedans est__init__.py
ce qui sera disponible lorsque vous importerez le paquet (et les choses non importées__init__.py
ne seront pas disponibles du tout).__init__.py
fichier est-il nécessaire? Si je mets les trois fichiers dans le même répertoire et quemain.py
je l' exécute , il est capable deimport
partir des deux autres modules sans lui. Qu'est-ce que je rate?__init__.py
et pouvoir importer d'autres modules dans le même répertoire. Plus précisément,import
les autres modules du même répertoire que le__init__.py
fichier lui-même qui fonctionnait dans Python 2.7.8, ont échoué dans Python 3.4.1. Pour le corriger, j'ai dû préfixer chacun d'eux avec le nom du sous-répertoire et un point (c'estimport module
-à- dire qu'il fallait le changerimport subdirectory.module
). Heureusement, cela fonctionnait toujours dans Python 2.7.8 après avoir fait cela.Je viens d'apprendre (grâce au commentaire de martineau ) que, pour importer des classes à partir de fichiers dans le même répertoire, vous écririez maintenant en Python 3:
la source
ValueError: Attempted relative import in non-package
mais l'erreur disparaît quand je passe àfrom user import User
Dans votre
main.py
:où
Class
est le nom de la classe que vous souhaitez importer.Si vous voulez appeler une méthode de
Class
, vous pouvez l'appeler en utilisant:Class.method
Notez qu'il devrait y avoir un
__init__.py
fichier vide dans le même répertoire.la source
__init__.py
.Vous pouvez importer le module et y accéder par son nom si vous ne voulez pas mélanger les fonctions et les classes avec les vôtres
ou vous pouvez importer les fonctions et les classes dans votre code
vous pouvez utiliser wildchar * pour importer tout dans ce module dans votre code
la source
En python3,
__init__.py
est plus nécessaire . Si le répertoire actuel de la console est le répertoire où se trouve le script python, tout fonctionne bien avecCependant, cela ne fonctionnera pas s'il est appelé à partir d'un répertoire différent, qui ne contient pas
user.py
.Dans ce cas, utilisez
Cela fonctionne même si vous souhaitez importer le fichier entier au lieu d'une simple classe à partir de là.
la source
import user
été soulignée en rouge); changé en import relatif (from . import user
) et le linter ne l'a plus signalé.Pour le rendre plus simple à comprendre:
Étape 1: permet d'accéder à un répertoire, où tout sera inclus
Étape 2: permet maintenant de créer un fichier class1.py qui a un nom de classe Class1 avec du code
Étape 3: permet maintenant de créer un fichier class2.py qui a un nom de classe Class2 avec du code
É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
Étape 5: exécutez le programme
La sortie serait
la source
Python 3
Pareil
directory
.Importer le fichier:
log.py
classe d'importation:
SampleApp()
.ou
répertoire est
basic
.importer dans le fichier:
log.py
.classe d'importation:
SampleApp()
.la source
la source
Si user.py et dir.py n'incluent pas les classes, alors
ne fonctionne pas. Vous devez ensuite importer en tant que
la source
Je ne sais pas pourquoi cela fonctionne, mais en utilisant la construction Pycharm
from file_in_same_dir import class_name
L'IDE s'en est plaint, mais il semble que cela fonctionne toujours. J'utilise Python 3.7
la source
Tout simplement trop bref, créer un fichier
__init__.py
est le répertoire des classes, puis l'importer dans votre script comme suit (Importer tous les cas)Importer uniquement les classes sélectionnées
la source
importer depuis le même répertoire
pour importer à partir du sous-répertoire, le répertoire doit contenir
déposer autre que vous fichiers puis
à partir du répertoire, importez votre_fichier
la source
Python3
utilisation
et
ainsi
la source