달나라 노트

Python Basic : requirements.txt dependencies (Python library 백업, Python library 관리, python library 버전 관리, python 패키지 관리) 본문

Python/Python Basic

Python Basic : requirements.txt dependencies (Python library 백업, Python library 관리, python library 버전 관리, python 패키지 관리)

CosmosProject 2022. 2. 16. 20:03
728x90
반응형

 

 

 

Python을 이용해서 뭔가를 하다보면 여러 library를 설치하여 사용합니다.

 

사실 이 단계에서는 큰 문제가 발생하지 않는데 만약 컴퓨터를 바꾸거나 포맷하면 이때부터 문제가 발생하기 시작합니다.

 

컴퓨터를 바꿨다고 해봅시다.

이제 새로운 컴퓨터에 python을 설치하고 필요한 library들을 설치합니다.

그리고 사용했던 코드들을 github에서 그대로 가져와서 기존에 잘 실행됐던 코드를 테스트로 실행시켜봅니다.

 

근데 이런 경우 간단한 코드라면 모르겠지만 복잡한 코드는 정말 높은 확률로 에러가 발생합니다.

 

에러의 종류는 다양합니다.

그런데 컴퓨터의 셋팅(기존에 사용하던 코드들, 환경변수 등)이 제대로 되어있다는 가정 하에 이런 상황에서 발생하는 에러는 거의 대부분 python 또는 library들의 버전 충돌로 인한 에러일 가능성이 높습니다.

 

이런 문제를 해결하려면 이전 컴퓨터와 비교해서 python library의 버전을 하나씩 바꿔보며 어느 부분에서 에러가 발생하는지 체크해야합니다.

에러 메세지를 보고 정확히 문제되는 부분을 파악할 수 있다면 비교적 수월할테지만 대부분의 경우 이 또한 어렵습니다.

 

이 과정을 일일이 진행하는 것은 상당히 많은 시간을 요구합니다.

library가 한두개가 아니기 때문이죠.

 

그래서 이번에는 사용하는 python library들의 버전들을 어떻게 관리하고 어떻게 백업하고 어떻게 일괄적으로 설치할 수 있는지를 봐봅시다.

 

여기서는 pip list, pip freeze라는 terminal command가 사용됩니다.

https://cosmosproject.tistory.com/381

 

Python Basic : pip list, pip freeze, conda list (설치된 python library 목록 확인. 설치된 python library의 버전 확

Python에서 여러 라이브러리를 사용하다보면 어떤 library가 설치되어있고 각 library의 버전은 몇인지 알아볼 필요가 생길 때가 있습니다. 그럴때 사용할 수 있는 명령어는 아래 2가지가 있습니다. pi

cosmosproject.tistory.com

만약 pip list, pip freeze 관련 내용을 모른다면 위 내용을 보고오면 도움이 됩니다.

 

 

 

[terminal] $ pip freeze

terminal에 pip freeze를 입력하면, 아래와 같은 결과값이 출력됩니다.

내 컴퓨터에 설치된 python library들과 각 library들의 버전 정보가 출력됩니다.

 

과거 사용하던 랩탑에서 pip freeze를 입력하고 이제 이 내용을 모두 백업할겁니다.

 

 

 

 

 

[terminal] $ cd ~/documents/

먼저 백업 파일을 저장할 위치로 이동합니다.

(cd command는 원하는 위치로 이동하는 명령어입니다.)

 

 

 

 

 

[terminal] $ pip freeze > requirements.txt

terminal에 위 명령어를 입력해봅시다.

위 명령어는 현재 directory에 pip freeze의 내용을 담은 requirements.txt 파일을 생성한다는 의미입니다.

 

따라서 이동했던 ~/documents/ 디렉토리에 requirements.txt라는 파일이 생성됩니다.

그리고 이 파일을 열어보면 pip freeze 명령어의 결과가 그대로 담겨있습니다.

 

 

 

 

 

그리고 이 파일을 새로운 랩탑으로 옮겨서 원하는 directory로 이동합니다.

[terminal] $ cd ~/documents/

저는 ~/documents/ 디렉토리에 requirements.txt 파일을 넣어뒀고 terminal에서도 ~/documents/ 로 디렉토리를 옮겼습니다.

 

 

 

 

 

그리고 아래 명령어를 입력합니다.

[terminal] $ pip install -r requirements.txt

이 명령어는 requirements.txt 파일에 있는 모든 library를 각 library의 버전에 맞게 설치해줍니다.

 

이러면 굳이 사용하던 library를 버전에 맞게 일일이 설치할 필요도 없고 편리합니다.

 

물론 이 방법을 사용해도 requirements.txt 파일의 library들을 설치하는 동안 에러가 발생할 수 있지만 이를 하나씩 해결해주면 됩니다.

 

 

 

 

 

 

[terminal] $ pip freeze > requirements.txt

근데 여기서 한 가지 중요한 것이 있습니다.

위 명령어를 입력해서 requirements.txt 파일을 생성했을 때 모든 library는 아래와 같이 표시되어야 합니다.

library_name==version 과 같은 형태 말이죠.

 

pandas==1.2.1
numpy==1.20.0
openpyxl==1.0.0
XlsxWriter==1.2.1
psycopg2==2.8.3
QtPy==1.9.5
matplotlib==3.5.0

 

 

 

근데 간혹 pip freeze를 입력하면 일부 library가 아래와 같이 출력될 때가 있습니다.

[terminal] $ pip freeze


-- Result
pandas==1.2.1
numpy==1.20.0
openpyxl==1.0.0
XlsxWriter==1.2.1
psycopg2==2.8.3
QtPy==1.9.5
matplotlib==3.5.0
seaborn @ file:///opt/concourse/worker/volumes/live/291hd190sdk4h29xk/work

seaborn 패키지의 내용이 버전이 아닌 무슨 경로같은 형태로 출력됩니다.

이런 경우 pip freeze > requirements.txt에 의해 생성된 requirements.txt 파일에도 위 내용이 그대로 저장됩니다.

 

그러면 나중에 pip install -r requirements.txt 명령어를 이용해 패키지 설치를 할 때에도 에러가 발생합니다.

seaborn 패키지의 버전이 아니라 이상한 경로가 확인되니까요.

 

seaborn==1.0.0 같은 형태가 아니라 어떤 경로같은 텍스트가 버전 대신 출력되는 이유는 pip freeze 버전 20.1에서 생기는 이슈라고 하는거같네요.

어쨌든 위같은 경우 terminal에 아래 명령어를 입력해봅시다.

[terminal] $ pip list --format=freeze


-- Result
pandas==1.2.1
numpy==1.20.0
openpyxl==1.0.0
XlsxWriter==1.2.1
psycopg2==2.8.3
QtPy==1.9.5
matplotlib==3.5.0
seaborn==0.11.2

그러면 모든 패키지 정보가 library_name==version 의 형태로 정상적으로 출력되는 것을 볼 수 있습니다.

 

 

 

[terminal] $ pip list --format=freeze > requirements.txt

그러면 위 명령어를 입력해봅시다.

 

pip list --format=freeze 명령어의 출력 결과를 requirements.txt 파일에 담아 생성하겠다는 의미입니다.

 

 

 

 

 

 

728x90
반응형
Comments