wake-up-neo.com

Wie importiere ich andere Python-Dateien?

Wie importiere ich andere Dateien in Python?

  1. Wie genau kann ich eine bestimmte Python-Datei wie import file.py importieren?
  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 nur ein bestimmter Teil aus der Datei geladen wird.

Zum Beispiel in main.py habe ich:

from extra import * 

Obwohl dies mir alle Definitionen in extra.py gibt, wenn ich vielleicht nur eine einzige Definition möchte:

def gap():
    print
    print

Was füge ich der import-Anweisung hinzu, um nur gap von extra.py zu erhalten?

572
Tamer

importlib ist eine kürzlich hinzugefügte Ergänzung in Python, um ein Modul programmgesteuert zu importieren. Es ist nur ein Wrapper um __import__ Siehe https://docs.python.org/3/library/importlib.html#module-importlib

import importlib

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

Update: Antwort unten ist veraltet. Verwenden Sie die neuere Alternative oben.

  1. Nur import file ohne die Erweiterung '.py'.

  2. Sie können einen Ordner als Paket markieren, indem Sie eine leere Datei mit dem Namen __init__.py hinzufügen.

  3. Sie können die __import__-Funktion verwenden. Der Modulname wird als String verwendet. (Wiederum: Modulname ohne die Erweiterung '.py'.)

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

    Geben Sie help(__import__) für weitere Details ein.

333
Radian

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

Wählen Sie nicht einfach die erste Importstrategie aus, die für Sie geeignet ist. Andernfalls müssen Sie die Codebase später erneut schreiben, wenn Sie feststellen, dass sie nicht Ihren Anforderungen entspricht. 

Ich erkläre zunächst das einfachste Beispiel # 1, dann gehe ich zum professionellsten und robustesten Beispiel # 7 über

Beispiel 1, Importieren 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. Holen Sie sich den Python-Interpreter: 

    [email protected]:/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 fox.py aufgerufen. 

Beispiel 2, Verwenden Sie execfile oder ( exec in Python 3 ) in einem Skript, um die andere Python-Datei an Ort und Stelle 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ühre die Datei aus:

    [email protected]:/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 von ... importieren ... 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. Führen Sie es so aus:

    [email protected]:/home/el/foo3$ python main.py 
    where are the nuclear wessels?
    

    Wenn Sie andere Funktionen in chekov.py definiert haben, wären diese nur verfügbar, wenn Sie import *

Beispiel 4, Importieren von riaa.py, wenn sich die Datei an einem anderen Ort als dem Importort befindet

  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. Starte es:

    [email protected]:/home/el/foo4$ python main.py 
    computers are transforming into a noose and a Yoke for humans
    

    Das importiert alles in der Fremddatei aus einem anderen Verzeichnis.

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

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

Beispiel 6: Importieren Sie Ihre Datei über den Python-Starthaken:

Siehe: https://docs.python.org/3/library/user.html

Fügen Sie diesen Code in Ihr Home-Verzeichnis in ~/.pythonrc.py ein.

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

Starte es: 

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

Diese Jist geht an: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Schicken Sie Ihre U-Boote mit.

Beispiel 7, am robustesten: Importieren Sie Dateien in Python mit dem Befehl für den bloßen Import:

  1. Erstellen Sie ein neues Verzeichnis /home/el/foo5/
  2. Erstellen Sie ein neues Verzeichnis /home/el/foo5/herp
  3. Erstellen Sie eine leere Datei mit dem Namen __init__.py unter herp:

    [email protected]:/home/el/foo5/herp$ touch __init__.py
    [email protected]:/home/el/foo5/herp$ ls
    __init__.py
    
  4. Erstellen Sie ein neues Verzeichnis/home/el/foo5/herp/derp

  5. Erstellen Sie unter derp eine weitere __init__.py-Datei:

    [email protected]:/home/el/foo5/herp/derp$ touch __init__.py
    [email protected]:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. Erstellen Sie unter/home/el/foo5/herp/derp eine neue Datei mit dem Namen yolo.py. Fügen Sie dies dort ein:

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

    from herp.derp.yolo import skycake
    skycake()
    
  8. Starte es:

    [email protected]:/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 dieses Verzeichnis als importierbares Paket vorsieht.

Wenn Sie sehen möchten, wie Sie ALLE .py-Dateien in ein Verzeichnis aufnehmen, lesen Sie hier: https://stackoverflow.com/a/20753073/445131

Bonusprotip

unabhängig davon, ob Sie Mac, Linux oder Windows verwenden, müssen Sie pythons Leerlauf-Editor wie hier beschrieben verwenden. Es wird Ihre Python-Welt freischalten. http://www.youtube.com/watch?v=DkW5CSZ_VII

787
Eric Leschinski

So importieren Sie eine bestimmte Python-Datei zur Laufzeit mit einem bekannten Namen:

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

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 zu Ihrer Host-Datei, in die Sie einfach importieren möchten 

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

