파이썬에는 다양한 패키지 관리 도구가 존재합니다. pip, venv, virtualenv, pipenv, poetry 등 각 도구들은 가상환경 생성, 패키지 설치, 의존성 관리 등의 역할을 분담합니다. 최근 이 모든 기능을 하나로 통합하면서도 빠른 속도를 자랑하는 새로운 도구가 등장했습니다. 바로 uv입니다.

 

uv

uvAstral에서 개발한 초고속 파이썬 패키지 관리 도구입니다. 러스트(Rust)로 개발되었기 때문에 네이티브 툴의 매우 빠른 속도와 러스트 메모리 모델이 제공하는 높은 안정성이 제공합니다. Astral은 uv뿐만 아니라 파이썬 코드 린터인 Ruff도 러스트로 개발하고 있습니다. uv는 여러 파이썬 도구들이 제공하던 다양한 기능을 하나로 통합한 스위스 군대 칼같은 멀티툴로, 단일 명령어를 사용하여 가상환경을 만들고 패키지를 설치하며, 프로젝트의 의존성을 관리할 수 있습니다.

 

특징

  • 매우 빠른 속도: 러스트로 구현되었기 때문에 기존 도구보다 월등히 빠릅니다. pip보다 10배~100배 빠르다고 홍보하고 있죠.
  • 올인원 도구: pip, venv, virtualenv, pip-tools, poetry의 기능을 모두 갖추고 있습니다.
  • 자동 가상환경 생성: 패키지를 설치할 때 가상환경이 없으면 자동으로 생성합니다.
  • PEP 582 지원: .venv 없이도 프로젝트 로컬 디렉터리에 패키지를 설치할 수 있습니다.
  • Python과의 높은 호환성: 표준 파이썬 워크플로와 충돌 없이 동작할 수 있습니다.

 

무엇을 대체할 수 있을까?

uv는 아래 도구들을 모두 대체할 수 있습니다:

  • pip (패키지 설치/제거)
  • venv, virtualenv (가상환경 생성)
  • pip-tools, pipenv, poetry (의존성 관리 및 고정)

따라서 여러 도구를 설치하여 설정하지 않아도, uv 하나만으로 파이썬 프로젝트를 효율적으로 관리할 수 있습니다.

 

설치

uv는 다음 명령어만 실행하면 간편하게 설치됩니다.

curl -Ls https://astral.sh/uv/install.sh | sh

설치 후에는 터미널에서 uv 명령어가 동작하는지 확인해 봅니다:

uv --version

 

 

 

가상환경

파이썬에서 가상환경(Virtual Environment)은 서로 다른 프로젝트마다 독립적인 패키지 공간을 제공하는 기술입니다. 프로젝트마다 필요한 패키지 버전이 다를 수 있기 때문에, 시스템 전체에 영향을 주지 않고 프로젝트별로 격리된 환경을 만드는 것이 중요합니다.

 

가상환경이 필요한 이유

  • 서로 다른 프로젝트가 서로 다른 패키지 버전을 필요로 할 수 있습니다.
  • 전역 파이썬 환경에 설치된 패키지는 다른 프로젝트에 영향을 줄 수 있습니다.
  • 개발과 배포 환경 간에 일관성을 유지하기 위해서도 중요합니다.

예를 들어, A 프로젝트는 Django 4.2, B 프로젝트는 Django 5.2.5를 사용한다고 가정해 봅시다. 전역 환경에서 패키지를 설치하면 의존성 충돌이 일어날 수 있지만, 따로 가상환경을 분리하여 패키지를 설치하면 이 문제가 일어나지 않습니다.

 

가상환경의 구조

보통 가상환경은 .venv 또는 env라는 폴더로 구성되어 있고, 내부에 아래와 같은 구조를 가집니다:

.venv/
├── bin/ (또는 Scripts/ - 윈도우)
├── lib/
├── pyvenv.cfg

 

