Rufen Sie eine Funktion aus einer anderen Datei in Python auf

497

Set_up: Ich habe eine .py-Datei für jede Funktion, die ich in einem Programm verwenden muss.

In diesem Programm muss ich die Funktion aus den externen Dateien aufrufen.

Ich habe es versucht:

from file.py import function(a,b)

Aber ich bekomme den Fehler:

ImportError: Kein Modul mit dem Namen 'file.py'; Datei ist kein Paket

Wie behebe ich dieses Problem?

user2977230
quelle
65
from file import function. Keine Notwendigkeit für Dateierweiterungen oder Funktionsparameter
Samrap
4
Sie sollten wahrscheinlich den Modulabschnitt im Python-Tutorial durchgehen .
Burhan Khalid
Stellen Sie nur sicher, dass bei Verwendung von PyCharms nur ein durch Unterstriche getrennter Dateiname erkannt wird.
Jerry
Wenn Sie die Funktion aus dem importieren möchten file.py, stellen Sie sicher, dass sich in Ihrem Verzeichnis kein Paket mit dem Namen befindet file.
SomeBruh

Antworten:

553

file.pyBeim Importieren muss nichts hinzugefügt werden . Schreiben Sie einfach from file import functionund rufen Sie die Funktion mit auf function(a, b). Der Grund, warum dies möglicherweise nicht funktioniert, liegt darin, dass filees sich um eines der Kernmodule von Python handelt. Ich empfehle daher, den Namen Ihrer Datei zu ändern.

Beachten Sie, dass , wenn Sie zu Importfunktionen von dem Versuch , a.pyin eine Datei namens b.py, müssen Sie sicherstellen , dass a.pyund b.pyin demselben Verzeichnis befindet.

Spiele Brainiac
quelle
3
Die "Datei" war nur ein Platzhalter für die Frage, die ich stelle, nicht der tatsächliche Dateiname. Trotzdem danke. Ich werde es versuchen und mich bei Ihnen melden.
user2977230
4
Ich habe es versucht, aber es zeigt immer noch den Fehler: Hat es etwas mit Python 3 zu tun oder ist es ein allgemeines Problem?
DarkRose
4
@GamesBrainiac, was ist, wenn sich die Datei, aus der Sie Funktionen importieren möchten, in einem anderen Verzeichnis befindet? Kann ich den Dateipfad vor dem Dateinamen einfügen oder gibt es etwas Komplizierteres?
Tom
6
@ Tom Sie müssen diesen Pfad zur Variablen PYTHONPATH hinzufügen, falls er noch nicht vorhanden ist.
Spiele Brainiac
13
Gibt es eine Möglichkeit, Funktionen von a.py in eine Datei b.py zu importieren, wenn sie sich nicht im selben Verzeichnis befinden?
Nirvan Sengupta
193

Zunächst einmal brauchen Sie keine .py.

Wenn Sie eine Datei haben a.pyund darin haben Sie einige Funktionen:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

Und wenn Sie sie importieren möchten, müssen z.pySie schreiben

from a import b, c
Salvador Dali
quelle
47
Sie können auch importieren *
Dimitar Marinov
1
@ DimitarMarinov Mit * durch den Dateinamen ersetzt?
Karlo
3
@ Karlo, nein, nur *
Dimitar Marinov
26
Die Verwendung von "import *" wird als schlechte Praxis angesehen. Explizit ist besser als implizit.
Francisco Gutiérrez
Wenn sich a.py in einem Ordner befindet, z. B. fol1, wie soll es dann importiert werden? @ dimitar-marinov
Aditya C
57

Sie können dies auf zwei Arten tun. Zunächst müssen Sie nur die gewünschte Funktion aus file.py importieren. Verwenden Sie dazu

from file import function

Eine andere Möglichkeit besteht darin, die gesamte Datei zu importieren

import file as fl

Dann können Sie jede Funktion in file.py mit aufrufen

fl.function(a,b)
Pulkit Bansal
quelle
36

Sie können die Funktion auch aus einem anderen Verzeichnis aufrufen, falls Sie die Funktion nicht in demselben Verzeichnis haben möchten oder möchten, in dem Sie arbeiten. Sie können dies auf zwei Arten tun (vielleicht gibt es mehr Alternativen, aber diese haben für mich funktioniert).

Alternative 1 Ändern Sie vorübergehend Ihr Arbeitsverzeichnis

import os

os.chdir("**Put here the directory where you have the file with your function**")

from file import function

os.chdir("**Put here the directory where you were working**")

Alternative 2 Fügen Sie das Verzeichnis, in dem Sie Ihre Funktion haben, zu sys.path hinzu

import sys

sys.path.append("**Put here the directory where you have the file with your function**")

from file import function
Juan Ossa
quelle
1
Ist es nicht dasselbe wie das Hinzufügen eines Pfades zu PYTHONPATH?
Birish
33

Wenn sich Ihre Datei in einer anderen Paketstruktur befindet und Sie sie von einem anderen Paket aus aufrufen möchten, können Sie sie folgendermaßen aufrufen:

Angenommen, Sie haben in Ihrem Python-Projekt folgende Paketstruktur:

Python-Paket und Dateistruktur

In der com.my.func.DifferentFunctionPython-Datei haben Sie eine Funktion wie:

def add(arg1, arg2):
    return arg1 + arg2