25
Fatih Karatana

Dokument importieren .. - Link zur Referenz 

Die __init__.py-Dateien sind erforderlich, damit Python die Verzeichnisse als Pakete enthaltend behandelt. Dies geschieht, um zu verhindern, dass Verzeichnisse mit einem allgemeinen Namen, z. B. Zeichenfolge, gültige Module versehentlich ausblenden, die später im Modulsuchpfad auftreten.

__init__.py kann nur eine leere Datei sein, es kann jedoch auch Initialisierungscode für das Paket ausgeführt oder die Variable __all__ festgelegt werden.

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module
15
Sanyal
from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

und 

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

Hier sind die zwei einfachen Möglichkeiten, die ich inzwischen verstanden habe, und stellen Sie sicher, dass Ihre Datei "file.py", die Sie als Bibliothek importieren möchten, nur in Ihrem aktuellen Verzeichnis vorhanden ist.

7
Devendra Bhat

.py-Dateien können am besten mit __init__.py importiert werden. Am einfachsten ist es, eine leere Datei mit dem Namen __init__.py in demselben Verzeichnis zu erstellen, in dem sich Ihre.py-Datei befindet.

dieses post von Mike Grouchy ist eine großartige Erklärung für __init__.py und seine Verwendung zum Erstellen, Importieren und Einrichten von Python-Paketen.

4
supreme

Wie ich importiere, ist die Datei zu importieren und die Kurzbezeichnung des Namens zu verwenden.

import DoStuff.py as DS
DS.main()

Vergessen Sie nicht, dass Ihre Importdatei MÜSSEN mit der Erweiterung .py benannt werden muss

3
Luke359

Ich möchte diese Bemerkung hinzufügen, die ich an anderer Stelle nicht eindeutig finde; Innerhalb eines Moduls/Pakets muss beim Laden aus Dateien der Name des Moduls/Pakets mit dem Zeichen mymodule versehen werden. Stellen Sie sich vor, dass mymodule folgendes Layout hat:

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

Beim Laden von somefile.py/otherstuff.py aus __init__.py sollte der Inhalt folgendermaßen aussehen:

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

Es gibt verschiedene Möglichkeiten, Ihr python -Skript mit dem Namen abc.py einzuschließen

  1. z.B. Wenn Ihre Datei abc.py heißt (import abc) Die Einschränkung besteht darin, dass sich Ihre Datei an derselben Stelle befinden muss, an der sich Ihr aufrufendes python-Skript befindet.

import abc

  1. z.B. Wenn sich Ihre python -Datei im Windows-Ordner befindet. Der Windows-Ordner befindet sich an derselben Stelle, an der sich Ihr aufrufendes python-Skript befindet.

aus Ordner importieren abc

  1. Incase abc.py script ist im internen Ordner verfügbar, der sich im Ordner befindet

aus folder.internal_folder importieren abc

  1. Wie von James oben beantwortet, falls sich Ihre Datei an einem festen Ort befindet

import os
import sys
scriptpath = "../Test/MyModule.py"
sys.path.append (os.path.abspath (scriptpath))
MyModule importieren

Wenn Ihr Skript python aktualisiert wird und Sie nicht hochladen möchten, verwenden Sie diese Anweisungen für die automatische Aktualisierung. Bonus :)

%load_ext autoreload 
%autoreload 2
1
rishi jain

Falls sich das module , das Sie importieren möchten, nicht in einem Unterverzeichnis befindet, versuchen Sie Folgendes und führen Sie app.py im tiefsten gemeinsamen übergeordneten Verzeichnis aus:

Verzeichnisaufbau:

/path/to/common_dir/module/file.py
/path/to/common_dir/application/app.py
/path/to/common_dir/application/subpath/config.json

Hängen Sie in app.py den Pfad des Clients an sys.path an:

import os, sys, inspect

sys.path.append(os.getcwd())
from module.file import MyClass
instance = MyClass()

Optional (wenn Sie beispielsweise Konfigurationen laden) (Inspect scheint für meine Anwendungsfälle die robusteste zu sein)

# Get dirname from inspect module
filename = inspect.getframeinfo(inspect.currentframe()).filename
dirname = os.path.dirname(os.path.abspath(filename))
MY_CONFIG = os.path.join(dirname, "subpath/config.json")

Lauf

[email protected]:/path/to/common_dir$ python3 application/app.py

Diese Lösung funktioniert sowohl für cli als auch für PyCharm.

1

Nur zum Importieren einer Python-Datei in eine andere Python-Datei

nehmen wir an, ich habe helper.py python-Datei, die eine Anzeigefunktion hat wie

def display():
    print("I'm working sundar gsv")

In app.py können Sie nun die Anzeigefunktion verwenden.

import helper
helper.display()

Die Ausgabe,

