프로그램언어/파이썬(Python)

[Python] 파이썬 설치목록 관리하기(requirements.txt)

Steve Jang 2021. 1. 3. 21:49

파이썬은 아직 언어가 완벽하지 않은 프로그램 언어이다. 그러다보니 버전업이 될때마다 개발에 대해서 호환이 잘 안되는 경우가 많고, 이는 파이썬 자체뿐만 아니라 라이브러리들도 그러하다. 

 

텐서플로우(Tensorflow)를 하나 예로 들면 이제 나온지 5년도 안된 라이브러리, 프레임워크지만 버전간 호환이 안되는 경우가 허다하고, 이는 곧 특정 버전에 정체 되는 문제를 만든다. 파이썬이란 언어가 개발자보다는 연구원과 같은 비개발자들이 좀 더 선호하는 경향이 많아서 그런지 코딩하는 방식도 워낙 천차만별이고, 서비스에 접목시키기 상당히 어려운 예제들이 많다.

 

자바 개발자는 gradle이나 maven과 같은 빌드툴로 동일한 환경에서 개발을 매우 쉽게 할 수 있으며, war나 jar안에 패키지로 묶어서 실행하는 할 수 있는데 그래도 이 역할을 해주는 것이 requirements.txt라고 할 수 있다. 정확히 requirements.txt 라는 것은 최종적으로 나온 결과물이고 생성해주는 역할은 pip지만 많은 사람들이 requirements로 말을 하며 마치 Rest API로 만들어 달라는 요청을 JSON으로 만들러달라라는 것과 유사하다.

 

파이썬 패키지 리스트 생성 및 설치

 

설치 목록(requirements.txt) 생성하기

보통 파이썬 개발자는 어떤 프로젝트를 하기 전에 가상환경을 만든다. 특정 프로젝트만을 위한 이 가상환경은 환경별로 영역(정확히 말해서 폴더)이 분리되어 있고, 그 폴더에 패키지가 설치되는 방식이다.

 

원하는 가상환경으로 전환

(base) C:\Users\Steel>conda activate saibog
(saibog) C:\Users\Steel>

우선 설치 목록을 생성하기에 앞서 원하는 가상환경으로 전환한다.

 

requirements 생성

pip freeze > requirements.txt

pip freeze라는 것을 사용하면 설치가 가능한 형식으로 목록을 내보낼 수(dump) 있다. 

 

dump된 requirements.txt 파일

absl-py==0.11.0
aiohttp==3.6.3
astunparse==1.6.3
chardet==3.0.4
discord==1.0.1
discord.py==1.5.1
...
tensorboard==2.4.0
tensorboard-plugin-wit==1.7.0
tensorflow==2.3.0
tensorflow-estimator==2.3.0

pip에는 list라고 현재 설치된 라이브러리를 출력하는 기능이 있어서 유사하다 판단할 수 있다.

 

pip list 명령 실행시

(saibog) C:\Users\Stark>pip list
Package                Version
---------------------- -------------------
absl-py                0.11.0
aiohttp                3.6.3
astunparse             1.6.3
async-timeout          3.0.1
attrs                  20.3.0
cachetools             4.2.0
certifi                2020.12.5
chardet                3.0.4
discord                1.0.1
discord.py             1.5.1
gast                   0.3.3
google-auth            1.24.0
google-auth-oauthlib   0.4.2
google-pasta           0.2.0
grpcio                 1.34.0
h5py                   2.10.0
idna                   2.10

그러나 pip list는 단지 리스트를 보는 것일 뿐, requirements는 그대로 설치를 할 수 있게 포맷도 맞춰진 상태이다.

 

설치목록으로 환경 생성하기

이제 requirements.txt로 동일한 환경을 구성해보기로 한다. 이를 위해 다른 컴퓨터에 저장된 requirements를 현재 컴퓨터에 설치를 해보도록 한다.

 

pip install -r requirements.txt

 

기존에 사용하는 pip install에 -r을 붙이면 requirements를 참고하여 설치하게 된다.

 

(tts) C:\project\tts>pip install -r requirements.txt
...
Collecting py==1.10.0
  Downloading py-1.10.0-py2.py3-none-any.whl (97 kB)
     |████████████████████████████████| 97 kB 1.1 MB/s
Collecting pytest==6.2.1
  Downloading pytest-6.2.1-py3-none-any.whl (279 kB)
     |████████████████████████████████| 279 kB 6.8 MB/s
Collecting toml==0.10.2
  Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Building wheels for collected packages: TensorFlowTTS
  Building wheel for TensorFlowTTS (setup.py) ... done
  Created wheel for TensorFlowTTS: filename=TensorFlowTTS-0.0-py3-none-any.whl size=113296 sha256=426ceea86a813c896f95e794335ddd16f91d36029f38c8a4bd2b75ea1d067bc5
  Stored in directory: C:\Users\STEELS~1\AppData\Local\Temp\pip-ephem-wheel-cache-p17zu3g8\wheels\a9\ea\e0\40ae1a57d4fef8d8c2af40e8fa30c27830d7c0e56271453ac8
Successfully built TensorFlowTTS
Installing collected packages: toml, py, pluggy, iniconfig, atomicwrites, TensorFlowTTS, pytest
  Attempting uninstall: TensorFlowTTS
    Found existing installation: TensorFlowTTS 0.0
    Uninstalling TensorFlowTTS-0.0:
      Successfully uninstalled TensorFlowTTS-0.0
Successfully installed TensorFlowTTS-0.0 atomicwrites-1.4.0 iniconfig-1.1.1 pluggy-0.13.1 py-1.10.0 pytest-6.2.1 toml-0.10.2

(tts) C:\project\tts>