Wywołaj funkcję z innego pliku w Pythonie


496

Set_up: Mam plik .py dla każdej funkcji, której muszę używać w programie.

W tym programie muszę wywołać funkcję z plików zewnętrznych.

Próbowałem:

from file.py import function(a,b)

Ale dostaję błąd:

ImportError: Brak modułu o nazwie „file.py”; plik nie jest pakietem

Jak rozwiązać ten problem?


65
from file import function. Nie potrzeba rozszerzeń plików ani parametrów funkcji
samrap

4
Prawdopodobnie powinieneś przejść przez sekcję modułów w tutorialu Python.
Burhan Khalid

Tylko upewnij się, że jeśli używasz PyCharms, rozpozna tylko nazwę pliku rozdzielanego podkreśleniem.
Jerry,

Również jeśli chcesz zaimportować funkcję z file.py, upewnij się, że w katalogu nie ma pakietu o nazwie file.
SomeBruh

Odpowiedzi:


553

Nie ma potrzeby dodawania file.pypodczas importowania. Po prostu napisz from file import function, a następnie wywołaj funkcję za pomocą function(a, b). Powodem, dla którego to może nie działać, jest to, że filejest to jeden z podstawowych modułów Pythona, więc sugeruję zmianę nazwy pliku.

Zauważ, że jeśli starasz się od funkcji importu a.pydo pliku o nazwie b.py, trzeba się upewnić, że a.pyi b.pysą w tym samym katalogu.


3
„Plik” był tylko symbolem zastępczym pytania, które zadaję, a nie rzeczywistą nazwą pliku. Ale dziękuję. Spróbuję tego i skontaktuję się z tobą.
user2977230,

4
Próbowałem tego, ale nadal pojawia się błąd: Czy ma to coś wspólnego z Python 3, czy jest to ogólny problem?
DarkRose

4
@GamesBrainiac, co jeśli plik, z którego chcesz importować funkcje, znajduje się w innym katalogu? Czy mogę dołączyć ścieżkę pliku poprzedzającą nazwę pliku, czy może jest coś bardziej skomplikowanego?
Tom

6
@ Tom Musisz dodać tę ścieżkę do zmiennej PYTHONPATH, jeśli jeszcze jej nie ma.
Games Brainiac

13
Czy istnieje sposób na zaimportowanie funkcji z pliku a.py do pliku b.py, jeśli nie znajdują się one w tym samym katalogu?
Nirvan Sengupta

192

Przede wszystkim nie potrzebujesz .py.

Jeśli masz plik a.pyi masz w nim kilka funkcji:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

I chcesz je zaimportować z.py, musisz napisać

from a import b, c

47
możesz także importować *
Dimitar Marinov

1
@DimitarMarinov Z * zastąpiono nazwą pliku?
Karlo

3
@Karlo, nie, tylko *
Dimitar Marinov

26
użycie „importu” jest uważane za złą praktykę. Jawne jest lepsze niż niejawne.
Francisco Gutiérrez

Jeśli a.py znajduje się w folderze, powiedz fol1, to jak go zaimportować? @ dimitar-marinov
Aditya C

57

Możesz to zrobić na 2 sposoby. Po pierwsze, wystarczy zaimportować określoną funkcję z pliku.py. Aby to zrobić, użyj

from file import function

Innym sposobem jest zaimportowanie całego pliku

import file as fl

Następnie możesz wywołać dowolną funkcję w pliku file.py za pomocą

fl.function(a,b)

36

Możesz również wywołać funkcję z innego katalogu, na wypadek, gdybyś nie mógł lub nie chcesz mieć funkcji w tym samym katalogu, w którym pracujesz. Możesz to zrobić na dwa sposoby (być może jest więcej alternatyw, ale te były dla mnie skuteczne).

Alternatywa 1 Tymczasowo zmień katalog roboczy

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

Alternatywa 2 Dodaj katalog, w którym masz swoją funkcję, do sys.path

import sys

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

from file import function

1
czy to nie to samo, co dodanie ścieżki do PYTHONPATH?
Birish

33

Jeśli plik ma inną strukturę pakietu i chcesz wywołać go z innego pakietu, możesz wywołać go w ten sposób:

Załóżmy, że w projekcie Python masz następującą strukturę pakietów:

