2019년 1월 22일 화요일

파이썬 패키지(python Package)


파이썬 패키지(Python Package)


패키지는 . 을 이용해서 모듈을 directory구조로 관리할 수 있게 해주는데

모듈명이 A.B 라면 A패키지의 B모듈이라는 말이다


✔ 패키지생성


Root_dic  -- mypack_dic --  A_dic -- __init__.py
                             

                                     --  B_dic -- __init__.py

                                                   -- B_module.py


                                     --  C_dic -- CC_dic           -- __init__.py

                                     --  C_module.py


이런식으로 만들게 되는데

이때도 물론 Root_dic를 PYTHONPATH 환경변수에 등록해야지
어느 directory에서도 import할수 있다
(명령 프롬프트 창에서 set PYTHONPATH = Root_dic의 path)




✔패키지 사용


👌  import mypack_dic . B_dic . B_module

      mypack_dic . B_dic . B_module . b_function()



👌  from mypack_dic . B_dic  import  B_module

      B_module . b_function()


     위의 두개를 보면 import한것을 객체처럼 적어주고 . 을 이용해 사용해준다


👌 from  mypack_dic . B_dic . B_module import b_function

     b_function()



❌  import mypack_dic . B_dic . B_module . b_function

      이렇게는 되지 않는데 패키지를 import하는 경우에는

      마지막에 모듈이나 패키지가 와야한다. 함수가 오면 안 된다




✔__init__.py


해당 directory가 패키지의 일부임을 알려주는 역할

python 3.3부터는 __init__.py없어도 패키지로 인식이 되지만
호환을 위해 __init__.py를 써주는게 안전하다

❌  import mypack_dic

      mypack_dic . B_dic . B_module . b_function()

     이렇게 하면 안되는데 mypack_dic 안에 있는 모듈을 사용하거나
     __init__.py에 정의된 애들만 쓸 수 있다.




❌  from mypack_dic. B_dic import

      B_module . b_function()


      이렇게 해주면  * 가 all을 나타낸다 할지라도
      B_dic 의 __init__.py 의 내부변수 
      __all__ = [import할 module list ] 에서  정의를 해줘야한다


      따라서 __all__ = [B_module] 이런식으로 작성을 해주고
      실행을 하면 B_module이 import되어 정상 작동한다




❕  import * 부분이 module이 아닌 모듈내 함수와 변수등을 대상으로 

    하고 있다면__all__ 변수와 상관없이 import된다



✔ import 경로


절대경로 :


우리가 환경변수를 설정한 directory부터 절대경로를 따라 
다른 하위 directory의 모듈을 사용할 수있다

상대경로 : 

현재 module을 import하고자 하는 위치로 부터 
상대경로를 파악해 import해줄 수도 있는데

이때 부모 directory는 ..으로 표현해주도록 한다 ( . 는 현재 directory)

( .. 과 같은 상대적 접근자는 모듈안 즉 파일안에서만 사용해야지
 명령 프롬프트 or 파이썬 인터프리터 안에서 사용하고자 하면 Error 발생)

댓글 없음:

댓글 쓰기

가장 많이 본 글