Overview
UV 사용기인데, 네트워크가 단절된, 소위 말하는 폐쇄망, 등등의 환경에서 개발을 하고 있다. 또한 pip를 이용한 패키지 관리를 하고 있는데 사내 Nexus를 이용하는데 requirements.txt 파일내 패키지 디펜던시 패키지 버전까지 명시가 되있지 않아 디펜던시 패키지 버전이 최신이 나올떄 최신을 떙기는 바람에? 사내 Nexus가 디스크가 풀이 차는? 상황에 의하여 이슈가 Sometimes 발생하고 있었고, 여러가지 문제가 많지만, 일단 지엽적인 범위에서부터 수정하기로 생각했다. 또한 Python 업무를 하게 될 수도 있는 상황에 미리 외부 네트워크에서 LLM 어플리케이션을 만들면서 uv에 대해 검색해봤고, 사내망에 적용해본 결과 성공하여, 내용을 기록하고자 한다.
UV란?
Python package , project manager 랍니다. Rust로 만들어졌다고 하고, 매우 빠른 기존 pip보다 빠르다고 하네요. 그게 COPY가 아니라, cache를 활용해서 다운받는다는데, 잘 모르겟는 사유에 의해 COPY 방식으로 다운이 되는 케이스가 발생하였지만, 그럼에도 UV를 안쓸 이유는 없다고 생각합니다.
Installation
# window
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# MacOS & Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
wget -qO- https://astral.sh/uv/install.sh | sh
curl -LsSf https://astral.sh/uv/0.8.3/install.sh | sh
뭐 이런 커맨드가 있지만, 깃허브 에서 OS별로 필요한것을 받을 수 있다.
Usage
공홈-cli-CMD도 잘나와있고, LLM에 검색하면 잘나오지만! 개인적으로 사용해본것을 정리해본다.
## uv 초기화를 한다.
uv init
## 가상환경, 현제 프로젝트에만 국한되는 환경을 만든다.
uv venv
## 가상환경 활성화
## MacOS&Linux
source ~/venv/bin/activate
## Window/Command Prompt
~/venv/Script/activate
## Window/PowerShell
~/venv/Script/activate.ps1
Powershell은 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 뭐 이런것들 해줘야됨.
1. 기존 requirements.txt가 있고, uv.lock, toml에 추가가되기 전 상황
## requirements.txt를 이용한 설치
uv pip install -r requirements.txt --index-url 'neuxs.com/simple/pypi/'
## nexus 주소를 통해 dependency를 다운받으며, add를 통해 필요 requirements.txt내 패키지를 add
uv add -r requirements.txt --index-url 'neuxs.com/simple/pypi/'
uv.lock은 uv add, uv sync 때 생성이 된다고 한다.
–index-url ‘nexus url’ 옵션을 주면 Nexus를 통해 패키지 다운받는다.
2. uv.lock, .toml 파일에 설치 이력이 있는 경우
## uv venv
uv venv
## uv venv 버전, 커스텀 디렉토리명
uv venv --python 3.12 mycustomenv
## activate
source ~/venv/bin/activate
## 패키지 동기화
uv sync
가상환경 만들고, 활성화 후, 동기화
3. uv를 사용하게 된다면,,,
## 추가.(toml, uv.lock에 추가된다.)
uv add 패키지명 --index-url 'nexus url'
## 제거
uv remove 패키지명
## 동기화
uv sync
uv로만 패키지 추가, 삭제, 싱크가 되기떄문에 굳이 pip를 사용할 일은 없을 수도있다.
4. 그외
## 설치된 패키지 리스트 조회
uv pip freeze
uv pip list
## 설치된 패키지의 의존성 트리 조회
uv tree
## 스크립트(python) 실행
uv run python main.py
마치며
더 많은 옵션들이 있다,, 현재 지엽적으로 적용해서 테스트도 하고, 잘 적용되서 편리하게 개발하면 좋을꺼같다. 어짜피 이젠 폐쇄망따위야 적응한지 오래되서, 다만 정확한 아키텍쳐와 목적을 가지고 해야겠다라는 생각이 들엇다 끝.