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


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.pyb.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.