내가 가지고 있는 컴퓨터 환경에서 어떤 파이썬을 쓰느냐에 따라 프로그램이 원활하게 작동이 되거나 그렇지 않는다.
가상환경(Virtual Environments)이란 자신이 원하는 Python 환경을 구축하기 위해 필요한 모듈만 담아 놓는 바구니와 같은 것이다.
🗝 keywords
파이썬 패키지, 파이썬 패키지 간 충돌, 파이썬 가상환경
❗️ 하나의 환경에는 패키지당 하나의 버전만이 설치될 수 있다.
가상환경(Virtual Environment): 프로그래밍을 위한 비물리적으로 존재하는 독립적인 환경
- 다양한 버전을 사용하고 충돌을 방지하기 위해서 독립적인 환경을 만든다.
- 로컬 개발환경이 제각각이므로 동일하게 맞춰주기 위해서 환경을 만든다.
위의 그림처럼 두 개의 어플리케이션을 개발한다고 가정해보자.
하나의 파이썬 환경에는 패키지 당 하나의 버전만 설치가 가능하기 때문에 두 어플리케이션을 한 환경에서 작업한다면 패키지들끼리의 충돌이 일어나 개발을 완료할 수 없을 것이다. 이러한 상황을 충돌 (conflict) 이 일어났다고 한다.
충돌은 사용자가 만드는 작업물의 패키지 충돌뿐만 아니라 사용할 패키지를 개발한 패키지 간에서도 일어나기도 하는데 이를 의존성 충돌이라고 한다.
이러한 패키지 간의 충돌을 독립적인 환경을 만들어서 해결할 수 있다.
가상환경을 구축해서 각기 알맞은 파이썬 패키지를 설치하여 실행시키는 이유는 프로그램이 작동하는 운영체제도 물론 다양하게 존재하지만 각 체제를 사용하는 환경도 다양하기 때문이다. 사용되는 파이썬 버전뿐만 아니라 패키지도 다를 수 있기 때문에 문제를 해결하기 위해 개발 당시의 작업 환경을 구현해서 문제를 해결할 수 있는 것이다.
이렇게 적절한 패키지와 모듈을 저장하고 불러오는 방식을 통해 가상환경을 구축하는데 파이썬도 다른 언어들과 마찬가지로 여러 방법들이 있고 이 방식들로 인한 인한 문제들도 있다.
문제가 발생할 수 있는 부분은 크게 두 가지로 나누어볼 수 있다.
pandas
나 numpy
같은 패키지들은 파이썬에서 사용되긴하지만 파이썬에서 기본으로 제공하는 패키지는 아니다.
파이썬이 기본으로 제공하는 패키지들은 'system packages'라고 한다.
파이썬이 기본으로 제공하지 않는 패키지들은 'site packages'라고 한다.
대부분의 패키지들은 파이썬 코드로 디렉토리를 확인할 수 있다.
sys : 시스템 특정 파라미터와 함수
#system pacakage의 디렉토리 확인하기
import sys
print(sys.prefix)
#site package의 디렉토리 확인하기
import site
print(site.getsitepackages())
site packages의 경우에는 결과가 리스트로 보여진다.
리스트로 보여지는 이유는 여러 디렉토리에서 패키지들을 관리하고 있기 때문이다.
site package의 디렉토리 안에는 설치된 파이썬 패키지들이 나열되어 있지만 버전번호는 없다.
파이썬에서 관리하는 파이썬 표준 라이브러리는 버전 번호가 크게 문제되지는 않지만
추가로 설치하게 되는 third party library와 같은 경우에는 문제가 발생할 수 있다.
패키지 버전 번호를 따로 관리하지 않기 때문에 버전이 다른 패키지를 같은 디렉토리에 동일한 이름으로 저장이 되고 사용할 때 이름으로만 불러오기 때문에 버전을 달리해서 불러오거나 구별할 수 없게 된다.
더 높은 버전이라고해서 더 좋다고만 할 수 없다.
버전이 높아졌다는 것은 그 패키지 자체가 변화했다는 것이기 때문에 특정 기능들이 삭제, 변경, 이동 되었을 수 있고 새로운 기능들이 추가되었을 수 있기 때문에 낮은 버전에 맞춰서 설계된 프로그램이 작동하지 않을 수 있다.
따라서 가상환경을 만들어서 각기 따로 패키지를 설치하지 않는다면 동시에 작업을 할 수 없고 작업 자체가 번거로워진다. 이를 해결하기 위해서 프로젝트마다 하나의 가상환경을 만들어 따로 관리를 해주는 것이 바람직하다.
관리 = 여러 개의 파이썬 버전과 패키지 버전들을 따로 보관하는 것.