Wywołanie funkcji z innego pliku?

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

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

Próbowałem:

from file.py import function(a,b)

Ale dostaję błąd:

ImportError: no module named 'file.py'; plik nie jest pakietem

Jak rozwiązać ten problem?

Author: martineau, 2013-12-01

17 answers

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

Zauważ, że jeśli próbujesz zaimportować funkcje z a.py do pliku o nazwie b.py, musisz upewnić się, że a.py i b.py znajdują się w tym samym katalogu.

 656
Author: Games Brainiac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:26:43

Po pierwsze nie potrzebujesz .py.

Jeśli Masz plik a.py i w środku masz jakieś funkcje:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

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

from a import b, c
 220
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:22:45

Możesz to zrobić na dwa sposoby. Najpierw wystarczy zaimportować określoną funkcję, z której chcesz file.py. aby to zrobić użyj

from file import function

Innym sposobem jest zaimportowanie całego pliku

import file as fl

Wtedy możesz wywołać dowolną funkcję wewnątrz file.py using

fl.function(a,b)
 74
Author: Pulkit Bansal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 07:07:13

Jeśli Twój plik znajduje się w innej strukturze pakietu i chcesz wywołać go z innego pakietu, możesz wywołać go w ten sposób:

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

Python pakiet i struktura plików

W pliku - com.my.func.DifferentFunction Pythona masz jakąś funkcję, np.:

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

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

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

I chcesz wywołać różne funkcje z Example3.py, Następnie możesz to zrobić w następujący sposób:

Definiowanie instrukcji importu w Example3.py - plik do importu wszystkich function

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 w Example3.py możesz wywołać funkcję dla execute:

num1 = 20
num2 = 10

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

Wyjście:

 add :  30

 sub :  10

 mul :  200
 58
Author: abanmitra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-31 12:32:19

Możesz wywołać funkcję również z innego katalogu, jeśli nie możesz 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 są dla mnie skuteczne).

Alternatywa 1 Tymczasowo Zmień swój 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.ścieżka

import sys

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

from file import function
 43
Author: Juan Ossa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 00:29:37

Natknąłem się na tę samą funkcję, ale musiałem zrobić poniżej, aby to działało.

Jeśli widzisz 'ModuleNotFoundError: No module named', prawdopodobnie potrzebujesz kropki(.) przed nazwą pliku jak poniżej;

Z .plik import funtion

 25
Author: Ricky Boy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 21:59:37

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

def xyz():

        --------

        --------

def abc():

        --------

        --------

W wywołującej funkcji wystarczy wpisać poniższe linie.

Nazwa_pliku: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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

 13
Author: Nagaraj Simpi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:27:55

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

Wtedy również upewnij się, gdy wywołujesz funkcję, że:

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

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 używając*, 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()
 13
Author: misterrodger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-24 20:08:41

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

from directory_name.file_name import function_name

I Później być używane: function_name()

 13
Author: Weky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-24 14:44:54

Wewnątrz 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

 9
Author: Mahabubuzzaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 08:52:07

Nie musisz dodawać file.py.

Po prostu zachowaj plik w tej samej lokalizacji z plikiem, z którego chcesz go zaimportować. Następnie po prostu zaimportuj swoje funkcje:

from file import a, b
 6
Author: Mohan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:29:03

Plik powinien znajdować się w tym samym miejscu, co Pliki Pythona, które próbujesz zaimportować. Wystarczy również funkcja "from file import".

 5
Author: Girish M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:28:37

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

Na przykład uruchamiam plik o nazwie a.py i chcę zaimportować metodę o nazwie addFun, która jest napisana w b.py, oraz b.py czy istnieje w tym samym katalogu

Od .b import addFun

 5
Author: Shravan Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-29 14:41:57

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

from anotherfile import method1

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

from anotherfile import class1

Następnie utwórz obiekt klasy 1, Załóżmy, że nazwa obiektu to ob1, a następnie

ob1 = class1()
ob1.method1()
 2
Author: Amir Md Amiruzzaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-02 02:02:12

W moim przypadku nazwałem mój plik helper.scrap.py i nie mogłem go uruchomić, dopóki nie zmieniłem na helper.py

 2
Author: bresleveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-15 16:59:34

Żadne z powyższych rozwiązań nie zadziałało dla mnie. Mam błąd. Więc moim rozwiązaniem było importowanie jak poniżej

from . import filename # without .py  

W moim pierwszym pliku mam zdefiniowaną funkcję fun jak poniżej

# file name is firstFile.py
def fun():
  print('this is fun')

Wewnątrz drugiego pliku powiedzmy, że chcę wywołać funkcję fun

from . import firstFile

def secondFunc():
   firstFile.fun() # calling `fun` from the first file

secondFunc() # calling the function `secondFunc` 
 2
Author: NuOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-02 00:38:06

W moim skrypcie głównym detectiveROB.py pliku potrzebuję wywołania passGen funkcji, która generuje hash hasła i że funkcje znajdują się pod modules\passwordGen.py

Najszybszym i najłatwiejszym rozwiązaniem dla mnie jest

Poniżej znajduje się moja struktura katalogów

Tutaj wpisz opis obrazka

Więc w detectiveROB.py zaimportowałem swoją funkcję z poniższą składnią

from modules.passwordGen import passGen

Tutaj wpisz opis obrazka

 0
Author: Mansur Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-24 19:11:37