Skip to content

Commit

Permalink
[DOCS] Adjust spacing for better presentation
Browse files Browse the repository at this point in the history
  • Loading branch information
bramilch committed Oct 22, 2024
1 parent bba41fa commit e037888
Showing 1 changed file with 1 addition and 37 deletions.
38 changes: 1 addition & 37 deletions _posts/2024-08-11-kr-comparing-python-virtual-envrionments.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,8 @@ mermaid: false

## 1. 파이썬 가상환경 도구 목적, 구현 원리

<br>

### 목적

<br>

- 파이썬 가상환경은 프로젝트별로 파이썬 버전을 분리하는 것이 가장 큰 목적이고, 해당 파이썬 버전을 기반으로 한 디펜던시 관리, 개발, 테스트, 배포를 목적으로 함.

- 파이썬 가상환경 도구들은 venv, virtualenv, virtualenvwrapper, pyenv, conda, poetry 정도가 있음.
Expand All @@ -59,7 +55,6 @@ mermaid: false
- pyenv의 경우, 공식 문서에서 windows를 공식적으로 지원하지 않고, Linux의 Windows 하위 시스템에서도 작동하지 않아 @kirankotari의 pyenv-win 포크해서 사용하라고 함.
[GitHub] pyenv <https://github.com/pyenv/pyenv?tab=readme-ov-file#windows>

<br>

### 파이썬 가상환경 도구들의 격리 원리

Expand All @@ -77,28 +72,19 @@ mermaid: false

- 이 3가지는 가상환경을 실행할 때 패키지 설치나 스크립트 실행과 같은 모든 Python 작업이 해당 환경에만 국한되고 시스템 전체의 Python 설치나 다른 가상환경을 방해하지 않음.

<br>

##### 주요 구성 요소

<br>

- ***sys.prefix***: Python의 sys.prefix가 변경되어 가상환경의 디렉터리를 가리켜 설치된 패키지가 해당 환경 내로 한정하도록 함.

- ***환경 변수***: 가상환경이 현재 활성화되어 있음을 파이썬(또는 개발자에게)에 알려주는 환경 변수 ***VIRTUAL_ENV***가 설정됨.

- ***경로 격리***: *파이썬이 모듈을 찾는 위치를 결정하는 파이썬의 sys.path가 수정*되어 *가상환경 내의 패키지가 전역 패키지보다 우선순위를 갖도록 함.*

<br>

#### 가상환경 도구별 구현 세부 사항

<br>

##### 1) venv(또는 virtualenv)

<br>

- 파이썬 인터프리터를 격리: venv를 사용하여 가상환경을 만들면 Python 인터프리터의 복사본(또는 심볼릭 링크)이 가상환경 디렉터리 내에 배치됨. 환경이 활성화될 때 해당 환경과 연결된 특정 Python 버전이 사용되도록 함.

- Site-packages 격리: venv 도구는 가상환경 내의 별도의 Site-packages 디렉터리를 가리키도록 **sys.path를 수정**함. 이 디렉터리에는 가상환경 내에 설치된 모든 라이브러리가 포함되어 있어 전역으로 설치된 라이브러리와 섞이지 않도록 함.
Expand All @@ -110,12 +96,8 @@ mermaid: false

- 비활성화 Deactivation: 가상환경이 비활성화되면 원래 시스템 경로가 복원되고 가상환경이 사실상 “꺼진” 상태가 됨.

<br>

##### 2) pyenv

<br>

- pyenv는 여러 버전의 파이썬 자체를 관리하기 위한 도구로, venv 또는 virtualenv와는 다른 방식으로 작동

- 서로 다른 Python 버전 간에 전환하는 데 도움이 되지만 본질적으로 *venv처럼 프로젝트별 종속성을 관리하지는 않음*.
Expand All @@ -124,12 +106,8 @@ mermaid: false

- 격리: *pyenv 자체는 가상환경을 직접 관리하지는 않지만, venv와 유사한 가상환경 관리 기능을 추가하는 pyenv-virtualenv와 함께 사용할 수 있음.* 이를 사용하면 pyenv로 설치하는 각 Python 버전에 대해 가상환경을 생성할 수 있음. *이 조합은 프로젝트별로 파이썬 버전 격리 및 패키지 격리를 모두 제공*함.

