다른 파일에서 사용할 외부 Python 코드를 포함하는 방법은 무엇입니까?


117

파일에 메서드 모음이있는 경우 해당 파일을 다른 파일에 포함하지만 접두사 (예 : 파일 접두사)없이 호출 할 수있는 방법이 있습니까?

그래서 내가 가지고 있다면 :

[Math.py]
def Calculate ( num )

이렇게 부르는 방법 :

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )

답변:


154

다음과 같은 모듈로 다른 파일을 가져와야합니다.

import Math

Calculate함수 앞에 모듈 이름을 붙이지 않으려면 다음과 같이하십시오.

from Math import Calculate

모듈의 모든 멤버를 가져 오려면 다음을 수행하십시오.

from Math import *

편집 : 여기 에이 주제에 대해 좀 더 깊이있는 Dive Into Python 의 좋은 장이 있습니다 .


9
권장하지 않는from Math import *은 주목할 가치가 있습니다.
naught101 2015

1
당신은 흥미로운 imp모듈과 마법의 호출을 할 수 있습니다 __import__.
Vitold S.

누군가가 자신의 도메인을 갱신하는 것을 잊었다 : \
Spechal

48

"include"명령을 작성하십시오.

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')

@Deleet :

@bfieck 발언이 정확합니다. python 2 및 3 호환성을 위해 다음 중 하나가 필요합니다.

Python 2 및 3 : 대안 1

from past.builtins import execfile

execfile('myfile.py')

Python 2 및 3 : 대안 2

exec(compile(open('myfile.py').read()))

3
이것을 다시 할 이유가 from module import *있습니까? 또한 호출중인 파일의 본문에 코드가있는 경우이 작업을 수행하면 해당 코드가 실행됩니다.
naught101 2015

4
@ naught101 : 그게 목표입니다 : 코드를 실행하는 것입니다. 이는 가져 오기에서는 발생하지 않습니다. 일반적으로 변수를 정의하는 것입니다.
Louis

2
@Deleet 파이썬 3는 없습니다execfile
bfieck

7
실제로 파이썬 3에는 compile()언급 된 것보다 다른 서명이 있습니다. 따라서 올바른 Python 2 및 3 : 대안 2는 다음과 같습니다.exec(compile(source=open('myfile.py').read(), filename='myfile.py', mode='exec'))
TriAnMan

3
당신은 '포함'의 호출자의 범위에 포함 된 파일의 변수를 갖고 싶어하는 경우 '를 포함'도우미 기능이 작동하지 않습니다
paulj

35

사용하는 경우 :

import Math

그러면 Math의 함수를 사용할 수 있지만 Math.Calculate를 수행해야하므로 당연히 원하지 않는 것입니다.

접두사없이 모듈의 함수를 가져 오려면 다음과 같이 명시 적으로 이름을 지정해야합니다.

from Math import Calculate, Add, Subtract

이제 이름만으로 계산, 더하기, 빼기를 참조 할 수 있습니다. Math에서 모든 함수를 가져 오려면 다음을 수행하십시오.

from Math import *

그러나 내용이 확실하지 않은 모듈로이 작업을 수행 할 때는 매우주의해야합니다. 동일한 함수 이름에 대한 정의를 포함하는 두 개의 모듈을 가져 오면 한 함수가 다른 함수를 덮어 쓰고 현명하지 않게됩니다.


1

파이썬 검사 모듈이 매우 유용하다는 것을 알았습니다.

예를 들어 teststuff.py와 함께

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

그리고 다른 스크립트 나 파이썬 콘솔에서

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

그리고 이제 dostuff 는 로컬 범위에 있어야하며 dostuff () 는 콘솔 또는 스크립트 _ name _ 을 반환하는 반면 test.dostuff ()를 실행하면 파이썬 모듈 이름이 반환됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.