[Python] pip & virtualenv / venv 가상환경 / pipvenv
본문 바로가기
AI/Python

[Python] pip & virtualenv / venv 가상환경 / pipvenv

2022. 7. 24.

1. pip란? 

pip documentation에 의하면,

pip is the package installer for Python.
You can use it to install packages from the Python Package Index and other indexes.

Python Package Index

 docs 설명과 같이 pip는 'Python Package Index (PyPI, The Cheeseshop이라고 불리기도 함, Python 프로그래밍 언어를 위한 소프트웨어 리포지터리; 저장소, 쉽게 이해하자면 패키지 저장소)로부터 Python 패키지를 설치하는 도구'라고 생각하면 된다.

(여기서 또 궁금증, 그러면 package(패키지)는 무엇인가? -> package(패키지)는 module(모듈)를 위한 파일들을 포함한 것(__init__. py 파일 있고...)이다. 그럼 또 궁금증, 그러면 module(모듈)은 무엇인가? -> 변수, 함수, 클래스 등을 모아둔 것 (import 모듈명) )

 pip(2008년 출시)보다 먼저 출시된 easy_install이 있는데, easy_install는 더 이상 사용되지 않기 때문에.....

 

출처 : pip vs easy_install 

  pip easy_install
Installs from Wheels Y N
Uninstall Packages Y
(python -m pip uninstall)
N
Dependency Overrides Y
(Requirements Files)
N
List Installed Packages Y
(python -m pip list)
(python -m pip freeze)
N
PEP 438 Support Y N
Installation format 'Flat' packages with egg~info metadata Encapsulated Egg format
sys.path modification N Y
Installs from Eggs N Y
pylauncher support N Y
Multi-version installs N Y
Exclude scripts during install N Y
per project index Only in virtualenv Y, via setup.cfg

 

1.1 pip freeze

pip freeze 는 설치된 package를 requirements 포맷에 맞게 출력해준다. 개발환경이 바뀌었을 때, 패키지 하나씩 다시 설치할 필요 없이 설치한 package들 목록을 만들어주는 명령어다.

# Unix/macOS
python -m pip freeze -r requirements.txt

# Windows
py -m pip freeze -r requirements.txt

 

1.2 Requirements Files

위의 표에서, Requirements Files는 무엇인가? Requirements Files는 'files containing a list of items to be installed using pip install이다. (virtual environment에 필요한 라이브러리들을 설치하는 데에 사용 가능함.)

설치해야 할 package가 많을 때, pip로 일일이 패키지 하니씩 설치하면 힘들 때, requirements.txt를 통해 package들을 한 번에 설치 및 관리할 수 있다.

python -m pip install -r requirements.txt # Unix/macOS
py -m pip install -r requirements.txt # Windows
빌드 시스템을 사용하여 다른 사람과 프로젝트를 공유하거나 환경을 복원해야 하는 다른 위치에 프로젝트를 복사하려는 경우 프로젝트에 필요한 외부 패키지를 지정해야 합니다. 권장되는 방법은 필요한 종속 패키지 버전을 설치하는 pip 명령 목록이 들어 있는 requirements.txt 파일(readthedocs.org)을 사용하는 것입니다. 가장 일반적인 명령은 pip freeze > requirements.txt이며, 이 명령은 환경의 현재 패키지 목록을 requirements.txt에 기록합니다.

출처 : requirements.txt를 사용하여 필수 Python 패키지 관리

 

1.3 Python Wheel

Python .whl files, or wheels are a little-discussed part of Python, but they’ve been a boon to the installation process for 
Python packages. If you’ve installed a Python package using pip, then chances are that a wheel has made the installation faster and more efficient. Wheels are a component of the Python ecosystem that helps to make package installs just work.

What Are Python Wheels and Why Should You Care? – Real Python

 

 그럼 위의 표에서, virtualenv는 무엇인가?

2. virtualenv / venv 란?

  Python application을 사용할 때, standard library (ex) sys, os, pickle, random...)로부터만 패키지와 모듈 (Python 설치할 때, 기본적으로 설치)을 사용하지 않고, 특정 version의 라이브러리 (외부 라이브러리; external library)가 필요한 경우가 있는데 (특정 버그가 해결된 라이브러리를 요구하는 application이거나, 사용이 만료된  라이브러리 인터페이스(api)를 사용해 만들어진 application일 수 있기 때문이다)

