Page 24 -
P. 24
하지만 추이적(transitive) 의존 관계에 의해 문제가 생길 수 있다. 추이적 의존
관계는 설치한 패키지가 다른 패키지에 의존하는(그리고 그 패키지가 또 다
른 패키지에 의존하는) 경우를 말한다. 예를 들어 Sphinx를 설치한 후 pip를
통해 이 패키지가 의존하는 다른 패키지 목록을 볼 수 있다.
$ python3 -m pip show Sphinx
Name: Sphinx
Version: 2.1.2
Summary: Python documentation generator
Location: /usr/local/lib/python3.8/site-packages
Requires: alabaster, imagesize, requests,
sphinxcontrib-applehelp, sphinxcontrib-qthelp,
Jinja2, setuptools, sphinxcontrib-jsmath,
sphinxcontrib-serializinghtml, Pygments, snowballstemmer,
packaging, sphinxcontrib-devhelp, sphinxcontrib-htmlhelp,
babel, docutils
Required-by:
flask 같은 다른 패키지를 설치하면 이 패키지도 Jinja2 패키지에 의존한다
는 사실을 알 수 있다.
$ python3 -m pip show flask
Name: Flask
Version: 1.0.3
Summary: A simple framework for building complex web applications.
Location: /usr/local/lib/python3.8/site-packages
Requires: itsdangerous, click, Jinja2, Werkzeug
Required-by:
시간이 지남에 따라 Sphinx와 flask가 서로 달라지므로 의존 관계 충돌이 발
생할 수 있다. 현재는 두 패키지가 모두 똑같은 Jinja2 버전에 의존할 것이
다. 하지만 6개월이나 1년 후에 Jinja2가 기존 버전을 사용하는 코드가 제
대로 컴파일되거나 동작하지 못하게 하는(이런 변경을 기존 코드를 깨는
570
파이썬 코딩의 기술_06.indd 570 2020-10-20 오후 2:53:42