pip
를 이용해 여러가지 패키지를 추가 할 수 있다. 아래의 방법으로 import 할 수 있는데 python은 어떻게 모듈과 패키지를 찾는것일까import something
sys.modules => built-in modules => sys.path
import sys
print(sys)
----아래 결과----
우리가 pip install을 통해 설치한 모듈 또는 패키지는 경로 관련 이슈가 발생하는 경우는 드물다. 하지만 개인이 직접 만든 모듈, 패키지를 사용 할 때 경로 관련한 이슈가 자주 발생한다.
absolute path는 해당 프로젝트의 가장 상위 폴더부터 끝까지 생략없이 명확하게 명시 된 경로를 말하는데, 파일들의 위치가 변하면 수정하기 쉬운 장점이 있으나 경로가 상대적으로 길어질 수 있다
위 스크린샷에서 user의 modles.py에 접근하기 위해서는
my_app => user => models.py
이렇게 접근해야 할 것이다. 파이썬에서는 프로젝트의 위치는 제외하고 아래처럼 경로를 표현한다
user.models.py
relative path는 최상위 경로가 아닌 현재 자기가 속한 경로를 기준으로 정의한다
위 그림의 models.py에서 core파일에 접근하기 위해서는
..core.something
이렇게 접근 할 수 있다.
.은 파일의 현재 위치를 이야기하며, ..은 현재의 위치보다 상위 디렉토리로 가는 경로이다
위의 main.py에서 상대경로를 이용하여 add_and>multiply를 import 하게 되면 아래와 같은 에러가 발생한다
에러가 발생하는 이유는 main 모듈에서 상대경로를 사용 할 때 기준점(출발점)인 자신의 위치를 찾지 못하기 때문이다?? 자기 자신이 자기 위치를 모른다고? 뭔 X소리야 할 수 있지만! 모듈을 실행하는 방법을 안다면 충분히 이해를 할 수 있다
모듈을 실행하는 2가지 방법
- 인터프리터(VSCode)에서 직접 실행
- 다른 모듈에서 import
가. 1번의 경우 실행하는 모듈의 이름은 자동적으로 __main__ 으로 변경된다. potato.py 라도 __main__으로 변경 된다
나. 모듈실행 뒤 상대경로를 통해 다른 모듈을 import 할 때,
파이썬은 모듈의 이름( __name__ )에 기반을 두고 현재모듈의 위치를 찾는다
다. __main__으로 이름이 바뀌어 버린 모듈은 파이썬이 해당 위치를 찾을 수 없게 되고, 출발점이 되는 자신의 위치를 알지 못하니 다른 모듈도 import 할 수 없는 것이다
라. 결론 따라서 main.py에서는 절대경로를 이용하여 import 해주어야 한다
Django를 이용해 웹사이트를 만들면서 항상 궁금하던 부분이다. __init__ 이 부분은 니꼬도 사실 잘 알려주지 않아서 정리를 한다거나 공부 할 생각을 하지 못했는데, 알고보니 장고의 내용은 아니고 파이썬의 내용이며, 내가 파이썬에 아직 많이 부족하다는 것을 더욱 잘 알아간다...
추가로 벨로그를 둘러보면 정말 잘 정리한 기술 블로그가 많다
나도 남들이 보기에 깔끔하고 잘 정돈 된 블로깅을 하고 싶은데, 아직 나름의 기준과 명확한 틀이 없는것 같다...
이또한 조금씩 발전하리라 믿고 꾸준히 노력하려 한다!!
느리더라도 정확하게 알고 가자
21.08.04 위코드 1주차 수요일