즉, 한 번의 Python 설치로 모든 application의 requirements를 충족할 수 없다는 말이다.

 

 예를 들어, application A가 1.0 버전의 특정 모듈이 필요한데, application B는 2.0 버전의 모듈이 필요할  수 있다. 그럼, 이때 1.0 버전과 2.0 버전이 충돌되는 문제가 발생한다. (application A와 B 중 하나는 run을 하지 못함.)

더 전문적으로 말하자면, 버전 차이로 발생하는 dependency(종속성) 문제를 해결하기 위해서다.

 

https://tibetsandfox.tistory.com/34

 

 그래서 이 해결책으로 등장한 것이 virtual environment (가상환경)을 생성하는 것이다. 각 application만의 가상 환경을 만들어 충돌 문제를 해결하는 것이다.

virtual environment :
a self-contained directory tree that contains a Python installation for a particular version of Python +  a number of additional packages. 

 다른 application은 서로 다른 virtual enviroment를 사용할 수 있게 되면서, requirements가 충돌하는 앞 선의 사례를 해결할 수 있게 되었다. application A는 자신만의 1.0 버전의 virtual environment를 사용하고, application B는 2.0 버전의 virtual environment를 사용함으로써 충돌 문제가 발생하지 않는다. 만약, application B가 3.0 버전으로 upgrade했더라도 application A에 영향을 주지 않을 것이다. 

 

https://docs.python.org/3/tutorial/venv.html#

 

12. Virtual Environments and Packages — Python 3.10.5 documentation

12.3. Managing Packages with pip You can install, upgrade, and remove packages using a program called pip. By default pip will install packages from the Python Package Index, <https://pypi.org>. You can browse the Python Package Index by going to it in you

docs.python.org

 virtualenv는 Python 가상 환경을 생성하는 도구 (a tool to create isolated Python environments)이다. venv는 virtualenv와 같은 기능을 하는데,  Python 3.3버전 이후부터 venv는 standard library에 포함되어 있어 별도의 install이 필요 없고, (venv는 Python에 내장되어 있는 virtual environment module) virtualenv는 별도의 install이 필요하다. 

대신, venv는 virtualenv만큼 모든 기능을 제공하지 않는다. 

 

# virtualenv 설치, 활성화, 비활성화

python3 -m pip install --user -U virtualenv # virtualenv 설치

cd 가상환경 생성할 path
virtual env # 가상환경 생성

# 가상환경 활성화
source env/bin/activate # Linux/macOS
.\my_env\Scropts\activate # Windows

# 가상환경에서 패키지 설치
pip3 install 패키지명 #pip3는 Python 3버전 package manager

# 가상환경 비활성화
deactivate

- venv versus virtualenv 

  • venv는 virtualenv보다 느리다. ('app-data' seed method가 없기 때문)
  • venv는 virtualenv보다 확장적(extendable)이지 않다.
  • venv는 파이썬 버전에 따라 임의적으로 가상 환경을 생성할 수 없다. 
  • venv는 pip를 통해 업그레이드할 수 없다. 
  • venv는 rich programmatic API (describe virtual environments without creating them)를 가지고 있지 않다.

출처 : Virtualenv — virtualenv 20.15.2.dev8+g3c57468 documentation (pypa.io)

 

+) javascript나 다른 언어들에는 가상환경이라는 개념이 (대부분) 없지만, 파이썬에 가상환경이 있는 이유는 무엇인가?

   Java는 'system-wide installed library' 개념이 없다. 그래서 항상 사용하고자 하는 libarary의 class path (class를 찾기 위한 경로)를 찾아줘야 한다. < 하나의 class는 하나의 class 파일 > Python 같은 경우, 다른 두 버전의 동일한 라이브러리를 사용하고 싶다면, virtual environment를 생성해야 충돌이 발생하지 않는데, Java 같은 경우 class path trick으로도 (virtual environment를 생성하지 않아도) 충분히 가능하기 때문이다.

local & global 

https://stackoverflow.com/questions/7300148/is-there-anything-like-virtualenv-for-java 

 

 

Is there anything like VirtualEnv for Java?

Is there anything similar to Python virtualenv for Java or JVM Languages?

stackoverflow.com

3. pipenv란?

Python 가상환경 module로, venv, virtualenv 외에도 conda (Anaconda Python 설치 시 사용 가능), poetry, pyenv (Python Version Manager, 가상 환경 기능을 플러그인 형태로 제공) 등등 종류가 많다.

 

pipenv는 pip + virtualenv로, pip와 virtualenv가 합쳐진 것으로, Python.org에서 pipvenv로 dependency를 관리하기 권장하고 있는 virtual environment module이다. 개인적인 용도면 pip를 사용해도 좋지만, 협업 프로젝트를 한다면, dependency를 관리를 단순화해주는 pipenv를 사용하는 것을 권장하고 있다.

