1243 Stimmen

Wie kann ich andere Python-Dateien importieren?

Wie kann ich andere Dateien in Python importieren?

  1. Wie genau kann ich eine bestimmte Python-Datei importieren, z. B. import file.py ?
  2. Wie kann ich einen Ordner anstelle einer bestimmten Datei importieren?
  3. Ich möchte eine Python-Datei dynamisch zur Laufzeit laden, basierend auf dem Benutzer Eingabe.
  4. Ich möchte wissen, wie ich nur einen bestimmten Teil aus der Datei laden kann.

Zum Beispiel, in main.py Ich habe:

from extra import *

Damit habe ich zwar alle Definitionen in extra.py , obwohl ich vielleicht nur eine einzige Definition brauche:

def gap():
    print
    print

Was füge ich dem import Anweisung, um einfach die gap de extra.py ?

1454voto

Eric Leschinski Punkte 134271

Es gibt viele Möglichkeiten, eine Python-Datei zu importieren, alle mit ihren Vor- und Nachteilen.

Wählen Sie nicht voreilig die erstbeste Importstrategie, die Ihnen zusagt, sonst müssen Sie die Codebasis später umschreiben, wenn Sie feststellen, dass sie Ihren Anforderungen nicht gerecht wird.

Ich beginne mit der Erläuterung des einfachsten Beispiels Nr. 1 und gehe dann zum professionellsten und robustesten Beispiel Nr. 7 über.

Beispiel 1, Import eines Python-Moduls mit Python-Interpreter:

  1. Fügen Sie dies in /home/el/foo/fox.py ein:

    def what_does_the_fox_say():
      print("vixens cry")
  2. Rufen Sie den Python-Interpreter auf:

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

    Sie haben fox über den Python-Interpreter importiert und die Python-Funktion what_does_the_fox_say() aus der Datei fox.py.

Beispiel 2, Verwendung execfile oder ( exec in Python 3 ) in einem Skript, um die andere Python-Datei stattdessen auszuführen:

  1. Fügen Sie dies in /home/el/foo2/mylib.py ein:

    def moobar():
      print("hi")
  2. Fügen Sie dies in /home/el/foo2/main.py ein:

    execfile("/home/el/foo2/mylib.py")
    moobar()
  3. führen Sie die Datei aus:

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

    Die Funktion moobar wurde aus mylib.py importiert und in main.py verfügbar gemacht

Beispiel 3, Verwendung der from ... import ... Funktionalität:

  1. Fügen Sie dies in /home/el/foo3/chekov.py ein:

    def question():
      print "where are the nuclear wessels?"
  2. Fügen Sie dies in /home/el/foo3/main.py ein:

    from chekov import question
    question()
  3. Gehen Sie folgendermaßen vor:

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

    Wenn Sie andere Funktionen in chekov.py definiert haben, wären diese nicht verfügbar, es sei denn, Sie import *

Beispiel 4, Importieren Sie riaa.py, wenn sie sich an einem anderen Speicherort befindet als der, an dem sie importiert wird

  1. Fügen Sie dies in /home/el/foo4/stuff/riaa.py ein:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
  2. Fügen Sie dies in /home/el/foo4/main.py ein:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
  3. Führen Sie es aus:

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

    Dadurch wird alles in der Fremddatei aus einem anderen Verzeichnis importiert.

Beispiel 5, Verwendung os.system("python yourfile.py")

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

Beispiel 6: Importieren Sie Ihre Datei über den Python-Startuphook im Huckepackverfahren:

Aktualisierung: Dieses Beispiel funktionierte früher sowohl für Python2 als auch für Python 3, aber jetzt nur noch für Python2. Python3 hat diese Benutzer-Startuphook-Funktion abgeschafft, weil sie von wenig geschickten Python-Bibliotheksautoren missbraucht wurde, um ihren Code unhöflich in den globalen Namensraum vor allen benutzerdefinierten Programmen einzuschleusen. Wenn Sie wollen, dass dies für Python 3 funktioniert, müssen Sie kreativer werden. Wenn ich Ihnen sage, wie es geht, werden die Python-Entwickler auch diese Funktion deaktivieren, also sind Sie auf sich allein gestellt.

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