가상환경 사용법

가상환경 만들기

현재 디렉터리에 .venv 폴더를 만들고 가상환경을 생성하려면 다음 명령어를 실행합니다:

uv venv

가상환경의 이름을 지정하여 만들고 싶다면 다음 명령어를 실행합니다:

uv venv myenv

 

여러 버전의 파이썬 설치하기

uv에서는 파이썬을 설치할 수 없습니다. 따라서 파이썬 런타임은 따로 설치해야 하며, 설치된 파이썬 버전을 기반으로 가상환경을 만듭니다.

 

uv에서 특정 파이썬 버전으로 가상환경을 만들려면 해당 버전이 시스템에 먼저 설치되어 있어야 합니다. 파이썬은 공식 웹사이트나 pyenv, 패키지 매니저를 통해 여러 버전을 한 컴퓨터에 설치할 수 있습니다.

 

macOS / Linux의 경우 pyenv를 사용할 수 있습니다.

brew install pyenv         # macOS의 경우
sudo apt install pyenv     # Ubuntu의 경우

pyenv install 3.11.6
pyenv install 3.10.13

 

설치된 버전은 pyenv versions로 확인하고, 특정 버전을 기본값으로 설정할 수 있습니다.

pyenv global 3.11.6

 

Windows의 경우 python.org에서 설치본을 다운로드 받아 설치하거나 winget 명령어로 설치할 수 있습니다.

winget install Python.Python.3.11
winget install Python.Python.3.10

 

설치 후 python3.11 --version 과 같이 확인할 수 있고, uv에서 사용할 때는 해당 경로 또는 명령어를 지정하면 됩니다.

 

다른 파이썬 버전으로 가상환경 만들기

사용하고 싶은 파이썬 버전을 --python 매개변수로 지정합니다.

uv venv --python=python3.11

Windows에서는 파이썬의 전체 경로를 지정합니다.

uv venv --python="C:\Python311\python.exe"

가상환경을 활성화하는 방법은 기존과 동일합니다.

 

macOS/Linux에서는 다음 명령어를 실행합니다.:  .venv/bin/activate

Windows에서는 다음 명령어를 실행합니다.: .venv\Scripts\Activate.ps1

가상환경을 비활성화하려면 다음 명령어를 실행합니다.: deactivate

 

패키지 설치 및 의존성 관리

uvpip의 역할을 빠르고 효율적으로 수행합니다. 아래는 uv pip를 사용하는 주요 예제입니다.

 

패키지 설치 관리

패키지 설치

uv pip install requests

이 명령어는 requests 패키지를 설치합니다. 사용중인 가상환경이 없으면 자동으로 .venv 가상환경을 만들고 거기에 해당 패키지를 설치합니다.

 

설치된 패키지 목록 저장하기

uv pip freeze > requirements.txt

 

requirements.txt 기반으로 패키지 설치하기

uv pip install -r requirements.txt

 

더 빠르고 깔끔하게 동기화하고 싶다면 sync 명령어를 사용할 수 있습니다:

uv pip sync requirements.txt

 

패키지는 어디에 설치될까?

uv pip install로 설치한 패키지는 가상환경 내부의 site-packages 폴더에 저장됩니다.
예를 들어, .venv 폴더를 가상환경으로 사용하고 있다면 다음 경로에 설치됩니다:

 

macOS/Linux에서는 다음 경로에 설치됩니다. : .venv/lib/python3.x/site-packages/

Windows에서는 다음 경로에 설치됩니다. : .venv\Lib\site-packages\

이 경로는 파이썬이 모듈을 찾을 때 사용하는 sys.path에 자동 등록됩니다.
즉, 가상환경을 활성화하면 해당 디렉터리에 설치된 모든 모듈을 바로 import해서 사용할 수 있습니다.

import site
print(site.getsitepackages())

import sys
print(sys.path)

 

