본문 바로가기
파이썬/python 문법 & 이론 실습

PIP와 virtualenv, venv

by Bentist 2022. 1. 5.

PIP

파이썬의 개발 환경에서 패키지 라이브러리를 설치하기 위해서 pip 명령을 사용해왔는데 정확히 무슨 뜻일까?
Python Package Index(PyPI) 저장소로부터 파이썬으로 작성된 각종 라이브러리를 설치하고 관리해주는 도구이다.
우분투의 apt-get, CentOS의 yum과 같은 존재라고 생각하면 된다.


💻 pip 사용

  • pip는 자주 업데이트되므로 가상환경에서 최신 버전의 pip로 업그레이드해주는 것이 좋다.

1.1 pip 업그레이드, 버전 확인

pip install --upgrade pip

pip --version


특정 라이브러리를 설치하고 난 후, WARNING 문구가 뜬 것을 볼 수 있다. pip를 업그레이드하라는 것!

pip install pandas 설치

 

1.2 pip 패키지 설치 및 업그레이드

pip install 패키지명

판다스 라이브러리 설치


특정 버전을 설치할 수도 있다.
기본적으로 버전 정보가 입력되지 않으면 최신버전이 설치된다.

$ pip install 패키지명==버전넘버(2.3.0)


특정 버전 이상을 설치

$ pip install 패키지명>=버전넘버(2.3.0)


특정 라이브러리 업그레이드

$ pip install --upgrade 패키지명


라이브러리 삭제

$ pip uninstall 패키지


라이브러리 정보 확인

$ pip show 패키지명


1.3 pip 설치 리스트 확인
현재 가상환경 내에 설치된 라이브러리 목록 나열

pip list pip freeze

pip list


pip list와 다르게 pip freeze는 raw하게 패키지 목록을 출력한다.
pip freeze를 사용하면 설치된 패키지들을 한번에 복사, 저장하여 다른 환경에서도 그대로 설치가 가능하다.

pip freeze


freeze명령어는 pip install에 맞는 형태로 패키지 목록을 *.txt 파일에 저장한다. (파일명은 변경 가능)
프로젝트 협업 시 동일한 작업 환경과 버전을 보장할 수 있다.

pip freeze > requirements.txt

이제 패키지를 설치하고 싶은 다른 가상 환경에 가서 다음의 명령어를 실행한다.

pip install -r requirements.txt

-rread라는 뜻으로 requirements.txt에 있는 목록을 읽은 후 설치하게 된다.

ex. django_test 프로젝트에서 만든 requirements.txt 파일을 새 프로젝트 폴더 내로 복사한 뒤, 설치 진행.
(requirements.txt 파일을 새 프로젝트로 복사하지 않으면, 당연히 파일을 읽어올 수 없어서 Error 출력)

 


 

virtualenv, venv: 파이썬의 독립된 가상 환경

virtualenv가상 환경(virtual environment)을 뜻하며, 독립된 파이썬 환경을 생성하는 도구이다.
가상 환경을 사용하면 버전 문제 차이로 인한 프로젝트 간 충돌 문제를 해결할 수 있고, 독립된 공간에서 원하는 환경으로 각각 개발이 가능하다.

출처: 파이썬 코딩 도장


가상 환경에서 pip로 패키지를 설치하면 가상 환경 폴더의 Lib/site-packages 안에 패키지를 저장해준다.
즉, 프로젝트 A와 B 각각 가상 환경을 만들어서 프로젝트 A에는 패키지X 1.5를 설치하고, 프로젝트 B에는 패키지X 2.0을 설치할 수 있다. 이렇게 하면 파이썬 스크립트를 실행할 때도 현재의 가상 환경에 설치된 패키지를 사용하므로 버전 문제가 발생하지 않는다.

프로젝트마다 서로 다른 개발 환경 구성

 

🔎 virtualenvvenv의 차이는 뭘까?

기본적으로 둘 다 가상 환경을 만드는 라이브러리지만, 약간의 차이가 있다.
https://docs.python.org/3/library/venv.htm

  • venv: Python 3.3 버전 이후부터 기본 라이브러리로 포함되어 별도의 설치 과정이 필요없다.
  • virtualenv: Python 2 버전부터 쓰던 라이브러리로, Python 3에서도 사용 가능하고 별도의 설치 과정 필요

더 정확하게 venv 모듈은 virtualenv의 경량화된 모듈로, 속도와 확장성 측면에서 virtualenv이 더 우수하다고 한다.

대신 venv는 기본 내장 라이브러리이기 때문에 pip install의 설치 과정이 필요없어서 간단한다.

 

1.1 venv으로 가상환경 만들기

# 버전 지정 없이 설치
python -m venv 가상환경이름 

# 버전을 지정해서 설치
py -버전 -m venv 가상환경이름

가상환경은 프로젝트 폴더 아래에 가상환경이름을 지정해서 만드는데, 보통 venv라는 이름으로 생성한다.

venv 이름의 가상환경 생성

가상환경을 만들면, [가상환경 폴더 - Script 폴더 - activate.bat 파일] 을 실행하여 가상환경을 활성화한다.

가상환경\Scripts 폴더 내의 파일들


1.2 가상환경 활성화하기

가상환경이름\Scripts\activate.bat

