평범하게 import 설명하는 글

ensia96·2020년 4월 1일
0

과자말고 과제ㅠ

목록 보기
3/4
post-thumbnail

WeCode 7기로 수업을 받고있는 슈퍼개발자,

춤추는망고입니다.

( 춤 안춥니다. )

이거 시리즈 아닙니다!

과제 제출용 문서이므로,

지나가다가 읽으시는분들이 이해 못하셔도 상관 없습니다.

( '못 알아먹겠으면 나가주세요~' 이 말입니다. )







시작하겠습니다.




오늘 설명할 내용쓰!

1. sys.modules 와 sys.path의 차이점이 뭘까요?

2. sys 도 import 해야하는 모듈입니다.

파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?

3. Absolute path와 relative path의 차이점을

서술해 주세요.


대충 이런걸 설명하는 과제입니다.




여기서 우리가 짚고 넘어가야할 점은


1 번 내용에 대해서는

  1. sys.modules 는 무엇인가
  2. sys.path 는 무엇인가
  3. 그 둘의 차이점은 무엇인가

2 번 내용에 대해서는

  1. sys 모듈은 무엇인가
  2. sys 모듈은 어디에 있는가

3 번 내용에 대해서는

  1. absolute path 는 무엇인가
  2. relative path 는 무엇인가
  3. 그 둘의 차이점은 무엇인가


자. 구간별로 우리가 알아야 할 것들이 정해졌죠?

그럼 이제부터 시작해애애애애애~ 봅시다!









sys.module ?


sys . module 이네요?

sys 는 무엇이고,

. 은 무엇이고,

module 은 무엇일까요?



제대로 된 이해를 위해서는,

위의 내용들을 아는 것이 중요하겠죠?



sys ?


찾아보니까

python 이라는 언어프로그램에 포함된 하나의 모듈

이랍니다.

파이썬의 모듈이라네요...


일단 넘어가죠.






. ?


( 이건 제가 제대로 알고 있죠 ㅎ )


' . ' 은 연결자입니다.

연결해주는 친구라는겁니다.


무엇을, 어떻게 연결해줄까요?


위아래라고 하기에는 조금 이상할거같죠?

예.

앞뒤로 연결해줍니다.


앞에있는 python 의 모듈 ' sys ' 라는 내용과

뒤의 ' module ' 이라는 내용을 이어주고있네요.


뒤의 module 은 위에 sys 도 모듈이듯 당연히 모듈이겠죠?

( 쓰고보니 말이 이상하네; )


어쨋든!

여기서 설명하겠습니다!


module ( 모듈 ) ?

구글에 찾아보니

본체에 대한 독립된 하위 단위

라고 하네요.


너무 어렵네요... ( 그렇쥬? )


그냥

어떤 프로그램의 구성요소인 작은 프로그램

정도로 이해해도 크게 문제가 되진 않을겁니다.

생각해보면 비슷한 말이잖아요?






그리고, 더 깊은 이해를 위해서 하나 더!

파이썬의 특징 중에

" 다른 언어로 만든 프로그램을 파이썬 프로그램에 포함가능하다 "

라는 내용이 있는데요.


파이썬으로 만든 프로그램에서

import 라는 구문을 쓰면 다른 파일이 참조되는데,

그러한 기능 덕분에 생긴 특징입니다.
( 자세하게는 나중에 다룰 예정입니다. )




그런데 여기서 하나 더!

참조해온 모듈이나 패키지가 무엇인지 알아야,

파이썬 프로그램에서 계속 쓸 수 있겠죠??


" 뭘 하면 되는거지? "

" 이거! "

라고 해줄 수 있는 정보가 담기는 곳이 있다는건데...


위처럼 대답해줄 내용들이 담겨있는 모듈이 " module " 입니다!

( 이 친구는 복잡해보이겠지만, 사실 단순한 dictionary 랍니다! )


Python 의

" sys " 라는 모듈과

" module " 이 연결되어있는 상태.

그게 바로 sys.module 입니다!



이해 되셨나요?




여러분은 큰 산을 하나 넘었어요.

나머진 금방 이해하실겁니다.




바로 다음으로 넘어가죠!





sys.path ?

sys . path 네요?


앞부분은 이해했으니, path 만 알면 되겠죠?


( 참고로, path 는 ' 통로 ' 라는 뜻을 가진 단어입니다... )


아까 " module " 은 어떤기능의 내용을 알려주는 모듈이라고 했죠?




그렇다면,

module 에 있는 기능들이 어디에서 오는지를 기억해야,

파이썬이 계속해서 정보를 데려와주지 않을까요??


" 어디서 데려와야하지? "

" 여기! "

라고 해줄 수 있는 정보가 담기는 곳,


그런 모듈이 " path " 입니다!

( 이 친구는 단순한 string 이 담긴 list 랍니다! )







아닛!





여기까지 순서대로 이해하기만 했는데,

벌써 첫번째 정답이 나와버린 것 같습니다!



sys.module 과 sys.path 의 차이점.

아시겠죠?

1. sys.module 은 우리가 import 로 참조한 모듈이나 패키지의 정보 !

2. sys.path 은 그런 모듈이나 패키지들의 위치에 대한 경로 정보 !

' 어떤 내용인지와 어디에서 내용이 오는지 '

의 차이였습니다!







첫번째 내용에 대해선 설명이 충분한 것 같고...






이제 두번째로 넘어가죠!









sys ?




아까전에 설명했던 내용에서

sys 는 " python 이라는 언어프로그램에 포함된 하나의 모듈 " 이라고 했죠?



