[python]패키지(package)에서 from, import 사용법

2020년 11월 01일 by 진아사랑해

    [python]패키지(package)에서 from, import 사용법 목차
반응형

travel이라는 디렉토리를 만들고 그 밑에 vietnam.py와 thailand.py 함수를 만든다

즉 travel -- __init__.py

               thailand.py

               vietnam.py

thailand.py에는 

class ThailandPackage:

  def detail(self):

    print("[태국 패키지 3박 5일]")

 

vietnam.py에는

class VietnamPackage:

  def detail(self):

    print("[베트남 패키지 3박 5일]")

 

main.py에서

import travel.thailand  <- travel 패키지에서 thailand 모듈을 가져온다

trip_to = travel.thailand.ThailandPackage( )

trip_to.detail()

 

import travel.thailand.ThailandPackage <- 에러발생

클래스나 함수는 바로 import를 할 수 없다

 

from travel.thailand import ThailandPackage <- 이렇게 사용하면 클래스나 함수를 직접 가져올 수 있다

trip_to = ThailandPackage( )

trip_to.detail()

 

from travel import vietnam <- 모듈을 가져온다

trip_to = vietnam.VietnamPackage( )   <- 모듈명.클래스 명으로 trip_to 인스턴스 생성

trip_to.detail()

 

from travel import *

trip_to = vietnam.VietnamPackage( )   <- vietnam 모듈이 뭔지 모르겠다는 에러 출력

trip_to.detail()

 

__init__.py 파일을 수정

__all__ = ["vietam", "thailand"]  <- 어느 모듈까지 공개할 것인지를 선언한다

이렇게 수정을 하면

from travel import *

trip_to = vietnam.VietnamPackage( ) 

trip_to.detail()

정상적으로 수행이 된다

 

모듈이나 패키지를 만들었을 경우 시험(test)는 어떻게 해야 할까 ?

thailand.py에는

class ThailandPackage:

  def detail(self):

    print("[태국 패키지 3박 5일]")

if __name__ == "__main__":       <- 모듈 화일에서 직접 실행하면 이 구문을 탄다

  print("이 문장은 모듈을 직접 실행할 때만 실행되요")

else:                                    <- main.py에서 호출되면 아래 문장이 실행된다

  print("Thailand 외부에서 모듈 호출")

 

모듈이나 또는 패키지를 만든 경우에 이런 방법으로 시험을 한다

 

모듈이나 패키지는 어디에 위치하여야 할까 ?

import 또는 from하는 파일과 같은 위치에 있던가

아니면

python의 lib 폴더에 위치하하면 된다

나 같은 경우에는 c:\python38\lib 폴더에 위치한다

lib 위치를 확인하는 경우에는

import inspect

import random

print(inspect.getfile(random))

명령으로 라이브러리의 파일 위치 확인

 

 

참고영상: www.youtube.com/watch?v=kWiCuklohdY&t=4s

 

 

 

 

 

 

 

반응형