# Unix/macOS
python3 -m pip install --user pipenv

# Windows
py -m pip install --user pipenv

 

- pipvirtualenv를 동시에 사용할 수 있다.

- requirements.txt 대신 PipfilePipfile.lock을 사용한다.

-  Hash가 항상 사용된다. (Security)

- pipenv graph와 같이 dependency graph에 관한 insight를 제공한다.

- .env 파일들을 로딩함으로써 development workflow 간소화

 

Reference

https://github.com/pypa/pipenv

 

GitHub - pypa/pipenv: Python Development Workflow for Humans.

Python Development Workflow for Humans. Contribute to pypa/pipenv development by creating an account on GitHub.

github.com

https://dining-developer.tistory.com/21

 

Data Scientist를 위한 TOP 4 파이썬 가상환경 비교

어떤 파이썬 가상 환경이 나에게 알맞을까? 가상 환경은 신입 프로그래머들에게 비교적 이해하기 어려운 내용이다. 초짜 시절 가상 환경을 사용하면서 내가 이해한 것은 고작 MacOS나 Windows에서

dining-developer.tistory.com

https://devbull.xyz/python-create-environment/

 

파이썬 가상환경 비교(pipenv, venv, pyenv, conda)

🖐귀찮은데 그냥 깔면 안돼요? 파이썬은 같은 인터프리터 버전이라면 같은 패키지를 공유한다. 예를 들어 프로젝트 A와 B에서 Python 3.9.4를 사용하고 있다면, A에서 설치한 패키지를 B에서도 사용

devbull.xyz

https://tibetsandfox.tistory.com/34

 

파이썬(Python) - 가상 환경(Virtual Environments)

가상 환경(Virtual Environments)이란? 가상 환경은 독립적인 파이썬 실행 환경을 의미합니다. 각각의 가상 환경은 다른 환경에 영향을 미치지 않으며 각자 다른 종류와 버전의 패키지를 가질 수 있습

tibetsandfox.tistory.com

파이썬 초심자를 위한 PIP 그리고 Virtualenv 소개 | by Dan Kim | Medium

 

파이썬 초심자를 위한 PIP 그리고 Virtualenv 소개

이 글은 A non-magical introduction to Pip and Virtualenv for Python beginners를 번역한 글입니다.

medium.com

Python PIP (w3schools.com)

 

Python PIP

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

What Are Python Wheels and Why Should You Care? – Real Python

 

What Are Python Wheels and Why Should You Care? – Real Python

In this tutorial, you'll learn what Python wheels are and why you should care as both a developer and end user of Python packages. You'll see how the wheel format has gained momentum over the last decade and how it has made the package installation process

realpython.com

https://docs.microsoft.com/ko-kr/visualstudio/python/managing-required-packages-with-requirements-txt?view=vs-2022 

 

Python 패키지 종속성 관리 - Visual Studio (Windows)

pip freeze > requirements.txt를 사용하고 Visual Studio에서 python 패키지 종속성을 관리합니다.

docs.microsoft.com

[Python] virtualenv 가상환경 설정하기. Python의 virtualenv 설치/사용법. virtualenv는… | by Jaemun Jung | Medium

 

[Python] virtualenv 가상환경 설정하기

Python의 virtualenv 설치/사용법. virtualenv는 플리케이션별로 독립된 가상 환경을 사용할 수 있게 해줍니다.

jaemunbro.medium.com

Virtualenv — virtualenv 20.15.2.dev8+g3c57468 documentation (pypa.io)

 

Virtualenv — virtualenv 20.15.2.dev8+g3c57468 documentation

© Copyright 2007-2022, PyPA, PyPA. Revision 3c574684. Last updated on 2022-07-23T15:58:53.588974.

virtualenv.pypa.io

Python 가상환경(Virtual Environment) 만들기 위한 virtualenv 명령어 및 실행 예제 (tistory.com)

 

Python 가상환경(Virtual Environment) 만들기 위한 virtualenv 명령어 및 실행 예제

Python은 2.x 버전부터 3.10 버전까지 개발되어 있습니다. 2.x버전과 3.x 버전에는 문법에 있어 많은 변경이 있었고, Python 3.x 버전에서도 기본적은 문법은 동일하나 함수 paramter 등의 변화가 있었습니

kibua20.tistory.com

https://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/

 

A non-magical introduction to Pip and Virtualenv for Python beginners

Blog Post by Jamie Matthews

www.dabapps.com

 

댓글