파이썬 프로그램을 작성하면서 다른 사람과 잘 협업하기 위해 필요한 협업의 기술들을 핵심만 정리해보았다!
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 이라고 한다.
협업하는 과정에서 이러한 문제는 더 크게 작용할 수 있다. 따라서 아예 가상 환경virtual environment, venv 을 사용하는 것이 바람직하다.
venv를 사용하면 특정 버전의 파이썬 환경을 독립적으로 구성할 수 있고, 한 시스템 안에 같은 패키지의 여러 버전을 서로 충돌 없이 설치하고 사용할 수 있다.
물론 필요할 경우 의존 관계를 다시 구현할 수도 있다.python3 -m pip freeze
명령을 사용하면 현재 명시적으로 의존하는 모든 의존 관계를 한 파일에 저장할 수 있다. 이때 파일 이름은 관례적으로 requirements.txt
로 한다.
이제 새 가상 환경 디렉토리를 만들고 activate한 후, python3 -m pip install -r/tmp/myproject/requirements.txt
를 실행하면 앞선 환경을 그대로 재현할 수 있다.
가상 환경 디렉토리를 통째로 직접 이동시키려고 하면 모든 요소가 깨져 버린다. 따라서 언제나 새로운 디렉토리에 가상 환경을 만든 후, 위와 같이 requirements.txt
파일로 모든 모듈을 재설치하는 게 좋다.
이 방법은 특히 버전 관리 시스템을 사용해 협업할 때 이상적이다. 그러나 주의할 점은 파이썬 버전 자체는 requirements.txt
파일에 포함되지 않으므로 반드시 별도로 관리해야 한다는 것이다.
'공부하며 성장하기 > 파이썬 Python' 카테고리의 다른 글
List comprehension보다 for문이 빠른 경우 (0) | 2023.06.18 |
---|---|
[파이썬 코딩의 기술] 클래스 합성으로 복잡한 내포 관계 정리하기 (0) | 2022.07.02 |
🏆 2021 노마드 어워즈 후기 (0) | 2021.12.30 |
[파이썬 코딩의 기술] 03/ 협업의 확장 (4) | 2021.07.05 |
[파이썬 코딩의 기술] 02/ 협업의 미덕 (0) | 2021.07.04 |