I'm working sundar gsv

HINWEIS: Die Erweiterung .py muss nicht angegeben werden.

0
Sundar Gsv

Eine sehr unbekannte Funktion von Python ist die Fähigkeit, Zip-Dateien zu importieren:

library.Zip
|-library
|--__init__.py

Die Datei __init__.py des Pakets enthält Folgendes:

def dummy():
    print 'Testing things out...'

Wir können ein weiteres Skript schreiben, das ein Paket aus dem Zip-Archiv importieren kann. Es ist nur erforderlich, die Zip-Datei zum sys.path hinzuzufügen.

import sys
sys.path.append(r'library.Zip')

import library

def run():
    library.dummy()

run()
0
Farsheed

Sie können dies auch tun: from filename import something

beispiel: from client import Client Beachten Sie, dass Sie die Erweiterung .py .pyw .pyui nicht benötigen.

0
Lucas Soares

Erster Fall: Sie möchten die Datei A.py in die Datei B.py importieren. Diese beiden Dateien befinden sich in demselben Ordner wie folgt:

. 
├── A.py 
└── B.py

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

import A

Dann können Sie alle Funktionen der Datei A.py in der Datei B.py nutzen.


Zweiter Fall: Sie möchten die Datei folder/A.py in die Datei B.py importieren. Diese beiden Dateien befinden sich nicht im selben Ordner.

.
├── B.py
└── folder
     └── A.py

Sie können dies in Datei B tun:

import folder.A

Dann können Sie alle Funktionen der Datei A.py in der Datei B.py nutzen.


Zusammenfassung: Im ersten Fall ist Datei A.py ein Modul, das Sie in Datei B.py importieren. Sie haben die Syntax import module_name verwendet. Im zweiten Fall ist folder das Paket, das das Modul A.py enthält. Sie haben die Syntax import package_name.module_name verwendet.

Weitere Informationen zu Paketen und Modulen finden Sie unter link .

0
Bohao LI

Es gibt viele Möglichkeiten, wie oben aufgeführt, aber ich finde, dass ich nur den Inhalt einer Datei importieren möchte, und keine Zeilen und Zeilen schreiben und andere - Module importieren muss . Also habe ich einen Weg gefunden, um den Inhalt einer Datei abzurufen, selbst mit der Punkt-Syntax (file.property), anstatt die importierte Datei mit Ihrer zu verbinden .
Zunächst einmal ist hier meine Datei, die ich importieren werde, data.py

    testString= "A string literal to import and test with"


Hinweis: Sie können stattdessen die Erweiterung .txt verwenden.
Beginnen Sie in mainfile.py mit dem Öffnen und Abrufen des Inhalts.

    #!usr/bin/env python3
    Data=open('data.txt','r+').read()

Jetzt haben Sie den Inhalt als String, aber der Zugriff auf data.testString führt zu einem Fehler, da data eine Instanz der str-Klasse ist und selbst wenn sie über eine Eigenschaft testString verfügt, sie nicht die erwarteten Ergebnisse erfüllt.
Als Nächstes erstellen Sie eine Klasse. Zum Beispiel (Wortspiel beabsichtigt), ImportedFile

    class ImportedFile:

Und füge dies ein (mit der entsprechenden Einrückung):

    exec(data)


Und schließlich data erneut so zuweisen:

    data=ImportedFile()

Und das ist es! Greifen Sie einfach wie bei jedem anderen Modul auf. Geben Sie print(data.testString) ein, um auf die Konsole A string literal to import and test with..__ zu drucken.
Wenn Sie jedoch das Äquivalent von from mod import * wünschen, löschen Sie einfach die Klasse, die Instanzzuweisung und die Variable exec.

Hoffe das hilft:)
- Benji

0
Benj

Auf diese Weise habe ich eine Funktion aus einer Python-Datei aufgerufen, die für mich flexibel ist, um beliebige Funktionen aufzurufen.

import os, importlib, sys

def callfunc(myfile, myfunc, *args):
    pathname, filename = os.path.split(myfile)
    sys.path.append(os.path.abspath(pathname))
    modname = os.path.splitext(filename)[0]
    mymod = importlib.import_module(modname)
    result = getattr(mymod, myfunc)(*args)
    return result

result = callfunc("pathto/myfile.py", "myfunc", arg1, arg2)
0
Xiao-Feng Li

Das mag verrückt klingen, aber Sie können einfach einen symbolischen Link zu der Datei erstellen, die Sie importieren möchten, wenn Sie nur ein Wrapper-Skript erstellen.

0
Jonathan

Befindet sich die definierte Funktion in einer Datei x.py:

def greet():
    print('Hello! How are you?')

Schreiben Sie in die Datei, in die Sie die Funktion importieren, Folgendes:

from x import greet

Dies ist nützlich, wenn Sie nicht alle Funktionen in eine Datei importieren möchten.

0
Sid