반응형
나는조이
쑥쑥 크는 조이
나는조이
  • 분류 전체보기 (66)
    • 나누며 성장하기 (14)
      • Raktivist's Diary (4)
      • 성장 코칭 Growth Coaching (2)
      • 일상 · 생각 (8)
    • 읽고 성장하기 (1)
    • 공부하며 성장하기 (51)
      • 인공지능 AI (34)
      • AWS (1)
      • 파이썬 Python (6)
      • C# · WPF (1)
      • Fixing Errors (6)
      • 인사이트 리뷰 Insight Review (2)
      • AI-struction (1)

인기 글

최근 댓글

공지사항

  • def introduce(self):
전체 방문자
오늘
어제
ⓒ2022 @nanunzoey.All rights reserved.
hELLO · Designed By 정상우.
나는조이

쑥쑥 크는 조이

[파이썬 코딩의 기술] 01/ 협업의 기초
공부하며 성장하기/파이썬 Python

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

2021. 7. 4. 22:36

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

 

파이썬 코딩의 기술(개정2판)

구글의 프린시펄(principal) 소프트웨어 엔지니어다. 구글 설문지(Survey)의 기술적 공동 설립자이며, 구글의 첫 번째 클라우드 컴퓨팅 제품(앱 엔진(App Engine))을 출시했다. 14년 전 구글의 엄청난 서

books.google.co.jp

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

 

 

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


파이썬 커뮤니티의 모듈은 파이썬 패키지 인덱스(PyPI)에서 찾을 수 있다.
패키지 인덱스를 사용하려면 pip 명령어를 통해 쉽게 설치할 수 있다.

 

PyPI · The Python Package Index

The Python Package Index (PyPI) is a repository of software for the Python programming language.

pypi.org

 

 

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 파일에 포함되지 않으므로 반드시 별도로 관리해야 한다는 것이다.

반응형
저작자표시 (새창열림)

'공부하며 성장하기 > 파이썬 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
    '공부하며 성장하기/파이썬 Python' 카테고리의 다른 글
    • [파이썬 코딩의 기술] 클래스 합성으로 복잡한 내포 관계 정리하기
    • 🏆 2021 노마드 어워즈 후기
    • [파이썬 코딩의 기술] 03/ 협업의 확장
    • [파이썬 코딩의 기술] 02/ 협업의 미덕
    나는조이
    나는조이
    매일 쑥쑥 크는 성장기를 담습니다.

    티스토리툴바