sys 도 결국 모듈이였다니...








어?


그럼 sys 라는 모듈의 정보와 위치는 어디에 있는걸까요?

요부분은 저도...

파고들어서 원리적으로 이해하기에는 조금 무리가 있어서...

검색해봤죠!

sys 모듈은 내장모듈이기 때문에, 파일로 되어있지 않습니다.

C 언어로 프로그래밍되어, 파이썬에 내장되어 있습니다.

라는군요...


부족해요!


또 검색해봤죠!

다른 모듈들이 sys 모듈에 포함되어 있듯이,

sys 모듈도 사실은 os 모듈안에 포함되어 있습니다.

" sys is os.sys " 라고 명령하면 True 를 반환합니다.

os.sys 는 built-in module ( 내장모듈 ) 입니다.

라는데요...


부족한 것 같아서 그냥, sys.path 를 import 한 뒤,

sys 를 찾아봤어요.


이 정도로 과제에 대한 답이 충분할 지 모르겠군요...


( 이 이상의 이해나 접근은... 아직 저에겐 이른것 같습니다... )












일단은 세번째로 넘어가보죠...

( 시무룩... )









absolute path ?


absolute path 네요?

absolute 는 ' 순수한, 전제의, 절대의 ' 라는 뜻을 가진 단어죠...

( 구글이 그랬어요 )

path 는 아까 ' 통로 ' 라는 뜻을 가진 단어라고 했죠?


순수한 통로는... 이상하고,

전제의 통로는... 뭔말인지 모르겠고;

절대적인 통로...

이거같군요...


아까 경로를 알려주는 것이 path 라는 모듈이였으니까,

여기서도 path 는 경로라는 뜻으로 쓰였겠죠?







absolute path 라는 것은 절대적인 경로.

즉, 절대경로입니다.


* 어떤 경우에도 쓸 수 있는, '절대적인 경로'라는 뜻이죠.



이해되셨죠?










그렇다면, 다음 내용도 알아볼까요?





relative path ?


relative path 네요?

relative 는 ' 상대적인 ' 이라는 뜻을 가진 단어죠...

( 또, 구글이 그랬어요!! )

상대적인 경로?

맞습니다.

여기서, 상대경로라는 것은

어떠한 것에 대해서 상대적인 경로를 나타내는 겁니다.




뭔지 잘 모르시겠다구요?


예를 들어보죠,

제가 있는곳이 " 춤추는나라 춤망도 춤추는시 망고면 " 이라면,

여러분이 어느곳에 있던,
저를 찾아오시기 위해선 " 무조건 " 저기로 찾아오시면 되잖아요?

( 제가 있는 위치의 주소가 "절대경로" )


만약에, 여러분이 " 춤추는나라 춤망도 마앙고시 맹고읍 " 에 계신다면,

저를 찾아오시기 위해선 같은 춤망도에서

춤추는시의, 망고면으로 오시면 되죠?

( 역시! 비유맛집 춤추는망고! )






이렇게

정해진 위치로 가는 것이냐,

얼마만큼만 움직이는 것이냐

라는 부분에서 차이가 있는겁니다!




#이것이 #바로 #절대적인것 . jpg





여기 까쥐!

긴 글 읽어주시느라 고생 많으셨습니다.

( 부록있습니당. 설명이 부족하다면, 참고하세욧! )

감사합니다 ( _ _)







부록

+ 이 시각, 코드세상에서는!

pyango 라는 프로젝트가 시작됐어요!


pyango 의 구조

└── pyango
    ├── test.py
    ├── testy.py
    ├── small_pypack
    │   └── pengmod.py
    └── big_pypack
        ├── pyangmod.py
        └── not_big_pypack
            └── yangmod.py





test.py 에서 yangmod.py 를 참조시키려면,

└── pyango
    ├── test.py  ← 요기에서,
    ├── testy.py
    ├── small_pypack
    │   └── pengmod.py
    └── big_pypack
        ├── pyangmod.py
        └── not_big_pypack
            └── yangmod.py  ← 요거를!


프로젝트의 최상위 디렉토리인 pyango 폴더에 있는

test.py 에서

pyango / big_pypack / not_big_pypack 안의

yangmod.py 를 호출해야겠죠?


그러기 위해선, test.py 파일에

from big_pypack.not_big_pypack import yangmod.py

이렇게 공통의 최상위 폴더 ( pyango ) 를 생략한 뒤 경로를 지정해줘서,
절대적인 위치를 지정할 수 있는 방법이 절대경로입니다!



pengmod.py 에서 testy.py 참조시키려면,

└── pyango
    ├── test.py
    ├── testy.py  ← 요거를!
    ├── small_pypack
    │   └── pengmod.py  ← 요기에서,
    └── big_pypack
        ├── pyangmod.py
        └── not_big_pypack
            └── yangmod.py


small_pypack 라는 패키지 안에 있는

pengmod.py 에서

상위 폴더인 pyango 에 있는

testy.py 를 호출해야겠죠?


그러기 위해선, pengmod.py 파일에

import ..testy.py

이렇게 현재 디렉토리 ( pengmod.py 파일이 있는 small_pypack 폴더 )의
바로 상위 디렉토리로 가는 상대경로 호출자 " .. " 를 이용해서
상대적인 위치를 지정할 수 있는 방법이 상대경로입니다!









진짜로 요기까지!

빠빠이~!

profile
지금까지 이런 망고는 없었다. 이것은 개발자인가 춤추는망고인가

0개의 댓글