[파이썬 코딩의 기술] 01/ 협업의 기초

[파이썬 코딩의 기술] 01/ 협업의 기초

책 『파이썬 코딩의 기술(개정 2판)』 미리 보기

파이썬 프로그램을 작성하면서 다른 사람과 잘 협업하기 위해 필요한 협업의 기술들을 핵심만 정리해보았다!

BETTER WAY 82/ 커뮤니티에서 만든 모듈을 어디서 찾을 수 있는지 알아두라

파이썬 커뮤니티의 모듈은 파이썬 패키지 인덱스(PyPI)에서 찾을 수 있다.

패키지 인덱스를 사용하려면 pip 명령어를 통해 쉽게 설치할 수 있다.

BETTER WAY 83/ 가상 환경을 사용해 의존 관계를 격리하고 반복 생성할 수 있게 하라

pip를 통해 새로운 패키지를 설치하면 기본적으로 모든 파이썬 인터프리터가 볼 수 있는 전역 위치에 저장된다.

때문에 모듈을 설치할 때마다 모든 파이썬 프로그램에 영향을 미친다.

문제는 설치한 패키지가 다른 패키지에 의존하고 있을 경우에 발생 한다. 이를 추이적transitive 의존 관계에 있다고 말한다.

구체적인 예를 생각해보자.

우리가 막 Sphinx를 설치했다. 사실 이 패키지는 Jinja2 패키지에 의존하고 있다.

그리고 얼마 후, 새롭게 flask 패키지를 설치했다. 이 역시 Jinja2에 의존하고 있다.

그런데 시간이 지나 Jinja2가 새로운 버전을 릴리즈했다. 당연히 우리는 python -m pip install --upgrade Jinja2로 패키지를 업그레이드했다.

그런데 Sphinx가 작동을 하지 않는다. 반면 flask는 제대로 작동하고 있다.

무엇이 잘못된 걸까?

파이썬은 전역적으로는 모듈을 단 한 버전만 설치할 수 있다. 그런데 패키지들이 서로 의존하고 있어, 하나의 모듈이라도 여러 가지 버전이 필요한 상황이 온 것이다.

이런 상황을 의존 관계 지옥dependency hell 이라고 한다.

from https://medium.com/knerd/the-nine-circles-of-python-dependency-hell-481d53e3e025

협업하는 과정에서 이러한 문제는 더 크게 작용할 수 있다. 따라서 아예 가상 환경virtual environment, venv 을 사용하는 것이 바람직하다.

venv를 사용하면 특정 버전의 파이썬 환경을 독립적으로 구성할 수 있고, 한 시스템 안에 같은 패키지의 여러 버전을 서로 충돌 없이 설치하고 사용할 수 있다.

물론 필요할 경우 의존 관계를 다시 구현할 수도 있다.

python3 -m pip freeze 명령을 사용하면 현재 명시적으로 의존하는 모든 의존 관계를 한 파일에 저장할 수 있다. 이때 파일 이름은 관례적으로 requirements.txt로 한다.

이제 새 가상 환경 디렉토리를 만들고 activate한 후, python3 -m pip install -r /tmp/myproject/requirements.txt 를 실행하면 앞선 환경을 그대로 재현할 수 있다.

가상 환경 디렉토리를 통째로 직접 이동시키려고 하면 모든 요소가 깨져 버린다. 따라서 언제나 새로운 디렉토리에 가상 환경을 만든 후, 위와 같이 requirements.txt 파일로 모든 모듈을 재설치하는 게 좋다.

이 방법은 특히 버전 관리 시스템을 사용해 협업할 때 이상적이다. 그러나 주의할 점은 파이썬 버전 자체는 requirements.txt 파일에 포함되지 않으므로 반드시 별도로 관리해야 한다는 것이다.

from http://nanunzoey.tistory.com/5 by ccl(A) rewrite - 2021-07-04 23:00:17