Fügen Sie diesen Code in Ihr Home-Verzeichnis in ~/.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 )

Fügen Sie diesen Code in Ihre main.py ein (kann überall sein):

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!")

Führen Sie es aus und Sie sollten dies erhalten:

$ 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!

Wenn Sie hier einen Fehler erhalten: ModuleNotFoundError: No module named 'user' dann bedeutet das, dass Sie Python3 verwenden, da Startuphooks dort standardmäßig deaktiviert sind.

Der Dank für diesen Spruch geht an: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Schicken Sie Ihre Up-Boote mit.

Beispiel 7, am robustesten: Importieren von Dateien in Python mit dem Befehl bare import:

  1. Ein neues Verzeichnis erstellen /home/el/foo5/

  2. Ein neues Verzeichnis erstellen /home/el/foo5/herp

  3. Erstellen Sie eine leere Datei mit dem Namen __init__.py unter Herp:

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
  4. Erstellen Sie ein neues Verzeichnis /home/el/foo5/herp/derp

  5. Unter derp, eine weitere __init__.py Datei:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
  6. Erstellen Sie unter /home/el/foo5/herp/derp eine neue Datei namens yolo.py Legen Sie das da rein:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
  7. Der Moment der Wahrheit, Erstellen Sie die neue Datei /home/el/foo5/main.py , setzen Sie dies dort ein;

    from herp.derp.yolo import skycake
    skycake()
  8. Führen Sie es aus:

    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk 
    of men. SKYCAKE!!

    Die leere __init__.py Datei teilt dem Python-Interpreter mit, dass der Entwickler beabsichtigt, dieses Verzeichnis als importierbares Paket zu verwenden.

Wenn Sie meinen Beitrag darüber lesen wollen, wie man ALLE .py-Dateien in einem Verzeichnis einbindet, lesen Sie hier: https://stackoverflow.com/a/20753073/445131

549voto

tabdulradi Punkte 7186

importlib wurde in Python 3 hinzugefügt, um programmatisch ein Modul zu importieren.

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

Die .py-Erweiterung sollte entfernt werden von moduleName . Die Funktion definiert auch eine package Argument für relative Importe.

In Python 2.x:

  • Einfach import file ohne die Erweiterung .py
  • Ein Ordner kann als Paket markiert werden, indem man ein leeres __init__.py Datei
  • Sie können die __import__ Funktion, die den Modulnamen (ohne Erweiterung) als String-Erweiterung annimmt

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

Typ help(__import__) für weitere Einzelheiten.

172voto

Bohao LI Punkte 1435

Erster Fall

Sie möchten eine Datei importieren A.py im Ordner B.py befinden sich diese beiden Dateien im selben Ordner, etwa so:

. 
 A.py 
 B.py

Sie können dies in der Datei B.py :

import A

ou

from A import *

ou

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

Dann können Sie alle Funktionen der Datei A.py im Ordner B.py


Zweiter Fall

Sie möchten eine Datei importieren folder/A.py im Ordner B.py befinden sich diese beiden Dateien nicht im selben Ordner, etwa so:

.
 B.py
 folder
      A.py

Sie können dies in der Datei B.py :

import folder.A

ou

from folder.A import *

ou

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

Dann können Sie alle Funktionen der Datei A.py im Ordner B.py


Zusammenfassung

  • In der erster Fall , Datei A.py ist ein Modul, das Sie in die Datei B.py haben Sie die Syntax import module_name .
  • In der zweiter Fall , folder ist das Paket, das das Modul enthält A.py haben Sie die Syntax import package_name.module_name .

Weitere Informationen zu Paketen und Modulen finden Sie hier Link .

96voto

James Punkte 28118

Zum Importieren einer bestimmten Python-Datei zur "Laufzeit" mit einem bekannten Namen:

import os
import sys

...

scriptpath = "../Test/"

# 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

41voto

Fatih Karatana Punkte 2290

Sie haben nicht viele komplexe Methoden, um eine Python-Datei von einem Ordner in einen anderen zu importieren. Erstellen Sie einfach eine __init__.py Datei, um diesen Ordner als Python-Paket zu deklarieren, und gehen Sie dann zu Ihrer Host-Datei, in die Sie importieren möchten, indem Sie einfach

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X