Table of Contents
Table of Contents
📝 상세 정리
#- 가상환경은 왜 필요할까?

- 위와같은 상황을 방지하자.
- 버전 안맞는거만큼 화나는게 없다.
- 그러면, 버전을 하나하나 다 적은 문서를 주면, 괜찮지 않을까? 맞춰서 하나하나 깔면 되잖아!
- 물론 그래도 된다!
- 근데 깔아야할 패키지가 수백 수천개라면? 에반거같은데..
- 그래서
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가 왜 그렇게 좋냐?
- 일단 개빠르다.

- 대 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이다. 말이 안됨. 숭배를 햇
🛠️ 사용법
#- 위까지 쓰니까 힘이 빠져서 지금은 쓰기 귀찮다. 며칠 뒤에 보면 작성되어있지 않을까?
🔗 참고 자료
#