requirements.txt 사용방법
requirements.txt을 사용하는 방법을 다룹니다. 보통 특정 파이썬 프로젝트를 위한 패키지들을 requirements.txt에 저장하기 위해 사용합니다.
pip를 사용하여 설치했던 패키지들을 requirements.txt 파일에 저장했다가 새로운 개발환경에서 똑같은 패키지들을 한번에 설치할 수 있습니다.
2024. 2. 24 최초작성
2024. 5. 5 빠져있던 requirements.txt 생성하는 부분 추가
Miniconda/Anaconda를 사용하면 진행하는 Python 프로젝트 별로 패키지를 별도로 관리할 수 있어 좋습니다. Miniconda를 처음 사용할땐 왜 사용하는지 이해할 수 없었지만 익숙해지고 나니 프로젝트별로 패키지를 따로 관리하는게 더 편합니다. 여러가지 이유가 있지만 그중 하나는 여러 개의 프로젝트의 패키지를 하나에 설치하다보면 버전 충돌이 나서 문제가 되는 경우가 있더군요. 두 개의 파이썬 패키지가 요구하는 또다른 패키지의 버전이 차이가 나는 경우가 생기기 때문입니다.
본 포스트는 다음 포스트대로 설치환경이 구성된 이후라 가정하고 설명하지만 필요한 부분만 취하여 requirements.txt를 사용하여 패키지를 관리해도 됩니다.
Visual Studio Code와 Miniconda를 사용한 Python 개발 환경 만들기( Windows, Ubuntu, WSL2)
https://webnautes.tistory.com/1842
Apple Silicon Macbook에 Miniforge 설치하여 Visual Studio Code와 연동하기
https://webnautes.tistory.com/2101
진행을 윈도우에서 하고 있지만 동일하게 맥이나 리눅스에서도 사용가능합니다.
opencv 패키지를 설치하여 사용할 opencv 이름의 가상환경을 생성합니다. 파이썬 버전은 3.12를 사용합니다.
(base) C:\Users\webnautes>conda create -n opencv python=3.12 |
opencv 가상환경을 활성화하면 프롬프트 앞에 (opencv)가 붙습니다.
(base) C:\Users\webnautes>conda activate opencv (opencv) C:\Users\webnautes> |
opencv 패키지를 설치합니다.
(opencv) C:\Users\webnautes>pip install opencv-python |
설치된 패키지 목록을 확인합니다.
(opencv) C:\Users\webnautes>pip list Package Version ------------- -------- numpy 1.26.4 opencv-python 4.9.0.80 pip 23.3.1 setuptools 68.2.2 wheel 0.43.0 |
이제 새로운 파이썬 가상 환경을 생성하여 opencv 가상환경과 동일하게 opencv 패키지가 설치된 상태로 만들어 보겠습니다.
우선 설치된 패키지 목록을 requirements.txt 파일에 저장합니다.
pip list --format=freeze > requirements.txt |
다음처럼 하라는 글도 보이는데 간혹 패키지 버전이 다음처럼 보이는 문제가 발생합니다.
pip freeze > requirements.txt |
Brotli @ file:///croot/brotli-split_1714483155106/work
certifi @ file:///croot/certifi_1707229174982/work/certifi
charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work
contourpy==1.2.1
cycler==0.12.1
Cython==3.0.10
filelock @ file:///croot/filelock_1700591183607/work
fonttools==4.51.0
future==1.0.0
gmpy2 @ file:///work/ci_py311/gmpy2_1676839849213/work
idna @ file:///croot/idna_1714398848350/work
iso8601==2.1.0
Jinja2 @ file:///croot/jinja2_1706733616596/work
kiwisolver==1.4.5
lapx==0.5.8
MarkupSafe @ file:///croot/markupsafe_1704205993651/work
matplotlib==3.8.4
mpmath @ file:///croot/mpmath_1690848262763/work
networkx @ file:///croot/networkx_1690561992265/work
numpy==1.22.2
opencv-python==4.9.0.80
packaging==24.0
pillow @ file:///croot/pillow_1714398848491/work
pyparsing==3.1.2
pyserial==3.5
PySocks @ file:///work/ci_py311/pysocks_1676822712504/work
python-dateutil==2.9.0.post0
PyYAML @ file:///croot/pyyaml_1698096049011/work
requests @ file:///croot/requests_1707355572290/work
scipy==1.13.0
six==1.16.0
sympy @ file:///croot/sympy_1701397643339/work
triton==2.3.0
typing_extensions @ file:///croot/typing_extensions_1705599297034/work
urllib3 @ file:///croot/urllib3_1707770551213/work
이제 requirements.txt 파일의 내용을 확인해봅니다. 패키지 이름과 버전이 적혀 있습니다. 그사이에 ==의 의미는 똑같은 버전의 패키지를 설치해야 한다는 의미입니다. 리눅스에선 cat requirements.txt 명령을 사용하세요.
(opencv) C:\Users\webnautes>type requirements.txt numpy==1.26.4 opencv-python==4.9.0.80 pip==23.3.1 setuptools==68.2.2 wheel==0.43.0 |
이제 새로운 파이썬 가상환경을 생성하고 활성화합니다. 파이썬 3.9를 사용하는 test 이름의 파이썬 가상환경입니다.
(opencv) C:\Users\webnautes>conda create -n test python=3.9 |
test 파이썬 가상환경을 활성화합니다. 여전히 같은 경로인 것을 알 수 있습니다. 파이썬 가상환경을 바꾼다고해서 현재 경로가 바뀌는것은 아니고 사용가능한 파이썬 버전이나 패키지만 바뀌는 것입니다.
(opencv) C:\Users\webnautes>conda activate test (test) C:\Users\webnautes> |
다음 명령을 사용하여 requirements.txt를 현재 파이썬 가상환경에 반영합니다. 패키지 설치가 진행됩니다.
(test) C:\Users\webnautes>pip install -r requirements.txt |
설치된 패키지와 버전을 확인해보면 requirements.txt 파일과 동일합니다. 만약 파이썬 가상환경에 다른 패키지들이 설치되어 있었다면 그 패키지들은 유지되고 추가로 requirements.txt 파일에 있는 패키지가 설치됩니다. 만약 동일한 패키지가 이미 설치되어 있다면 requirements.txt 파일에 있는 버전으로 패키지가 변경됩니다.
(test) C:\Users\webnautes>pip list Package Version ------------- -------- numpy 1.26.4 opencv-python 4.9.0.80 pip 23.3.1 setuptools 68.2.2 wheel 0.41.2 |
참고
https://itholic.github.io/python-requirements/