Question Comment importer d'autres fichiers Python?


Comment importer d'autres fichiers en Python?

  1. Comment puis-je importer un fichier python spécifique comme import file.py?
  2. Comment puis-je 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 contribution.
  4. Je veux savoir comment charger juste une 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, quand peut-être tout ce que je veux est une seule définition:

def gap():
    print
    print

Qu'est-ce que j'ajoute à la import déclaration juste pour obtenir gap de extra.py?


477
2018-02-28 03:40


origine


Réponses:


importlib est un ajout récent à Python pour importer par programme un module. C'est juste une enveloppe __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: Réponse ci-dessous. Utilisez l'alternative plus récente ci-dessus.

  1. Juste import file sans l'extension '.py'.

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

  3. Vous pouvez utiliser le __import__ fonction. Il prend le nom du module sous forme de chaîne. (Encore une fois: nom du module sans l'extension '.py'.)

    pmName = input('Enter module name:')
    pm = __import__(pmName)
    print(dir(pm))
    

    Type help(__import__) pour plus de détails.


294
2018-02-28 03:42



Il y a plusieurs façons d'importer un fichier python, le tout avec leurs avantages et leurs inconvénients.

Ne choisissez pas à la hâte la première stratégie d'importation qui fonctionne pour vous, sinon vous devrez réécrire le code plus tard lorsque vous constaterez qu'il ne répond pas à vos besoins.

Je vais commencer par expliquer l'exemple le plus simple # 1, puis je vais passer à l'exemple le plus professionnel et robuste # 7

Exemple 1, Importez un module python avec un interpréteur python:

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

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. Entrez 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 via l'interpréteur python, invoqué la fonction python what_does_the_fox_say() de l'intérieur de fox.py.

Exemple 2, utilisation execfile ou (exec dans 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. lance le fichier:

    el@apollo:/home/el/foo$ python main.py
    hi
    

    La fonction moobar a été importée de mylib.py et mise à disposition dans main.py

Exemple 3, Utilisation 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écutez-le comme ceci:

    el@apollo:/home/el/foo3$ python main.py 
    where are the nuclear wessels?
    

    Si vous définissiez d'autres fonctions dans chekov.py, elles ne seraient pas disponibles sauf si vous import *

Exemple 4, Importez riaa.py s'il se trouve dans un emplacement différent de celui où il est importé

  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. Mettez ceci dans /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. Exécuter:

    el@apollo:/home/el/foo4$ python main.py 
    computers are transforming into a noose and a yoke for humans
    

    Cela importe tout dans le fichier étranger à partir d'un répertoire différent.

Exemple 5, utiliser os.system("python yourfile.py")

import os
os.system("python yourfile.py")

Exemple 6, importez votre fichier en superposant le python startuphook:

Voir: https://docs.python.org/2/library/user.html

Placez ce code dans votre répertoire personnel ~/.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!")

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 ce jist va à: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py  Envoie le long de tes bateaux.

Exemple 7, le plus robuste: importez des fichiers en python avec la commande d'importation 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 l'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, faites 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. Sous / home / el / foo5 / herp / derp, créez un nouveau fichier appelé yolo.py Mettez ceci dedans:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
    
  7. Le moment de vérité, Faites le nouveau fichier /home/el/foo5/main.py, mettez ça là-dedans;

    from herp.derp.yolo import skycake
    skycake()
    
  8. 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 vide __init__.py fichier communique à l'interpréteur python que le développeur a l'intention de faire de ce répertoire un paquet importable.

Si vous voulez voir mon post sur la façon d'inclure tous les fichiers .py sous un répertoire, cliquez ici: https://stackoverflow.com/a/20753073/445131

Bonus protip

que vous utilisiez Mac, Linux ou Windows, vous devez utiliser L'éditeur inactif de python comme décrit ici. Il va débloquer votre monde python. http://www.youtube.com/watch?v=DkW5CSZ_VII


685
2017-12-23 18:46



Pour importer un fichier Python spécifique à l'exécution 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

33
2018-04-30 12:30



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 ce dossier est un package python, puis allez dans votre fichier hôte où vous souhaitez importer juste tapez

from root.parent.folder.file import variable, class, whatever


22
2018-01-24 14:08



Import doc ..

le __init__.py les fichiers 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 surviennent plus tard dans le chemin de recherche du module.

__init__.py peut juste être un fichier vide, mais il peut également exécuter le code d'initialisation pour le paquet ou définir le __all__ variable.

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module

10
2017-10-02 08:27



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 comprises maintenant et assurez-vous que votre fichier "fichier.py" que vous voulez importer en tant que bibliothèque est présent dans votre répertoire actuel uniquement.


7
2018-02-09 18:49



le meilleur moyen d’importer des fichiers .py est 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 poster par Mike Grouchy est une excellente explication de __init__.py et son utilisation pour créer, importer et configurer des packages Python.


4
2018-06-27 15:43



Comment importer est importer le fichier et utiliser le nom abrégé de celui-ci.

import DoStuff.py as DS
DS.main()

N'oublie pas que votre fichier d'importation DOIT ÊTRE nommé avec l'extension .py


3
2018-05-09 09:01



Je voudrais ajouter cette note que je ne vois pas très clairement ailleurs; Dans un module / package, lors du chargement à partir de fichiers, le nom du module / package doit être précédé du préfixe mymodule. Imaginer mymodule étant mise en page comme ceci:

/main.py
/mymodule
    /__init__.py
    /somefile.py
    /otherstuff.py

Lors du chargement somefile.py/otherstuff.py de __init__.py le contenu devrait ressembler à:

from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc

1
2018-04-18 09:51