Django 예제를 이용한 python import 이해하기

Reading time ~1 minute

이전 포스트에서 질문 받았던 Django의 python import에 대해 해답을 주기 위해 공부한 내용을 정리했다.


Example

아래와 같은 구조의 django 프로젝트가 있고 tutorial/tutorial/urls.py 에서 tutorial/myapp/views.py 를 import 하는 내용이다.

$ tree ../../django-rest-tutorial/
django-rest-tutorial/
└── tutorial
    ├── manage.py
    ├── myapp
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    └── tutorial
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

tutorial/tutorial/urls.py

[...]

from myapp import views

[...]


python import 원리

python에서 모듈을 절대 import 하면 그 모듈을 찾기 위해 아래와 같은 sys.path의 경로들을 탐색한다.

  • 실행된 모듈의 경로

  • 환경변수 PYTHONPATH에 지정된 경로

  • Python이 설치된 경로 및 라이브러리의 경로

위의 예제에서는 직접 구현한 모듈을 import 하는 것이고, manage.py 모듈을 통해 실행하므로 manage.py가 위치한 경로에서 탐색을 한다.


import path

위의 설명을 덧붙이면

tutorial/tutorial/urls.py 에 아래의 코드를 추가하여

import sys
print(sys.path)

manage.py를 통해 실행시켜보면,

$ python manage.py runserver
['.../django-rest-tutorial/tutorial', ...]

현재 모듈이 실행된 sys.path.../django-rest-tutorial/tutorial인 것을 확인할 수 있다. import myapp import views를 할 경우 이 sys.path의 경로를 기반으로 .../django-rest-tutorial/tutorial/myapp 와 같이 myapp 모듈을 찾아서 views를 import 하게 된다.

Django REST framework 시작하기

Django에는 REST API를 만들 수 있는 Django REST framework가 존재한다. Django REST framework Quickstart 을 참고하여 tutorial을 진행해봤다. Django REST framework ...… Continue reading