Comment importer d'autres fichiers Python?

Comment puis-je importer d'autres fichiers en Python?

  1. Comment puis-je importer un fichier python spécifique comme import file.py ?
  2. comment importer un dossier au lieu d'un fichier spécifique?
  3. je veux charger un fichier Python dynamiquement à l'exécution, basé sur l'utilisateur entrée.
  4. 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 ?

502
demandé sur Lii 2010-02-28 06:40:11

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.

  1. juste import file sans le".py" extension.

  2. , Vous pouvez marquer un dossier comme un paquet, en ajoutant un fichier vide nommé __init__.py .

  3. 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.

305
répondu Radian 2018-02-16 14:06:51

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:

  1. Mettez ceci dans /home/el/foo/fox.py:

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. 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:

  1. Mettez ceci dans /home/el/foo2/mylib.py:

    def moobar():
      print("hi")
    
  2. Mettez ceci dans /home/el/foo2/main.py:

    execfile("/home/el/foo2/mylib.py")
    moobar()
    
  3. 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é:

  1. Mettez ceci dans /home/el/foo3/chekov.py:

    def question():
      print "where are the nuclear wessels?"
    
  2. Mettez ceci dans /home/el/foo3/main.py:

    from chekov import question
    question()
    
  3. 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

  1. Mettez ceci dans /home/el/foo4/stuff/riaa.py:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
    
  2. /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. 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:

  1. faire un nouveau répertoire /home/el/foo5/
  2. faire un nouveau répertoire /home/el/foo5/herp
  3. 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
    
  4. créez un nouveau répertoire /home/el/foo5/herp/derp

  5. 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
    
  6. 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!!"
    
  7. 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()
    
  8. 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

716
répondu Eric Leschinski 2018-08-30 03:02:58

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
35
répondu James 2014-09-13 12:44:04

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

24
répondu Fatih Karatana 2016-02-24 23:02:49

Importer doc ..

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
10
répondu Sanyal 2016-11-19 09:17:10
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.

7
répondu Devendra Bhat 2018-02-16 19:49:18

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.

4
répondu supreme 2017-06-27 16:14:53

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

3
répondu Luke359 2016-05-09 09:01:49

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
1
répondu Svend 2018-04-28 17:19:05

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.

0
répondu Sundar Gsv 2018-03-25 13:27:38

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.

0
répondu Jonathan 2018-07-29 02:20:57

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

0
répondu Benj 2018-08-22 08:30:55

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 .

0
répondu Lucas Soares 2018-08-22 10:01:21