Skip to main content
  1. Posts/
  2. Dev/

uv로 파이썬 관리하기

·401 words·2 mins
Jiho Kim
Author
Jiho Kim
달려 또 달려

📝 상세 정리
#

  • 가상환경은 왜 필요할까?
  • Image Description
  • 위와같은 상황을 방지하자.
  • 버전 안맞는거만큼 화나는게 없다.
  • 그러면, 버전을 하나하나 다 적은 문서를 주면, 괜찮지 않을까? 맞춰서 하나하나 깔면 되잖아!
    • 물론 그래도 된다!
    • 근데 깔아야할 패키지가 수백 수천개라면? 에반거같은데..
      • 그래서 requirements.txt와 파이썬이 기존에 제공하던 가상환경(venv) 로 다음과 같이 수행할 수 있게 됐다!
      • pip install -r requirements.txt
  • 그러면 모두가 행복해질 수 있을 줄 알았으나..
    • 같은 프로젝트 내에서 라이브러리 패키지 $A, B, C$가 있다고 해보자.
      • $B$는 $A$의 버전이 2.0 이하임을 요구하고,
      • $C$는 $A$의 버전이 3.0 이상임을 요구할 수 있겠다.
      • 이때 B를 깔고 C를 깔면 pip는 이걸 그대로 덮어버리면서, 나중에 B가 터질것을 예측하지 못한다.
    • 또한 requiremets.txt는 우리가 직접 깐 패키지에만 의존성을 부여하고, 그 패키지가 의존하는 하위 패키지들에는 의존성을 관리하지 않는다.
      • 밑에있는걸 쓰다가 터질 수도 있다!!
    • 이런 문제점들을 해결하기 위해, Poetry가 나왔다.
  • Poetry는 위의 문제들을 모두 해결했다!
    • 여러 패키지간의 의존성이 겹치는 문제를 백트래킹을 이용한 DEPENDENCY RESOLVER로 미리미리 잡아주고
    • 하위 패키지들에도 버전을 관리해서 poetry.lock으로 작성해두고
    • venv, requriements.txt, setup.py 등 여러가지로 관리되던 설정 파일들도 통합했다.
    • 그런데… 한번에 모든 기능을 넣은 탓에 너무 느려져버렸다
    • 사실 파이썬 버전 자체도 관리하지 못해서 pyenv같은것도 따로 써야했다.
  • 이런 상황에 2024년, uv가 등장했다.
    • 사실 이 이후로는 위에꺼 아무것도 모르고, 그냥 uv 하나만 알아도 된다.
    • uv가 왜 그렇게 좋냐?
      • 일단 개빠르다.
        • Image Description
        • 대 u v
        • Rust로 작성된 툴이라서, pip보다 10~100배, poetry보다도 훨씬 빠르다
      • 파이썬 버전을 포함해서 관리가 매우매우 쉽다.
        • poetry의 장점을 모두 담은것은 물론, pyenv로 진행하던 버전 관리또한 받아준다.
        • pyenv, pip, poetry, venv 아무것도 필요 없어진것이다!
        • uv python install 3.12 로 파이썬을 깔고
        • uv lock으로 의존성을 고정하고
        • uv run으로 가상환경 직접 활성화 없이 일회성으로 실행하고
        • 모든 기능이 추가되었다.
  • 심지어 파이썬 3.12~13쯤부터, pip install을 하려고하면 다음과 같은 오류 메세지를 본 사람이 분명 있을 것이다.
    • error: externally-managed-environment
      • 이는 시스템 전역에 파이썬 패키지를 설치할 수 없다는 오류이다.
      • 사실 뭐 break-system같은걸 해서 어거지로 설치할 수야 있다만.. 잘 되던걸 막은 이유가 분명 있지 않을까?
    • 아무튼 이제 공식적으로 가상환경 격리를 권장하는 시대가 됐다.
      • 이상황에 pip로 venv까지 하나하나 관리하고싶나?
      • uv로 든든~하게 이주하고말지.
  • 헐, 근데 저는 microsoft/markitdown 처럼 전역으로 쓰고싶은 파이썬 패키지 (글로벌 도구)가 있는데요? 이건 어쩔수없이 pipx를 써야하지 않을까요?
    • 하지만 개깡패 uv는 이것조차 다 잡으러 왔다.
    • uv tool 을 이용해 설치하면, 격리도 해주면서, 알아서 관리하면서, 사용할때는 뇌빼고 쓸 수 있게 uv를 안붙여도 바로바로 실행까지 된다.
    • 심지어 깔기도 싫고 일회용으로 쓰고싶으면 uv tool run로도 된다는거 같다.
  • 걍 대uv이다. 말이 안됨. 숭배를 햇

🛠️ 사용법
#

  • 위까지 쓰니까 힘이 빠져서 지금은 쓰기 귀찮다. 며칠 뒤에 보면 작성되어있지 않을까?

🔗 참고 자료
#