requirements.txt는 npm의 packages.json과 유사하게, 의존성의 목록을 관리하는 Python의 관례적인 파일입니다. 다수의 개발자가 Python으로 프로젝트를 진행하는 경우, 개발 시 필요한 의존성 패키지들을 동일하게 맞추고 개발하는 것이 좋습니다. Python은 requirements.txt라는 개념을 통해 이를 해결합니다.

pip freeze

pip freeze라는 명령이 있습니다. pip list처럼 시스템에 설치된 파이썬 패키지의 목록을 출력하는데, freeze의 경우 이 목록을 raw하게 표현한다는 특징이 있습니다.

$ pip3 freeze
pbr==4.0.4
six==1.11.0
stevedore==1.28.0
virtualenv==16.0.0
virtualenv-clone==0.3.0
virtualenvwrapper==4.8.2

이전에 pip install을 하면서, 특정 버전의 패키지를 설치할 때 사용했던 표현과 동일합니다. 따라서 최초 개발자 A는 pip freeze 명령어의 결과를 외부 파일로 export해 의존성 목록을 만들 수 있습니다.

$ pip3 freeze > requirements.txt

requirements.txt 파일 내에는 다음과 같이 개발 시 필요한 패키지들이 저장됩니다.

$ cat requirements.txt
pbr==4.0.4
six==1.11.0
stevedore==1.28.0
virtualenv==16.0.0
virtualenv-clone==0.3.0
virtualenvwrapper==4.8.2

파일 이름은 아무렇게나 해도 상관 없으나, 관례 상 위처럼 requirements.txt를 사용하는 것이 좋습니다.

pip install -r [filename]

pip install 명령에는 전달할 수 있는 많은 인자들이 존재하지만, --upgrade와 이 -r 인자를 가장 많이 사용할 것입니다. pip install 뒤에 -r을 붙이고, 의존성 목록이 적혀 있는 파일의 경로를 입력하면 적혀 있는 그대로 패키지들이 설치됩니다.

$ pip3 install -r requirements.txt
Collecting pbr==4.0.4 (from -r requirements.txt (line 1))
https://files.pythonhosted.org/packages/b3/5d/c196041ffdf3e34ba206db6d61d1f893a75e1f3435699ade9bd65e089a3d/pbr-4.0.4-py2.py3-none-any.whl
Collecting six==1.11.0 (from -r requirements.txt (line 2))
https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting stevedore==1.28.0 (from -r requirements.txt (line 3))
https://files.pythonhosted.org/packages/17/6b/3b7d6d08b2ab3e5ef09e01c9f7b3b590ee135f289bb94553419e40922c25/stevedore-1.28.0-py2.py3-none-any.whl

(...)

Installing collected packages: pbr, six, stevedore, virtualenv, virtualenv-clone, virtualenvwrapper
Successfully installed pbr-4.0.4 six-1.11.0 stevedore-1.28.0 virtualenv-16.0.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

귀찮음을 줄여주는 간단한 pip 관련 명령 모음(Draft)  (0) 2018.11.12
pip  (0) 2018.11.05
__slots__  (0) 2018.11.03
Context Manager  (0) 2018.11.01
Argument Unpacking  (0) 2018.10.30

+ Recent posts