def sub(arg1, arg2) :
    return arg1 - arg2

def mul(arg1, arg2) :
    return arg1 * arg2

Und Sie möchten verschiedene Funktionen von aufrufen Example3.py, dann können Sie dies folgendermaßen tun:

Definieren Sie die Importanweisung in der Example3.pyDatei für den Import aller Funktionen

from com.my.func.DifferentFunction import *

oder definieren Sie jeden Funktionsnamen, den Sie importieren möchten

from com.my.func.DifferentFunction import add, sub, mul

Dann Example3.pykönnen Sie in Funktion zum Ausführen aufrufen:

num1 = 20
num2 = 10

print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))

Ausgabe:

 add :  30

 sub :  10

 mul :  200
abanmitra
quelle
3
Der Glob-Import wird nicht empfohlen.
jdhao
21

Kam über die gleiche Funktion, aber ich musste die folgenden Schritte ausführen, damit es funktioniert.

Wenn Sie 'ModuleNotFoundError: Kein Modul mit dem Namen' sehen, benötigen Sie wahrscheinlich den Punkt (.) Vor dem Dateinamen wie folgt.

von .file Importfunktion

Ricky Boy
quelle
13

Speichern Sie zuerst die Datei im Py-Format (z. B. my_example.py). Und wenn diese Datei Funktionen hat,

def xyz():

        --------

        --------

def abc():

        --------

        --------

In der aufrufenden Funktion müssen Sie nur die folgenden Zeilen eingeben.

Dateiname: my_example2.py

============================

import my_example.py


a = my_example.xyz()

b = my_example.abc()

============================

Nagaraj Simpi
quelle
2
Ich weiß nicht, ob es bei meinem Fehler um Python-Versionen geht. Ich wähle dieses Beispiel import fn(ohne Erweiterung) und verwende sie direkt in der Hauptdatei fn.my_funcion(). Wenn ich import fn.pyversuche, die Datei py.py zu laden, existiert diese nicht. Die Verwendung from fn.py import funcnamehat auch nicht funktioniert. Vielen Dank.
m3nda
13

Benennen Sie das Modul in etwas anderes als "Datei" um.

Stellen Sie dann auch sicher, wenn Sie die Funktion aufrufen, dass:

1) Wenn Sie das gesamte Modul importieren, wiederholen Sie den Modulnamen, wenn Sie es aufrufen:

import module
module.function_name()

oder

import pizza
pizza.pizza_function()

2) oder wenn Sie bestimmte Funktionen, Funktionen mit einem Alias ​​oder alle Funktionen mit * importieren, wiederholen Sie den Modulnamen nicht:

from pizza import pizza_function
pizza_function()

oder

from pizza import pizza_function as pf
pf()

oder

from pizza import *
pizza_function()
Misterrodger
quelle
9

Funktionen aus der .py-Datei (können sich (natürlich) in einem anderen Verzeichnis befinden) können einfach importiert werden, indem zuerst Verzeichnisse und dann der Dateiname ohne die Erweiterung .py geschrieben werden:

from directory_name.file_name import function_name

Und später verwendet werden: function_name()

Weky
quelle
8

In MathMethod.Py.

def Add(a,b):
   return a+b 

def subtract(a,b):
  return a-b

Innerhalb Main.Py

import MathMethod as MM 
  print(MM.Add(200,1000))

Ausgabe: 1200

Mahabubuzzaman
quelle
6

Sie müssen nicht hinzufügen file.py.

Bewahren Sie die Datei einfach am selben Speicherort auf wie die Datei, von der Sie sie importieren möchten. Dann importieren Sie einfach Ihre Funktionen:

from file import a, b
Mohan
quelle
Oh sicher, dass es nicht so ist. Ich wollte nicht .py eingeben. Es ist ein Tippfehler
Mohan
4

Sie sollten die Datei am selben Speicherort wie die Python-Dateien haben, die Sie importieren möchten. Auch 'aus Dateiimportfunktion' reicht aus.

Girish M.
quelle
4

Fügen Sie einen Punkt (.) vor einen Dateinamen ein, wenn Sie diese Datei importieren möchten, die sich in demselben Verzeichnis befindet, in dem Sie Ihren Code ausführen.

Zum Beispiel führe ich eine Datei mit dem Namen a.py aus und möchte eine Methode namens addFun importieren, die in b.py geschrieben ist, und b.py befindet sich dort im selben Verzeichnis

aus .b import addFun

Shravan Kumar
quelle
2

Angenommen, die Datei, die Sie aufrufen möchten, ist anotherfile.py und die Methode, die Sie aufrufen möchten, ist method1. Importieren Sie dann zuerst die Datei und dann die Methode

from anotherfile import method1

Wenn Methode1 Teil einer Klasse ist, soll die Klasse Klasse1 sein

from anotherfile import class1

Erstellen Sie dann ein Objekt der Klasse 1, und nehmen Sie an, dass der Objektname ob1 lautet

ob1 = class1()
ob1.method1()
Amir Md Amiruzzaman
quelle
2

In meinem Fall habe ich meine Datei benannt helper.scrap.pyund konnte sie nicht zum Laufen bringen, bis ich zu geändert habehelper.py

Bresleveloper
quelle
1
Ich glaube nicht, dass du haben kannst. oder - in den Dateinamen
JeffCharter