nodejs 를 공부해보신 분들은 알겠지만, npm 을 이용해서 필요한 패키지를 설치하면 해당 프로젝트 안에 node_modules 라는 폴더가 생성되는 것을 알 수 있다. 이 아래에 모든 패키지들이 설치된다. 이렇게 되면, 여러개의 프로젝트를 관리할때 프로젝트마다 각기 다른 폴더에 패키지들이 설치되어 서로 충돌이 발생하지 않는다. 물론 필요하면 특정 패키지에 대해서는 옵션을 주어서 전역으로도 설치가 가능하다.

 

그런데, 파이썬의 경우, 패키지가 기본적으로 전역으로 설치되어, 모든 프로젝트에서 함께 쓰이도록 되어 있다. 프로젝트에 별도로 패키지가 설치되도록 하는 옵션이 없다. 이 때문에, 프로젝트간에 패키지의 버전을 다르게 쓰고자 할 때 문제가 발생한다.

 

이런 문제를 해결하고자, 임시 방편으로 가상환경이라는 것을 구성하여 프로젝트를 관리한다. 파이썬 가상환경을 구현할 수 있는 툴은 여러가지가 있는데, 여기에서는 파이썬 자체에서 기본적으로 제공하는 venv 모듈을 알아보도록 하자.

현재 PC에 설치된 파이썬 버전은 위와 같다. pyenv 를 이용해서 pyt;hon 3.12.6 버전을 설치해놓았다.

테스트를 위해서 prj1 폴더를 만들어 보자.

그리고, 여기에서 가상환경을 만들어보자. 가상환경을 만드는 방법은 파이썬에 기본 내장 모듈인 venv 를 사용하는 것인데, python -m venv 가상환경이름 으로 생성한다. 가상환경이름은 원하는 것으로 하면 되지만, 통상적으로 .venv 를 많이 사용한다. 그래서 다음처럼 python -m venv .venv 를 입력해서 가상환경을 생성한다. .venv 라는 폴더가 생성된다. 그리고, 가상환경을 활성화해야 한다. 아래는 Windows 환경이어서 .venv\Scripts\activate 를 실행하였지만, Mac/Linux 의 경우에는 .venv/bin/activate 를 실행해야 한다. which python 을 입력해서 python 이 어느 위치에 있는 것인지 파악해보자. .venv 폴더 아래에 있는 python.exe 가 사용됨을 알 수 있다.

이 상태에서 pip list 를 입력해서 현재 설치되어 있는 패키지 목록도 살펴보자. 그리고, pip install fastapi 를 입력해서 fastapi 패키지를 설치해본다.

다시, pip list 를 입력해보면, fastapi 0.115.0 과 관련된 다른 패키지까지 설치된 것을 확인해볼 수 있다.

이제, deactivate 를 입력해서 가상환경을 빠져나온다.

그리고, 새로은 프로젝트 폴더 prj2 를 만들고, 여기에도 새로운 가상환경을 만들어본다. 그리고, pip list 를 입력해보면,  pip 만 설치된 것을 확인할 수 있다. prj1 과는 다르게 fastapi 0.100.0 버전을 지정해서 설치해본다. pip install fastapi==0.100.0 을 입력하면 된다.

다시, pip list 를 입력해보면, fastapi 0.100.0 과 관련된 다른 패키지까지 설치된 것을 확인할 수 있다. 결국, prj1 과 prj2에는 로컬폴더에 각기 다른 버전의 fastapi 를 설치하게 된 것이다.

pip freeze 를 입력하면 pip list 와는 다른 형태로 설치된 패키지 목록을 보여준다. 이것을 requirements.txt 에 저장해둔다. 이렇게 저장해둔 파일을 이용해서 다른 폴더에 똑같은 패키지를 설치할 수 있기 때문이다. 이 requirements.txt 파일은  nodejs 의 package.json 의 dependencies 항목에 해당된다고 볼 수 있을 것이다.

deactivate 를 입력해서 prj2의 가상환경을 빠져나와서, prj3 플더를 만든다. 그리고, 여기에도 가상환경을 만들어주고, 활성화시킨다.  이상태에서 pip list 를 하면 역시 설치된 패키지가 없을 것이다.

이제, prj2 에서 만들어 놓은 requirements.txt 를 복사해와서, 이것을 이용해서 패키지들을 설치해보자. pip install  -r requirements.txt 를 입력해보자.

그러면, 아래와 같이 패키지들이 설치되는 것을 볼 수 있을 것이다.

그리고, pip list 를 입력해보면, prj2 에서 설치했던 패키지들이 그대로 prj3에 설치된 것 까지 확인할 수 있다.

 

여기까지 익히면, 여러개의 파이썬 프로젝트를 운용하는데 크제 문제는 없을 것이다.

 

 

+ Recent posts