<br>

##### 3) Poetry

<br>

- Poetry는 ***패키지 관리와 가상환경 관리를 결합한 Python용 종속성 관리자 및 프로젝트 관리자***

- 격리된 환경: 기본적으로 ***poetry는 각 프로젝트에 대해 가상환경을 생성***하며, 일반적으로 ***~/.cache/pypoetry/virtualenvs*** 내에 생성됨. 이 ***환경을 자동으로 관리***하고 ***종속성이 이 격리된 환경에 설치***되도록 함.
Expand All @@ -138,12 +116,8 @@ mermaid: false

- 자동 활성화: ***venv와 달리 Poetry를 사용할 때는 환경을 수동으로 활성화하거나 비활성화할 필요가 없음.*** Poetry는 poetry run 또는 poetry shell과 같은 명령을 실행할 때 가상환경을 자동으로 사용. ***가상환경은 pyproject.toml 파일에 의해 프로젝트에 연결***

<br>

##### 4) Conda

<br>

- Python 네이티브 도구는 아니지만, 콘다는 Python 환경, **특히 데이터 과학에서 자주 사용**

- Conda 환경은 Python 가상환경과 유사하지만 더 낮은 수준에서 작동하며 C 라이브러리 등 Python이 아닌 종속성을 관리할 수 있음.
Expand All @@ -152,13 +126,9 @@ mermaid: false

- 교차 언어 지원: ***venv 또는 poetry와 달리 conda 환경은 파이썬이 아닌 패키지를 관리할 수 있음.*** 이는 시스템 전체 설치와 분리된 별도의 라이브러리 복사본을 환경 내에 유지 관리함으로써 이루어짐.

<br>

#### 격리의 기술적 메커니즘

<br>

- 이러한 도구가 Python 환경을 격리하는 방법을 요약하면 다음과 같은 기술적 메커니즘을 조합하여 사용
- 이러한 도구들이 Python 환경을 격리하는 방법은 다음과 같은 기술적 메커니즘을 조합하여 사용

1. **디렉토리 구조 조작**
모든 도구(venv, poetry, pyenv 등)는 가상환경 내에서 특정 디렉터리를 생성하거나 연결
Expand All @@ -177,20 +147,16 @@ mermaid: false
- VIRTUAL_ENV: 환경이 활성화될 때 venv 및 poetry와 같은 도구로 설정함. 환경이 가상환경 내에서 작동하고 있음을 알 수 있도록 도와줌.
- PYENV_VERSION: 현재 환경에서 사용할 Python 버전을 지정하기 위해 pyenv에서 사용

<br>

#### 여러 프로젝트 격리

<br>

- 가상환경에서는 각 프로젝트마다 고유한 종속성 집합을 가질 수 있음.

- 종속성을 별도의 디렉터리(site-packages)에 격리하면 프로젝트에서 다른 프로젝트와의 충돌을 걱정하지 않고 특정 버전의 라이브러리를 사용할 수 있음.

- 각 가상환경에는 자체 pip 또는 poetry 인스턴스가 있으므로 한 프로젝트에 설치된 종속성이 다른 프로젝트에 영향을 미치지 않음.

<br>

## 2. 파이썬 가상환경 도구 비교

|기능/도구|venv|virtualenv|virtualenvwrapper|pyenv|conda|poetry|
Expand Down Expand Up @@ -319,8 +285,6 @@ mermaid: false
- 의견 구조에 적응이 필요할 수 있음.
- 간단한 프로젝트에는 과할 수 있음.

<br>

**Poetry의 강점 및 사용 사례**

- 종속성 관리: Poetry는 복잡한 종속성 그래프를 해결하고, 프로젝트의 종속성을 최신 상태로 유지하고, 여러 환경에서 재현성을 보장하는 잠금 파일(poetry.lock)을 생성하는 등 **종속성 관리에 탁월**한 기능을 제공
Expand Down

0 comments on commit e037888

Please sign in to comment.