파이썬에서 다른 파일에서 함수 호출


496

Set_up : 프로그램에서 사용해야하는 각 함수마다 .py 파일이 있습니다.

이 프로그램에서는 외부 파일에서 함수를 호출해야합니다.

난 노력 했어:

from file.py import function(a,b)

하지만 오류가 발생합니다.

ImportError : 'file.py'라는 모듈이 없습니다. 파일이 패키지가 아닙니다

이 문제를 어떻게 해결합니까?


65
from file import function. 파일 확장자 또는 기능 매개 변수가 필요하지 않습니다
— samrap

4
파이썬 튜토리얼에서 모듈 섹션 을 살펴보아야 할 것입니다 .
— Burhan Khalid

PyCharms를 사용하고 있는지 확인하면 밑줄로 구분 된 파일 이름 만 인식합니다.
— Jerry

또한에서 함수를 가져 오려면 file.py디렉토리에 이름이있는 패키지가 없는지 확인하십시오 file.
— SomeBruh

답변:


553

file.py가져 오는 동안 추가 할 필요가 없습니다 . 그냥 쓰고 from file import function나서를 사용하여 함수를 호출하십시오 function(a, b). 이것이 작동하지 않는 이유 file는 파이썬의 핵심 모듈 중 하나 이기 때문에 파일 이름을 변경하는 것이 좋습니다.

당신이 가져 오기 기능하려고하는 경우주의 a.py라는 파일에 b.py, 당신이 있는지 확인해야합니다 a.py와 b.py같은 디렉토리에 있습니다.


3
"파일"은 실제 파일 이름이 아니라 내가 묻는 질문의 자리 표시 자일뿐입니다. 그래도 감사합니다. 나는 이것을 시도하고 당신에게 돌아올 것입니다.
— user2977230

4
나는 이것을 시도했지만 여전히 오류를 보이고 있습니다 : 파이썬 3과 관련이 있습니까, 아니면 일반적인 문제입니까?
— DarkRose

4
@GamesBrainiac, 함수를 가져 오려는 파일이 다른 디렉토리에 있으면 어떻게합니까? 파일 이름 앞에 파일 경로를 포함시킬 수 있습니까, 아니면 더 복잡한 것이 있습니까?
— Tom

6
@Tom PYTHONPATH 변수에 아직 경로가 없으면 해당 경로를 추가해야합니다.
— Games Brainiac

13
동일한 디렉토리에 있지 않은 경우 a.py에서 b.py 파일로 함수를 가져 오는 방법이 있습니까?
— Nirvan Sengupta

192

우선 당신은 필요하지 않습니다 .py.

파일이 a.py있고 내부에 몇 가지 기능이 있습니다.

def b():
  # Something
  return 1

def c():
  # Something
  return 2

그리고 당신은 그들을 가져올 z.py당신이 작성해야

from a import b, c

47
당신은 또한 가져올 수 있습니다 *
— Dimitar Marinov

1
@DimitarMarinov *로 파일 이름을 바꿉니 까?
— Karlo

3
@Karlo, 아니오, 그냥 *
— Dimitar Marinov

26
"import *"를 사용하는 것은 나쁜 습관으로 간주됩니다. 암시적인 것보다 명시적인 것이 좋습니다.
— Francisco Gutiérrez

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에 경로를 추가하는 것과 같지 않습니까?
— Birish

33

파일이 다른 패키지 구조에 있고 다른 패키지에서 파일을 호출하려는 경우 다음과 같은 방식으로 파일을 호출 할 수 있습니다.

파이썬 프로젝트에 다음과 같은 패키지 구조가 있다고 가정 해 봅시다.

파이썬 패키지와 파일 구조

- com.my.func.DifferentFunction파이썬 파일에는 다음과 같은 기능이 있습니다.

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모든 기능을 가져 오기 위해 파일에 import 문 정의

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 : No module named'가 표시되면 아래와 같이 파일 이름 앞에 dot (.)이 필요할 것입니다.

에서 .file 수입 연료 소모량


13

먼저 파일을 .py 형식으로 저장하십시오 (예 :) my_example.py. 그 파일에 기능이 있다면

def xyz():

        --------

        --------

def abc():

        --------

        --------

호출 함수에서 아래 줄만 입력하면됩니다.

file_name : my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
내 실패가 파이썬 버전에 관한 것인지 모르겠습니다. 이 예제를 선택하는 것은 import fn(확장자 없음) 메인 파일에서 직접 사용하는 것 fn.my_funcion()입니다. import fn.pypy.py 파일을로드하려고 할 때 , 존재하지 않습니다. 사용 from fn.py import funcname도 작동하지 않았습니다. 감사합니다.
— m3nda 2016 년

13

모듈을 'file'이외의 다른 이름으로 바꾸십시오.

그런 다음 함수를 호출 할 때 다음을 확인하십시오.

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

내부 메인. 파이

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

출력 : 1200


6

를 추가 할 필요가 없습니다 file.py.

파일을 가져 오려는 파일과 동일한 위치에 파일을 보관하십시오. 그런 다음 함수를 가져 오십시오.

from file import a, b

그렇지 않습니다. 나는 .py를 입력하지 않았습니다. 오타입니다
— Mohan

4

가져 오려는 Python 파일과 동일한 위치에 파일이 있어야합니다. 또한 '파일 가져 오기 기능에서'도 충분합니다.


4

코드를 실행하는 동일한 디렉토리에있는이 파일을 가져 오려면 파일 이름 앞에 점 (.)을 추가하십시오.

예를 들어, 나는 a.py라는 파일을 실행 중이며 b.py로 작성된 addFun이라는 메소드를 가져오고 싶습니다 .b.py는 동일한 디렉토리에 있습니다.

.b import addFun에서


2

호출하려는 파일이 anotherfile.py이고 호출하려는 메소드가 method1이라고 가정 한 다음, 먼저 파일을 가져온 다음 메소드를 가져 오십시오.

from anotherfile import method1

method1이 클래스의 일부이면 클래스를 class1로 둡니다.

from anotherfile import class1

그런 다음 class1의 객체를 만들고 객체 이름이 ob1이라고 가정 한 다음

ob1 = class1()
ob1.method1()

2

내 경우에는 파일 이름을 지정하고로 helper.scrap.py변경할 때까지 파일 을 작동시킬 수 없었습니다.helper.py


1
나는 당신이 가질 수 있다고 생각하지 않습니다. 또는-파일 이름에
— JeffCharter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.