Comment importer d'autres fichiers Python?
Comment puis-je 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 veux charger un fichier Python dynamiquement à l'exécution, basé sur l'utilisateur entrée.
- je veux savoir comment charger seulement une partie du fichier.
par exemple, en main.py
j'ai:
from extra import *
bien que cela me donne toutes les définitions dans extra.py
, quand peut-être tout ce que je veux est une définition unique:
def gap():
print
print
Qu'est-ce que j'ajoute à la déclaration import
pour obtenir gap
de extra.py
?
13 réponses
importlib
est une addition récente en Python pour importer programmatiquement un module. C'est juste une enveloppe autour de __import__
Voir https://docs.python.org/3/library/importlib.html#module-importlib
import importlib
moduleName = input('Enter module name:')
importlib.import_module(moduleName)
mise à jour: la réponse ci-dessous est périmée . Utilisez l'option la plus récente ci-dessus.
-
juste
import file
sans le".py" extension. -
, Vous pouvez marquer un dossier comme un paquet, en ajoutant un fichier vide nommé
__init__.py
. -
vous pouvez utiliser la fonction
__import__
. Il prend le nom du module comme une chaîne de caractères. (De nouveau: nom du module sans le '.PY ' extension.)pmName = input('Enter module name:') pm = __import__(pmName) print(dir(pm))
Type
help(__import__)
pour plus de détails.
il y a plusieurs façons d'importer un fichier python, toutes avec leurs avantages et inconvénients.
ne choisissez pas à la hâte la première stratégie d'importation qui fonctionne pour vous, sinon vous devrez réécrire la base de codes plus tard quand vous constaterez qu'elle ne répond pas à vos besoins.
je vais commencer par expliquer l'exemple le plus facile #1, Puis je vais passer à l'exemple le plus professionnel et robuste #7
exemple 1, Importer un module python avec interpréteur python:
-
Mettez ceci dans /home/el/foo/fox.py:
def what_does_the_fox_say(): print("vixens cry")
-
entrer dans l'interpréteur python:
el@apollo:/home/el/foo$ python Python 2.7.3 (default, Sep 26 2013, 20:03:06) >>> import fox >>> fox.what_does_the_fox_say() vixens cry >>>
vous avez importé fox par l'intermédiaire de l'interpréteur python, invoqué la fonction python
what_does_the_fox_say()
de l'intérieur fox.py.
Exemple 2, Utiliser 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:
def moobar(): print("hi")
-
Mettez ceci dans /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py") moobar()
-
exécuter le fichier:
el@apollo:/home/el/foo$ python main.py hi
la fonction moobar était importé de mylib.py et mis à disposition en main.py
exemple 3, Utiliser de ... importation. .. fonctionnalité:
-
Mettez ceci dans /home/el/foo3/chekov.py:
def question(): print "where are the nuclear wessels?"
-
Mettez ceci dans /home/el/foo3/main.py:
from chekov import question question()
-
Exécuter comme ceci:
el@apollo:/home/el/foo3$ python main.py where are the nuclear wessels?
si vous avez défini d'autres fonctions dans chekov.py, ils ne seraient pas disponibles à moins que vous
import *
exemple 4, importation riaa.py si elle se trouve à un endroit différent de celui où elle est importée
-
Mettez ceci dans /home/el/foo4/stuff/riaa.py:
def watchout(): print "computers are transforming into a noose and a yoke for humans"
-
/home/el/foo4/main.py:
import sys import os sys.path.append(os.path.abspath("/home/el/foo4/stuff")) from riaa import * watchout()
-
de l'Exécuter:
el@apollo:/home/el/foo4$ python main.py computers are transforming into a noose and a yoke for humans
qui importe tout dans le fichier étranger à partir d'un répertoire différent.
exemple 5, utilisez os.system("python yourfile.py")
import os
os.system("python yourfile.py")
exemple 6, importez votre fichier via piggybacking the python startuphook:
voir: https://docs.python.org/3/library/user.html
mettez ce code dans votre répertoire personnel dans ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can't go up and "
skycake = classmethod( skycake )
mettez ce code dans votre main.py (peut être n'importe où):
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
de l'Exécuter:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and have the sky pie!
SKYCAKE!
crédit pour cette jist va à: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py envoyez vos bateaux.
exemple 7, le plus robuste: importer des fichiers en python avec la commande import nue:
- faire un nouveau répertoire
/home/el/foo5/
- faire un nouveau répertoire
/home/el/foo5/herp
-
créer un fichier vide nommé
__init__.py
sous herp:el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.py
-
créez un nouveau répertoire /home/el/foo5/herp/derp
-
sous derp, faire un autre
__init__.py
fichier:el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.py
-
Dans /home/el/foo5/herp/derp faire un nouveau fichier appelé
yolo.py
Mettez ce là-bas:def skycake(): print "SkyCake evolves to stay just beyond the cognitive reach of " + "the bulk of men. SKYCAKE!!"
-
Le moment de vérité, de Rendre le nouveau fichier
/home/el/foo5/main.py
, mettez ça là;from herp.derp.yolo import skycake skycake()
-
de l'Exécuter:
el@apollo:/home/el/foo5$ python main.py SkyCake evolves to stay just beyond the cognitive reach of the bulk of men. SKYCAKE!!
le fichier vide
__init__.py
communique à l'interpréteur python que le développeur souhaite que ce répertoire soit un paquet importable.
Si vous voulez voir mon post sur comment faire pour inclure TOUS .py fichiers dans un répertoire, voir ici: https://stackoverflow.com/a/20753073/445131
Bonus protip
que vous utilisiez Mac, Linux ou Windows, vous devez utiliser éditeur idle de python comme décrit ici. Il déverrouillera votre monde de python. http://www.youtube.com/watch?v=DkW5CSZ_VII
pour importer un fichier Python spécifique à 'runtime' avec un nom connu:
import os
import sys
...
scriptpath = "../Test/MyModule.py"
# Add the directory containing your module to the Python path (wants absolute paths)
sys.path.append(os.path.abspath(scriptpath))
# Do the import
import MyModule
vous n'avez pas beaucoup de méthodes complexes pour importer un fichier python d'un dossier à un autre. Il suffit de créer un __init__.py fichier pour déclarer que ce dossier est un paquet python et ensuite aller dans votre fichier hôte où vous voulez importer tapez juste
from root.parent.folder.file import variable, class, whatever
les fichiers __init__.py
sont nécessaires pour que Python traite les répertoires comme contenant des paquets, ceci est fait pour empêcher les répertoires avec un nom commun, comme string, de cacher involontairement des modules valides qui se produisent plus tard sur le chemin de recherche du module.
__init__.py
peut simplement être un fichier vide, mais il peut aussi exécuter le code d'initialisation du paquet ou définir le __all__
variable.
mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module
from file import function_name ######## Importing specific function
function_name() ######## Calling function
et
import file ######## Importing whole package
file.function1_name() ######## Calling function
file.function2_name() ######## Calling function
Voici les deux façons simples que j'ai compris, et assurez-vous que votre "file.py" le fichier que vous souhaitez importer en tant que bibliothèque est présent dans votre répertoire courant.
la meilleure façon d'importer .les 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 your.py fichier se trouve.
ce post par Mike Grouchy est une bonne explication de __init__.py
et son utilisation pour la fabrication, l'importation, et la création de paquets python.
comment j'importe est d'importer le fichier et d'utiliser la sténographie de son nom.
import DoStuff.py as DS
DS.main()
N'oubliez pas que votre fichier d'importation doit être nommé avec .PY extension
j'aimerais ajouter cette note que je ne vois pas très bien ailleurs; à l'intérieur d'un module/paquet, lors du chargement à partir de fichiers, le nom du module/paquet doit être préfixé avec le mymodule
. Imaginez mymodule
être layout comme ceci:
/main.py
/mymodule
/__init__.py
/somefile.py
/otherstuff.py
lors du chargement somefile.py
/ otherstuff.py
à partir de __init__.py
le contenu doit ressembler à:
from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc
juste pour importer un fichier python dans un autre fichier python
disons que j'ai helper.py fichier python qui a une fonction d'affichage comme,
def display():
print("I'm working sundar gsv")
maintenant dans app.py , vous pouvez utiliser la fonction d'affichage,
import helper
helper.display()
La sortie de,
I'm working sundar gsv
NOTE: pas besoin de préciser le .PY extension.
cela peut sembler fou, mais vous pouvez simplement créer un lien symbolique vers le fichier que vous voulez importer si vous créez simplement un script d'enrubannage.
il y a plusieurs façons, comme indiqué ci-dessus, mais je trouve que je veulent juste importer le contenu d'un fichier, et ne veulent pas avoir à écrire des lignes et des lignes et doivent importer autres modules. Donc, j'ai trouvé un moyen d'obtenir le contenu d'un fichier, même avec la syntaxe de point ( 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
testString= "A string literal to import and test with"
Note: vous pouvez utiliser l'extension .txt
à la place.
dans mainfile.py
, commencez par ouvrir et récupérer le contenu.
#!usr/bin/env python3
Data=open('data.txt','r+').read()
Maintenant vous avez le contenu comme une chaîne, mais essayer d'accéder à data.testString
causera une erreur, comme data
est une instance de la classe str
, et même si elle a une propriété testString
il ne fera pas ce que vous attendiez.
Ensuite, créez une classe. Par exemple (jeu de mots prévu), ImportedFile
class ImportedFile:
et mettez - y (avec l'indentation appropriée):
exec(data)
Et enfin, réattribuer data
comme suit:
data=ImportedFile()
Et c'est tout! Juste l'accès comme vous le feriez pour n'importe quel-autre module, en tapant print(data.testString)
imprimera à la console A string literal to import and test with
.
si, cependant, vous voulez l'équivalent de from mod import *
il suffit de laisser tomber la classe, l'assignation d'instance, et de-dent le exec
.
Espérons que cela aide:)
- Benji
vous pouvez aussi faire ceci: from filename import something
exemple: from client import Client
Notez que vous n'avez pas besoin de l'extension .py .pyw .pyui
.