Comment importer d'autres fichiers en Python?
- Comment puis-je importer un fichier python spécifique comme
import file.py
? - Comment importer un dossier au lieu d'un fichier spécifique?
- Je souhaite charger dynamiquement un fichier Python lors de l'exécution, en fonction de l'entrée utilisateur.
- Je veux savoir comment charger une seule partie spécifique du fichier.
Par exemple, dans main.py
J'ai:
from extra import *
Bien que cela me donne toutes les définitions extra.py
, alors peut-être que tout ce que je veux, c'est une seule définition:
def gap():
print
print
Que dois - je ajouter à la import
déclaration pour obtenir juste gap
de extra.py
?
python
python-import
Dompteur
la source
la source
Réponses:
importlib
a été ajouté à Python 3 pour importer par programme un module. C'est juste un wrapper__import__
, voir les documents .Remarque: l'
.py
extension doit être supprimée demoduleName
. La fonction définit également unpackage
argument pour les importations relatives.Mise à jour: la réponse ci-dessous est obsolète . Utilisez l'alternative la plus récente ci-dessus.
Juste
import file
sans l'extension «.py».Vous pouvez marquer un dossier en tant que package, en ajoutant un fichier vide nommé
__init__.py
.Vous pouvez utiliser la
__import__
fonction. Il prend le nom du module sous forme de chaîne. (Encore une fois: nom du module sans l'extension '.py'.)Tapez
help(__import__)
pour plus de détails.la source
import filename
au fichier .py init, vous pouvez importer le module directement en tant que nom de dossier.help(__import__)
:Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
import filenamenoext
fonctionne très bien pour moi, avec Python 3.4.8.Il existe de nombreuses façons d'importer un fichier python, toutes avec leurs avantages et leurs inconvénients.
Ne vous contentez pas de choisir à la hâte la première stratégie d'importation qui fonctionne pour vous, sinon vous devrez réécrire la base de code plus tard lorsque vous constaterez qu'elle ne répond pas à vos besoins.
Je vais commencer par expliquer l'exemple le plus simple # 1, puis je passerai à l'exemple le plus professionnel et le plus robuste # 7
Exemple 1, importez un module python avec l'interpréteur python:
Mettez ceci dans /home/el/foo/fox.py:
Entrez dans l'interpréteur python:
Vous avez importé fox via l'interpréteur python, invoqué la fonction python
what_does_the_fox_say()
depuis fox.py.Exemple 2, utilisez
execfile
ou (exec
en Python 3 ) dans un script pour exécuter l'autre fichier python en place:Mettez ceci dans /home/el/foo2/mylib.py:
Mettez ceci dans /home/el/foo2/main.py:
exécutez le fichier:
La fonction moobar a été importée de mylib.py et mise à disposition dans main.py
Exemple 3, utilisation de la fonctionnalité ... importer ...:
Mettez ceci dans /home/el/foo3/chekov.py:
Mettez ceci dans /home/el/foo3/main.py:
Exécutez-le comme ceci:
Si vous avez défini d'autres fonctions dans chekov.py, elles ne seraient disponibles que si vous
import *
Exemple 4, importez riaa.py s'il se trouve dans un emplacement de fichier différent de celui où il est importé
Mettez ceci dans /home/el/foo4/stuff/riaa.py:
Mettez ceci dans /home/el/foo4/main.py:
Exécuter:
Cela importe tout dans le fichier étranger à partir d'un répertoire différent.
Exemple 5, utilisez
os.system("python yourfile.py")
Exemple 6, importez votre fichier via le ferroutage du startuphook python:
Mise à jour: Cet exemple fonctionnait à la fois pour python2 et 3, mais ne fonctionne désormais que pour python2. python3 s'est débarrassé de cet ensemble de fonctionnalités de démarrage de l'utilisateur car il a été utilisé abusivement par les rédacteurs de bibliothèque python peu qualifiés, l'utilisant pour injecter impoliment leur code dans l'espace de noms global, avant tous les programmes définis par l'utilisateur. Si vous voulez que cela fonctionne pour python3, vous devrez faire preuve de plus de créativité. Si je vous dis comment le faire, les développeurs de python désactiveront également cet ensemble de fonctionnalités, vous êtes donc seul.
Voir: https://docs.python.org/2/library/user.html
Mettez ce code dans votre répertoire personnel
~/.pythonrc.py
Mettez ce code dans votre main.py (peut être n'importe où):
Exécutez-le, vous devriez obtenir ceci:
Si vous obtenez une erreur ici:
ModuleNotFoundError: No module named 'user'
cela signifie que vous utilisez python3, les startuphooks y sont désactivés par défaut.Le mérite de cette liste va à: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Envoyez le long de vos up-boats.
Exemple 7, le plus robuste: importez des fichiers en python avec la commande d'importation nue:
/home/el/foo5/
/home/el/foo5/herp
Créez un fichier vide nommé
__init__.py
sous herp:Créez un nouveau répertoire / home / el / foo5 / herp / derp
Sous derp, créez un autre
__init__.py
fichier:Sous / home / el / foo5 / herp / derp créez un nouveau fichier appelé
yolo.py
Mettez-le ici:Le moment de vérité, créez le nouveau fichier
/home/el/foo5/main.py
, mettez-le dedans;Exécuter:
Le
__init__.py
fichier vide indique à l'interpréteur python que le développeur a l'intention que ce répertoire soit un package importable.Si vous souhaitez voir mon article sur la façon d'inclure TOUS les fichiers .py dans un répertoire, voir ici: https://stackoverflow.com/a/20753073/445131
la source
__import__(py_file_name)
. Guide incroyable quand mêmePour importer un fichier Python spécifique à «runtime» avec un nom connu:
...
la source
Vous n'avez pas beaucoup de méthodes complexes pour importer un fichier python d'un dossier à un autre. Créez simplement un fichier __init__.py pour déclarer que ce dossier est un package python, puis accédez à votre fichier hôte où vous souhaitez importer, tapez simplement
from root.parent.folder.file import variable, class, whatever
la source
Import doc .. - Lien pour référence
Les
__init__.py
fichiers sont nécessaires pour que Python traite les répertoires comme contenant des packages, cela est fait pour empêcher les répertoires avec un nom commun, tel que chaîne, de masquer involontairement des modules valides qui se produisent plus tard sur le chemin de recherche des modules.__init__.py
peut simplement être un fichier vide, mais il peut également exécuter le code d'initialisation du package ou définir la__all__
variable.la source
Premier cas: vous souhaitez importer un fichier
A.py
dans un fichierB.py
, ces deux fichiers sont dans le même dossier, comme ceci:Vous pouvez le faire dans le fichier
B.py
:ou
ou
Ensuite, vous pourrez utiliser toutes les fonctions de fichier
A.py
en fichierB.py
Deuxième cas: vous souhaitez importer un fichier
folder/A.py
dans un fichierB.py
, ces deux fichiers ne sont pas dans le même dossier, comme ceci:Vous pouvez le faire dans le fichier B:
ou
ou
Ensuite, vous pourrez utiliser toutes les fonctions de fichier
A.py
en fichierB.py
Résumé: Dans le premier cas, fichier
A.py
est un module que vous importez dans fichierB.py
, vous avez utilisé la syntaxeimport module_name
. Dans le second cas,folder
c'est le package qui contient le moduleA.py
, vous avez utilisé la syntaxeimport package_name.module_name
.Pour plus d'informations sur les packages et les modules, consultez ce lien .
la source
from folder_a.script import *
Script.py se trouve dans le dossier a.import sys
etsys.path.append("..")
au début du fichier. Selon ceci: stackoverflow.com/a/48341902/6057480 . Testé, fonctionnant parfaitement, après cela, vous pourrez importer un fichier py dans le répertoire parent et toujours en mesure d'importer des fichiers py dans le même répertoire et sous-répertoires.et
Voici les deux moyens simples que j'ai compris maintenant et assurez-vous que votre fichier "file.py" que vous souhaitez importer en tant que bibliothèque est présent dans votre répertoire actuel uniquement.
la source
Si la fonction définie se trouve dans un fichier
x.py
:Dans le fichier où vous importez la fonction, écrivez ceci:
Ceci est utile si vous ne souhaitez pas importer toutes les fonctions d'un fichier.
la source
la meilleure façon d'importer des fichiers .py est par le biais de
__init__.py
. la chose la plus simple à faire est de créer un fichier vide nommé__init__.py
dans le même répertoire que votre fichier .py.ce message de Mike Grouchy est une excellente explication
__init__.py
et son utilisation pour créer, importer et configurer des packages python.la source
Comment j'importe, c'est importer le fichier et utiliser le raccourci de son nom.
N'oubliez pas que votre fichier d'importation DOIT ÊTRE nommé avec l'extension .py
la source
import DoStuff.py as DS
d'importerpy
depuisDoStuff
?Je voudrais ajouter cette note que je ne vois pas très clairement ailleurs; à l'intérieur d'un module / package, lors du chargement à partir de fichiers, le nom du module / package doit être précédé du
mymodule
. Imaginezmymodule
que vous disposiez comme ceci:Lors du chargement
somefile.py
/ àotherstuff.py
partir__init__.py
du contenu devrait ressembler à:la source
Si le module que vous souhaitez importer ne se trouve pas dans un sous-répertoire , essayez ce qui suit et exécutez-le à
app.py
partir du répertoire parent commun le plus profond:Structure du répertoire:
Dans
app.py
, ajoutez le chemin du client à sys.path:Facultatif (si vous chargez par exemple des configurations) (Inspect semble être le plus robuste pour mes cas d'utilisation)
Courir
Cette solution fonctionne pour moi en cli, ainsi que PyCharm.
la source
Il existe deux façons d'inclure votre script python avec le nom abc.py
Si votre script python est mis à jour et que vous ne souhaitez pas le télécharger, utilisez ces instructions pour une actualisation automatique. Prime :)
la source
Juste pour importer un fichier python dans un autre fichier python
disons que j'ai un fichier python helper.py qui a une fonction d'affichage comme,
Maintenant, dans app.py , vous pouvez utiliser la fonction d'affichage,
Le résultat,
I'm working sundar gsv
REMARQUE: il n'est pas nécessaire de spécifier l'extension .py.
la source
Cela peut sembler fou, mais vous pouvez simplement créer un lien symbolique vers le fichier que vous souhaitez importer si vous créez simplement un script wrapper.
la source
Vous pouvez également le faire:
from filename import something
exemple:
from client import Client
Notez que vous n'avez pas besoin de l'.py .pyw .pyui
extension.la source
C'est ainsi que j'ai fait pour appeler une fonction à partir d'un fichier python, ce qui est flexible pour moi d'appeler n'importe quelle fonction.
la source
from mypath import Path
parPath = callfunc("/folder/to/mypath.py", "Path")
. Merci @ Xiao-FengLiIl existe de nombreuses façons, comme indiqué ci-dessus, mais je trouve que je veux juste importer le contenu d'un fichier, et ne pas avoir à écrire des lignes et des lignes et importer d' autres modules. J'ai donc trouvé un moyen d'obtenir le contenu d'un fichier, même avec la syntaxe à points (
file.property
) au lieu de fusionner le fichier importé avec le vôtre.Tout d'abord, voici mon fichier que je vais importer,
data.py
Remarque: vous pouvez utiliser l'
.txt
extension à la place.Dans
mainfile.py
, commencez par ouvrir et récupérer le contenu.Vous avez maintenant le contenu sous forme de chaîne, mais essayer d'accéder
data.testString
entraînera une erreur, tout commedata
une instance de lastr
classe, et même s'il a une propriété,testString
il ne fera pas ce que vous attendiez.Ensuite, créez une classe. Par exemple (jeu de mots voulu),
ImportedFile
Et mettez-le dedans (avec l'indentation appropriée):
Et enfin, réaffectez
data
comme ceci:Et c'est tout! Accédez simplement comme vous le feriez pour n'importe quel autre module, la frappe
print(data.testString)
s'imprimera sur la consoleA string literal to import and test with
.Si, cependant, vous voulez l'équivalent de
from mod import *
simplement supprimer la classe, l'affectation d'instance et supprimer la dentexec
.J'espère que cela aide :)
-Benji
la source
Une fonctionnalité très inconnue de Python est la possibilité d'importer des
zip
fichiers:Le fichier
__init__.py
du package contient les éléments suivants:Nous pouvons écrire un autre script qui peut importer un package à partir de l'archive zip. Il est seulement nécessaire d'ajouter le fichier zip au sys.path.
la source