uv는 일반적인 파이썬 가상환경 구조를 준수하므로 기존 venv, virtualenv와 완벽히 호환됩니다.

 

이제 uv로 빠르고 깔끔한 파이썬 개발 환경을 구성해보세요.

 

 

가상환경에 대한 보다 자세한 이야기는 제가 번역하고 인사이트 출판사에서 펴낸 <파이썬다운 코드를 개발하는 63가지 실용기법> 488쪽부터 493쪽까지 설명되어 있습니다.

알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=369848931

교보: https://product.kyobobook.co.kr/detail/S000217294649

YES24: https://www.yes24.com/product/goods/151253343

 

파이썬다운 코드를 개발하는 63가지 실용 기법 | 프로그래밍 인사이트 Programming Insight | 용 추이

63가지 핵심 파이썬 기술을 익힐 수 있는 간단하지만 강력한 방법을 제시한다. 예를 들어, ‘시퀀스에서 항목을 찾으려면 어떻게 해야 할까?’와 같은 질문에서 출발하여 매우 명확한 기본 해결

www.aladin.co.kr

 

반응형

개발자에게 물어보세요/인사이트

트와일리오 창업자인 제프로슨이 적은 책이다. 

내가 이 책을 읽고 나서 든 생각은 한줄로 정리된다. 저자가 전달하고 싶은 메시지는 "개발자는 고객의 문제를 기술로 해결해서 비즈니스 가치를 더해주는 사람"이어야 한다는 것이다. 그렇기 때문에 고객을 중심에 놓고 커뮤니케이션을 할 수 있도록 조직을 구성하고, 그들이 하는 행동 하나하나가 고객의 느낌을 좋게 해주기 위한 실험이 될 때 더 큰 기업으로 성장할 수 있다. 원 제목은 "Ask your Developer"인데, 단순히 개발자에게 묻는 것이 아니라 개발자에게 요청하세요라는 의미로도 읽혀졌다.

 이 책을 읽는 동안 팟캐스트 "How I built this"에 Jeff Lawson이 나와서 트와일리오 이야기를 하는데, 책을 읽어서 그런지 조금 더 친숙하게 들렸다.

https://wondery.com/shows/how-i-built-this/episode/10386-twilio-jeff-lawson/

 

How I Built This Podcast with Guy Raz: E504: Twilio: Jeff Lawson

When Jeff Lawson co-founded Twilio in 2008, he had already been through a series of start-ups. Some succeeded, others fizzled out—but each provided insights that led him to build one of the most extensive communication platforms in business. Fueled by hi

wondery.com

 

책 읽으면서 밑줄친 몇 부분을 소개해 본다.

 


소프트웨어가 가속화와 비용절감을 통해 기업이 시장에서 어떻게 유리한 고지를 확보하게 만드는지를 보여주는 사례

수 많은 기업에서 개발자들은 그들이 해결하는 사업적 문제 및 서비스를 제공하는 고객에게서 괴리되어 있음.

하지만 사업가나 개발자 모두 같은 것, 고객을 기쁘게 하고, 고객에게 널리 채택되고, 돈을 많이 버는 멋진 제품을 만드는 것을 원한다.

기술은 제품 자체가 아니라 고객을 모우고, 제품을 유통하고, 궁극적으로 구매부터 제품 사용과정까지 전 과정 내내 고객으로 하여금 원하는 기분을 느끼게 하기 위해 적용된다.

고객의 니즈에 귀 기울인 뒤 학습과 이터레이션을 거듭함으로써 소프트웨어로 고객에 답해야 한다.

소프트웨어 피플이 된다는 건 기술이 아니라 사고방식의 차원. 소프트웨어를 만드는 회사가 되고 싶다면 조직 전체의 사고방식을 바꾸는 것 부터 시작해야 한다.

 책임에 기반한 내부 시스템은 모든 이들의 관심사를 일치시키고, 시간이 지나면서 효율성을 높이고자 하는 자연스러운 동기를 부여한다.

