Викличте функцію з іншого файлу в Python


496

Set_up: у мене є файл .py для кожної функції, яку потрібно використовувати в програмі.

У цій програмі мені потрібно викликати функцію із зовнішніх файлів.

Я спробував:

from file.py import function(a,b)

Але я отримую помилку:

ImportError: Немає модуля з назвою "file.py"; файл - не пакет

Як виправити цю проблему?


65
from file import function. Не потрібно розширень файлів чи функціональних параметрів
— samrap

4
Ви, ймовірно, повинні пройти розділ модулів у підручнику Python.
— Бурхан Халід

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

Крім того, якщо ви хочете імпортувати функцію з file.py, переконайтеся, що у вашому каталозі немає пакета з назвою file.
— SomeBruh

Відповіді:


553

Не потрібно додавати 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, якщо вони не в одному каталозі?
— Нірван Сенгупта

192

Перш за все, вам не потрібно .py.

Якщо у вас є файл a.pyі всередині вас є деякі функції:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

І ви хочете імпортувати їх у себе, z.pyви повинні написати

from a import b, c

47
ви також можете імпортувати *
— Димитар Маринов

1
@DimitarMarinov З * замінено на ім'я файлу?
— Карло

3
@Karlo, ні, просто *
— Димитар Маринов

26
використання "імпорту *" вважається поганою практикою. Явне краще, ніж неявне.
— Франсіско Гутьеррес

Якщо a.py знаходиться у папці скажімо fol1, то як її імпортувати? @ dimitar-marinov
— Aditya C

57

Це можна зробити двома способами. По-перше, це просто імпортувати конкретну функцію, яку ви хочете, з файлу.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?
— Birish

33

Якщо ваш файл має іншу структуру пакету, і ви хочете зателефонувати до нього з іншого пакету, ви можете його зателефонувати таким чином:

Скажімо, ви маєте таку структуру пакету у вашому проекті python:

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

у - com.my.func.DifferentFunctionpython-файлі у вас є якась функція, наприклад:

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теж не працювало. Дякую.
— м3нда

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 імпортувати addFun


2

Припустимо, файл, який ви хочете зателефонувати, - це інший файл file.py, а метод, який ви хочете викликати, це метод1, потім спочатку імпортуйте файл, а потім метод

from anotherfile import method1

якщо method1 є частиною класу, нехай клас буде class1, тоді

from anotherfile import class1

тоді створіть об’єкт class1, припустимо, ім'я об'єкта ob1, то

ob1 = class1()
ob1.method1()

2

у моєму випадку я назвав свій файл helper.scrap.pyі не зміг змусити його працювати, поки я не змінився наhelper.py


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