Вызов функции из другого файла в Python


499

Set_up: у меня есть файл .py для каждой функции, которую мне нужно использовать в программе.

В этой программе мне нужно вызывать функцию из внешних файлов.

Я пробовал:

from file.py import function(a,b)

Но я получаю ошибку:

Ошибка импорта: нет модуля с именем file.py; файл не является пакетом

Как мне исправить эту проблему?


65
from file import function, Нет необходимости в расширениях файлов или параметрах функций
samrap

4
Вы, вероятно, должны пройти через раздел модулей в руководстве по Python.
Бурхан Халид

Просто убедитесь, что при использовании PyCharms, он будет распознавать только имя файла с разделителями подчеркивания.
Джерри

Также, если вы хотите импортировать функцию из file.py, убедитесь, что в вашем каталоге нет пакета с именем file.
SomeBruh

Ответы:


555

Нет необходимости добавлять file.pyпри импорте. Просто напишите from file import function, а затем вызовите функцию с помощью function(a, b). Причина, по которой это может не сработать, заключается в том, что fileэто один из основных модулей Python, поэтому я предлагаю вам изменить имя вашего файла.

Обратите внимание , что если вы пытаетесь импортировать функции из a.pyв файл с именем b.py, вам нужно будет убедиться , что a.pyи b.pyв том же каталоге.


3
«Файл» был просто заполнителем для вопроса, который я задаю, а не фактическим именем файла. Однако, спасибо. Я попробую это и вернусь к вам.
user2977230

4
Я пробовал это, но все равно показывает ошибку: это имеет какое-либо отношение к Python 3, или это общая проблема?
DarkRose

4
@GamesBrainiac, что если файл, из которого вы хотите импортировать функции, находится в другом каталоге? Могу ли я указать путь к файлу, предшествующий имени файла, или есть что-то более сложное?
Том

6
@Tom Вы должны добавить этот путь в переменную PYTHONPATH, если ее там еще нет.
Игры Brainiac

13
Есть ли способ импортировать функции из a.py в файл b.py, если они не находятся в одном каталоге?
Нирван Сенгупта

193

Прежде всего, вам не нужно .py.

Если у вас есть файл a.pyи внутри у вас есть некоторые функции:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

И вы хотите импортировать их, z.pyвы должны написать

from a import b, c

47
Вы также можете импортировать *
Димитар Маринов

1
@DimitarMarinov С * заменить на имя файла?
Карло

3
@ Карло, нет, просто *
Димитар Маринов

26
использование «import *» считается плохой практикой. Явное лучше, чем неявное.
Франциско Гутьеррес,

Если a.py находится в папке скажем fol1, то как он будет импортирован? @ dimitar-marinov
Aditya C

57

Вы можете сделать это двумя способами. Во-первых, просто импортируйте нужную функцию из файла file.py. Для этого используйте

from file import function

Другой способ - импортировать весь файл.

import file as fl

Затем вы можете вызвать любую функцию внутри file.py, используя

fl.function(a,b)

36

Вы также можете вызвать функцию из другого каталога, если вы не можете или не хотите иметь функцию в том же каталоге, где работаете. Вы можете сделать это двумя способами (возможно, есть больше альтернатив, но это те, которые работали для меня).

Альтернатива 1 Временно измените ваш рабочий каталог

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

Альтернатива 2 Добавьте каталог, в котором у вас есть функция, в sys.path.

import sys

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

from file import function

1
разве это не то же самое, что добавить путь к PYTHONPATH?
Бирш

33

Если ваш файл находится в другой структуре пакета, и вы хотите вызвать его из другого пакета, то вы можете вызвать его следующим образом:

Допустим, у вас есть следующая структура пакета в вашем проекте Python:

Пакет Python и структура файла

В - com.my.func.DifferentFunctionфайле Python у вас есть какая-то функция, например:

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

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

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

И вы хотите вызывать различные функции Example3.py, а затем сделать это следующим образом:

Определить оператор импорта в Example3.pyфайле для импорта всех функций

from com.my.func.DifferentFunction import *

или определите имя каждой функции, которую вы хотите импортировать

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

Затем Example3.pyвы можете вызвать функцию для выполнения:

num1 = 20
num2 = 10

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

Вывод:

 add :  30

 sub :  10

 mul :  200

3
импорт глобуса не рекомендуется.
jdhao

21

Наткнулся на ту же функцию, но мне пришлось сделать ниже, чтобы она заработала.

Если вы видите «ModuleNotFoundError: модуль не назван», вам, вероятно, нужна точка (.) Перед именем файла, как показано ниже;

из функции импорта .file


13

Сначала сохраните файл в формате .py (например, my_example.py). И если этот файл имеет функции,

def xyz():

        --------

        --------

def abc():

        --------

        --------

В вызывающей функции вам просто нужно ввести следующие строки.

имя_файла: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
Я не знаю, моя ли ошибка из-за версий Python. Что я делаю, выбирая этот пример import fn(без расширения) и используя их непосредственно в основном файле fn.my_funcion(). Когда я использую import fn.pyпытается загрузить файл py.py, который не существует. Использование from fn.py import funcnameтоже не сработало. Спасибо.
m3nda

13

Переименуйте модуль в нечто иное, чем «файл».

Также убедитесь, что при вызове функции:

1) если вы импортируете весь модуль, вы повторяете имя модуля при его вызове:

import module
module.function_name()

или

import pizza
pizza.pizza_function()

2) или если вы импортируете определенные функции, функции с псевдонимом или все функции, использующие *, вы не повторяете имя модуля:

from pizza import pizza_function
pizza_function()

или

from pizza import pizza_function as pf
pf()

или

from pizza import *
pizza_function()

9

Функции из файла .py (могут (конечно) находиться в другом каталоге) можно просто импортировать, сначала написав каталоги, а затем имя файла без расширения .py:

from directory_name.file_name import function_name

И позже будет использоваться: function_name()


8

Внутри MathMethod.Py.

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

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

Внутри Main.Py

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

Выход: 1200


6

Вам не нужно добавлять file.py.

Просто храните файл в одном месте с файлом, из которого вы хотите его импортировать. Затем просто импортируйте ваши функции:

from file import a, b

О, конечно, это не так. Я не хотел печатать .py Это опечатка
Мохан,

4

Файл должен быть в том же месте, что и файлы Python, которые вы пытаетесь импортировать. Также достаточно «из функции импорта файлов».


4

добавьте точку (.) перед именем файла, если вы хотите импортировать этот файл, который находится в том же каталоге, где вы выполняете свой код.

Например, я запускаю файл с именем a.py и хочу импортировать метод с именем addFun, который написан на b.py, и b.py находится в том же каталоге

из .b import addFun


2

Предположим, файл, который вы хотите вызвать, - anotherfile.py, а метод, который вы хотите вызвать, - method1, затем сначала импортируйте файл, а затем метод

from anotherfile import method1

если method1 является частью класса, пусть класс будет class1, тогда

from anotherfile import class1

затем создайте объект класса 1, предположим, что имя объекта - ob1, затем

ob1 = class1()
ob1.method1()

2

в моем случае я назвал свой файл helper.scrap.pyи не мог заставить его работать, пока я не изменился наhelper.py


1
Я не думаю, что вы можете иметь. или - в именах файлов
JeffCharter
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.