고객을 직접 상대하는 소프트웨어는 꼭 만들어라. 차별화된 경험은 구매할 수 없다. 직접 구축하지 않고는 길이 없다.

기술 책임자들은 코드만 작성하는게 아니고 역량을 발휘하여 사업적 가치를 더할 수 있는 환경을 조성해야 한다. 개발자가 잠재적으로 훌륭한 비즈니스 리더.

실험은 혁신의 전제조건. 더욱 빠르고 저렴하게 실험할수록 더욱 빨리 그럴싸한 결과를 얻기 마련

신속한 이터레이션, 실험, 고객과의 긴밀한 접촉은 혁신의 전제 조건

개발자와 기업가의 관계는 사업 문제를 해결하는 핵심.둘이 협업하려면 사업가는 해결책이 아닌 문제를 공유해야 한다. 사용자가 필요로 하는 것을 깊이 이해하고 그 니즈를 해결할 수 있도록 만드는 것이 핵심.

어떻게 해야할지 몰라서 배우고 익히고 이러는 것이 도전, 배움을 지속해 지평선을 넓혀 간다.

PM은 고객의 문제를 이해시키는데 노력하는 존재.

대자연은 실패한 수백만의 돌연변이를 슬퍼하거나 부끄러워 하지 않는다. 그저 계속 만들어 낼 뿐이다.

실패를 축하하는 것은 그 자체가 아니라 임무를 완수하는데 도움이 되는 깊이있는 배움. 학습 속도를 높여야 한다.

서두르지 말고, 안주하지 마라.

규칙체계를 만든다는 것은 필요없는 규칙을 제거한다는 것을 의미

'배우는 방법을 배우는 과정'

건설적 비판은 사람들을 비방하는게 아니라 그들이 나아지도록 돕는다. 사실상 존중의 한 형태이며 사람들이 배우는 방식중 하나

문제를 분석하고 해결하는 사고 방식을 만들자. 끊임없이 왜라고 물어야 한다.

실제 경험에서 배우는 진짜 학습. 가장 가치있는 학습형태는 실행을 통한 것.

누군가의 미래를 가늠하는 최고의 첫도는 그 사람이 과거에 걸어온 길을 살피는 것이다. 우리는 배우고자 하는 사람을 원하고, 직업을 전환한 부트캠프 졸업자들은 배움의 의지를 보여준다.

머리속에 전체적인 그림을 담고 매일 함께 일하면 놀라울 정도로 빠르게 일을 진행할 수 있다. 소규모 팀의 힘.

튼튼한 고객, 확실한 미션, 성공 지표. 이런 내용은 위에서 만들어지는 것이 아니라 팀에서 만들어지는 것. 그래야 업무를 개인화할 수 있다.

고객, 미션, 핵심 지표, 코드 베이스를 팀과 함께 묶는 것 -> 조직 구조 설계시 고민 포인트

협업을 개선하는 것이 목표가 되어선 안되며, 협업을 줄이는 것이 목표. 내부 협력을 위한 회의 시간을 줄이고 혁신에 더 많은 시간을 할애할 수 있다.촘촘한 피드백 순환과 결과물에 대한 부서를 막론한 주인의식

 

고객중심: 결정의 중심에 고객을 두기 위해 끊임없이 자기교정을 하는 조직을 만드는 것

서비스는 기술적으로 제품을 제공하는 것. 환대는 제품을 제공할 때 받는 사람이 어떤 기분을 느끼도록 만드는 것.

 

 

 

개발자에게 물어보세요 - YES24

스마트 팩토리 구축, 데이터가 흐르는 조직, 실험하는 문화··· 가야 할 곳은 알지만 가는 방법은 막막한 레거시 조직이 21세기 API 경제에서 디지털 공급망으로 승리하는 법기회는 사라지지 않

www.yes24.com

 

반응형

+ Recent posts