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?

użytkownik2977230
źródło
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.

Games Brainiac
źródło
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
Salvador Dali
źródło
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)
Pulkit Bansal
źródło
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
Juan Ossa
źródło
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
abanmitra
źródło
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

Ricky Boy
źródło
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()

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

Nagaraj Simpi
źródło
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()
misterrodger
źródło
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()

Weky
źródło
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

Mahabubuzzaman
źródło
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
Mohan
źródło
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”.

Girish M.
źródło
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

Shravan Kumar
źródło
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()
Amir Md Amiruzzaman
źródło
2

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

bresleveloper
źródło
1
Nie sądzę, że możesz. lub - w nazwach plików
JeffCharter