Pakiet Python i struktura plików

w - com.my.func.DifferentFunctionplik python masz jakąś funkcję, na przykład:

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

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

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

I chcesz wywoływać różne funkcje Example3.py, a następnie w następujący sposób:

Zdefiniuj Example3.pyplik importu instrukcji do importu wszystkich funkcji

from com.my.func.DifferentFunction import *

lub zdefiniuj nazwę każdej funkcji, którą chcesz zaimportować

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

Następnie Example3.pymożesz wywołać funkcję do wykonania:

num1 = 20
num2 = 10

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

Wynik:

 add :  30

 sub :  10

 mul :  200

3
glob import jest odradzany.
jdhao

21

Znalazłem tę samą funkcję, ale musiałem wykonać poniższe czynności, aby działała.

Jeśli widzisz „ModuleNotFoundError: Brak modułu o nazwie”, prawdopodobnie potrzebujesz kropki (.) Przed nazwą pliku, jak poniżej;

z funkcji importu plików


13

Najpierw zapisz plik w formacie .py (na przykład my_example.py). A jeśli ten plik ma funkcje,

def xyz():

        --------

        --------

def abc():

        --------

        --------

W funkcji wywoływania wystarczy wpisać poniższe linie.

nazwa_pliku: mój_przykład2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
Nie wiem, czy mój błąd dotyczy wersji Pythona. Wybieram ten przykład import fn(bez rozszerzenia) i używam ich bezpośrednio w głównym pliku fn.my_funcion(). Kiedy używam import fn.pypróbuje załadować plik py.py, który nie istnieje. Używanie from fn.py import funcnameteż nie działało. Dziękuję Ci.
m3nda

13

Zmień nazwę modułu na coś innego niż „plik”.

Następnie upewnij się, że wywołujesz funkcję, która:

1) jeśli importujesz cały moduł, podczas wywoływania go powtórz nazwę modułu:

import module
module.function_name()

lub

import pizza
pizza.pizza_function()

2) lub jeśli importujesz określone funkcje, funkcje z aliasem lub wszystkie funkcje za pomocą *, nie powtarzasz nazwy modułu:

from pizza import pizza_function
pizza_function()

lub

from pizza import pizza_function as pf
pf()

lub

from pizza import *
pizza_function()

9

Funkcje z pliku .py (mogą oczywiście znajdować się w innym katalogu) można po prostu zaimportować, najpierw pisząc katalogi, a następnie nazwę pliku bez rozszerzenia .py:

from directory_name.file_name import function_name

A później być używane: function_name()


8

Inside MathMethod.Py.

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

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

Wewnątrz Main.Py

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

Wyjście: 1200


6

Nie musisz dodawać file.py.

Po prostu trzymaj plik w tej samej lokalizacji z plikiem, z którego chcesz go zaimportować. Następnie wystarczy zaimportować funkcje:

from file import a, b

Och, jasne, że nie. Nie chciałem pisać .py To literówka
Mohan

4

Plik powinien znajdować się w tym samym miejscu, co pliki Pythona, które próbujesz zaimportować. Wystarczy „z funkcji importu plików”.


4

dodaj kropkę (.) przed nazwą pliku, jeśli chcesz zaimportować ten plik, który znajduje się w tym samym katalogu, w którym uruchamiasz swój kod.

Na przykład korzystam z pliku o nazwie a.py i chcę zaimportować metodę o nazwie addFun zapisaną w b.py, a b.py znajduje się w tym samym katalogu

z .b importu addFun


2

Załóżmy, że plik, który chcesz wywołać, to inny plik.py, a metodą, którą chcesz wywołać, jest metoda1, a następnie najpierw zaimportuj plik, a następnie metodę

from anotherfile import method1

jeśli metoda1 jest częścią klasy, niech klasa będzie klasą1, to

from anotherfile import class1

następnie utwórz obiekt klasy1, załóżmy, że nazwa obiektu to ob1

ob1 = class1()
ob1.method1()

2

w moim przypadku nazwałem mój plik helper.scrap.pyi nie mogłem go uruchomić, dopóki nie zmienię nahelper.py


1
Nie sądzę, że możesz. lub - w nazwach plików
JeffCharter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.