activate 파일을 실행하면 프롬프트 앞에 (venv) 라고 붙으면서 가상환경이 활성화된다.

가상환경의 파이썬 버전을 확인해보면 3.8.8로 나오는데, 이는 아나콘다를 설치할 때 함께 설치되는 파이썬의 버전이 3.8.8이었기 때문이다. 가상환경의 파이썬 버전을 변경하고 싶으면 다음 포스팅을 참고 바란다.

1.3 가상환경 빠져나오기
가상환경은 deactivate로 빠져나올 수 있다.

deactivate

 


2.1 virtualenv로 가상환경 만들기

venv와 달리 pip installvirtualenv 라이브러리 설치 과정이 필요하다.
pip는 파이썬 버전마다 다르므로, 파이썬 버전을 확인한 뒤 해당 버전에 맞는 pip로 설치를 진행해주어야 한다.
파이썬을 설치하면 기본적으로 Python버전명\lib\site-packages\ 내부에 pip폴더가 존재한다.

1) 파이썬 버전별 pip 버전 확인
내 컴퓨터에는 아나콘다와 함께 자동으로 설치된 파이썬 3.8.8 버전과 추가 설치한 파이썬 3.7.9 버전 두 개가 있다.
버전별로 다른 pip를 어떻게 구분해야 되는 걸까? pip3.7의 3.7은 내가 어떻게 알고 입력했을까?

사실 pip 버전 확인 없이 설치를 진행하는 아주 간단한 방법이 있는데 2-2)를 참고 바란다.

사실은 환경변수의 path에 따라 pip의 버전이 달라질 수 있다.

pip의 실행 파일이 들어있는 \Script에서 pip 버전을 인식하는데, 아나콘다의 파이썬 3.8.8 버전이 파이썬 3.7 버전보다 상위에 위치하여 pip를 실행하면 파이썬 3.8을 먼저 인식하는 것이다.

그럼 파이썬 3.7 버전 Script폴더의 path 우선 순위를 첫번째로 변경해주면?

아래와 같이 pip 버전을 확인해보면, 파이썬 3.7의 pip로 변경되어 있는 것을 볼 수 있다.

헷갈리지 않는가? 같은 pip 명령어로 path에 따라 pip 버전이 달라질 수 있는 것이다. PATH를 매번 변경하지 않고,
맨 처음 캡쳐한 것과 같이 pip와 pip3.7로 구분짓는 방법을 살펴보자.

파이썬이 설치된 C:\Python\Python37\Scripts로 가보면,

파이썬 3.7버전의 pip에 3.7이 붙은 pip3.7이 있는 것을 볼 수 있다. 결국 파이썬 3.7 버전은 pip3.7을 명령어로 명시하여 설치를 진행하고, 파이썬 3.8버전은 pip 명령어로 설치를 진행하면 되는 것이다.

2) virtualenv 가상환경 라이브러리 설치

# Python3.8.8 버전의 pip 
$ pip install virtualenv 

# Python3.7.9 버전의 pip 
$ pip3 install virtualenv


2-2) pip의 버전 확인 없이도, 파이썬 버전 만으로 virtualenv 라이브러리 설치

# py -버전 -m pip install virtualenv 
ex. py -3.7 -m pip install virtualenv


두 명령어 다 같은 결과를 출력하는 것을 볼 수 있다.


3) virtualenv 가상환경 생성

# path에 지정된 파이썬 버전으로 설치 
virtualenv 가상환경이름 
ex. virtualenv myenv 

-------------------------------------------------

# 여러 개 파이썬 설치 버전 중 버전 지정해서 설치 
virtualenv 가상환경이름 --python=파이썬 버전 
ex. virtualenv myenv --python=3.7


4) 가상환경 실행 및 종료

# 가상환경 실행
가상환경이름\Scripts\activate.bat 

# 가상환경 종료 
deactivate.bat

 


# mklink로 링크 걸기


참고로 python3.7 -m virtualenv venv(내가 만들고 싶은 가상환경이름) 명령어로도 가상환경을 생성할 수도 있다고도 하는데, python3.7은 실행할 수 없는 프로그램이라고 나온다.


virtualenv env --python=3.7 명령어와 달리 파이썬 버전을 자동으로 잡아주지 않는다. 조금 번거롭지만, 해결 가능한 방법은 있다. 링크를 거는 형식으로 python을 입력했을 때 python 3.7 버전이 실행되도록 하는 것이다.
mklink 명령어를 통해 python3.7 명령어가 전달되면 파이썬 3.7 버전이 있는 폴더의 python.exe로 연결해준다.

mklink C:\windows\python3.7.exe C:\Python\Python37\python.exe


그럼 C:\windows 폴더에 python3.7.exe 링크 파일이 생겨서 python37\pytnon.exe로 자동 연결된다.


링크 파일을 만든 뒤, python3.7 -m virtualenv venv 을 다시 실행하면 정상적으로 가상환경을 생성한다.


그러나 mklink를 만들고 나서도 venv 모듈의 python3.7 -m venv venv은 동작하지 않는다.


📣 결론

mklink 과정들이 상당히 번거롭고 찝찝 하기 때문에
파이썬 버전 별로 가상환경을 설정할 때는


virtualenv 모듈에서는 virtualenv venv --python=버전
venv 모듈에서는 py -버전 -m venv venv
사용을 권장한다.

댓글