Викличте функцію з іншого файлу в 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.