리눅스 pip 라이브러리 삭제

손승운·2024년 4월 8일
2
post-thumbnail

0. 공통

  • 일단 저는 한솔데코라는 인테리어 회사의 신사업전략팀에서 LLM 모델 개발을 하고 있는 손승운 대리입니다.
  • 지금 작성하는 글의 목적은 제가 직접 겪은 문제들을 기록하여 1. 앞으로 같은 문제가 발생했을 시 원활하게 해결하기 위함이 첫번째고, 2. 저와 같은 문제를 겪었을 다른 신입 개발자들에게 도움이 되는 정보를 제공하고자 함이 두번째 목적입니다.

1. 개요

  • 때는 2024. 04월 따뜻해지는 봄만큼이나 제 마음도 새카맣게 타들어갔습니다.
  • 그 이유는 모델을 돌리는 족족 의존성 문제가 발생했기 때문입니다.
  • 가상환경을 켠채, pip uninstall ~을 입력하며 일일이 라이브러리를 삭제하고 다시 설치하는 것을 수백번 반복했습니다.
  • 이미 2주 전 리눅스 환경을 싹 다 밀고 다시 설치한 과오를 반복하고 싶지 않았기에 며칠 간 남몰래 속으로 끙끙 앓았습니다.
  • 아래 '2. 문제 해결 과정'은 쓸데 없는 내용이니 급하신 분은 '3.해결방법'만 보셔도 됩니다.

2. 문제 해결 과정

  • 처음에는 터미널 에러메시지에 해당하는 라이브러리를 재설치하는 방법을 택했습니다.
pip uninstall 라이브러리명
  • 하지만 진전이 없었기에 전체 모델을 Git Hub에 저장한 후, 가상환경과 해당 폴더를 싹 다 밀고 다시 설치 했습니다.
conda remove --name 가상환경명 --all
  • 하지만 이 역시 해결되지 않았습니다. 그래서 cuda toolkit, anaconda 등을 다시 설치도 해봤으나 역시나 해결되지 않았습니다.

  • 이 의미없는 짓을 반복하던 중 제가 개발 좌우명으로 삼고 있는 아인슈타인의 '같은 일을 되풀이하면서 다른 결과를 기대하는 것은 정신이상이다.'라는 격언이 떠올랐습니다. 저는 정상인이고 싶었습니다.

  • 문제의 원인을 재정립해야 했습니다.

  • 이전에는 단순히 라이브러리 간 충돌 혹은 의존성문제라고 정의했다면, 지금부터는 '그럼 왜 충돌이 났고 의존성 문제가 발생했지'를 찾아야 했습니다.

  • 그러던 중 라이브러리 버전이 자꾸 재설치하기 전 버전으로 되돌아간다는 것을 포착했습니다.

  • 그래서 나름의 테스트를 했습니다. 테스트 방법은 서로 다른 가상환경과 모델의 조합에서도 문제가 발생하는지 알아보는 것이 었습니다.

  • 테스트 결과, 다른 가상환경과 다른 모델 조합(3 * 3 == 9가지)에서도 동일한 문제가 발생함을 알 수 있었습니다.

  • 특히, 이전에는 문제없이 실행됐던 환경과 모델도 실행되지 않음을 확인했습니다. 흥미로웠습니다.

  • 아니 사실 흥미롭지 않았습니다. 어이가 없었습니다.

  • 왜 안되지를 고민하다보니, 제가 이전에 실수로 가상환경을 activate 하지않고 라이브러리를 설치했었다는 것이 기억났습니다.

  • 전역에 설치됐던 라이브러리들이 새로 설치된 라이브러리와 버전충돌을 일으켰던 것이 원인이었습니다.

  • 특히 cudatookit은 가장 최신의 버전을 사용하므로, 전역에 설치한 cudatookit 버전이 가상환경에 설치한 버전보다 최신의 것이면 가상환경에 설치한 버전을 무시하고 전역의 cudatookit 버전을 사용하여 다른 라이브러리들과 충돌 내지는 의존성 문제가 발생하는 것이 문제였습니다.

  • 그래서 전역에 설치된 라이브러리를 일일이 조회하고 삭제하려고 했습니다.

  • 그런데 문제점은 저 수많은 파일 중 제가 pip로 설치한 라이브러리가 뭔지 몰랐습니다.

  • 휴먼 에러로 인해 작업했던 파일을 다 날릴 수 있으니 자동으로 pip로 설치한 라이브러리만 묶어서 삭제할 수 있는 방법이 필요했습니다.

  • 그러다 개꿀 방법을 찾았습니다.

3.해결방법(여기만 봐도 돼요!!)

  • 해결 방법은 pip로 설치한 라이브러리 명을 파일에 작성한 후, 해당 파일에 적혀있는 라이브러리들을 일괄 삭제하는 것입니다.
  • 먼저 백업을 해둡시다.(백업은 생활화!)
  • 우리는 모두 'pip로 설치한 라이브러리 명을 파일에 작성'하는 방법을 알고 있어요. 그렇다고 믿습니다.
# requirements.txt  생성
pip freeze > requirements.txt
  • 상기의 코드를 실행하면 pip로 설치한 라이브러리명을 requirement.txt 파일에 저장할 수 있습니다.
  • 마지막으로 생성된 requirements.txt를 읽어 라이브러리를 삭제하면 됩니다.
pip uninstall -r requirements.txt -y
  • 끄읕~

4. 느낀 점

  1. 문제가 잘 해결되지 않는다면 근본적인 원인이 무엇인지 고민해본다.
  2. 기본기가 중요하다. 기계적으로 requirements.txt를 통해 패키지 관리했었기 때문에, 이를 응용할 생각을 못했었다.
  3. 라이브러리 설치 시 반드시 가상환경을 켰는지 수회 확인하고, 만약 전역에 라이브러리를 설치했다면 그 즉시 삭제하여 추후에 귀찮은 일이 발생하지 않도록 한다.
profile
당신을 한 줄로 소개해보세요

0개의 댓글