본문 바로가기

DATA SCIENCE/Study

ModuleNotFoundError: No module named 'apt_pkg'

WSL2, Ubuntu-18.04 환경에서 Yolov4 Darknet에 대해 테스트를 진행 중 다음과 같은 에러가 발생했다.

ModuleNotFoundError: No module named 'apt_pkg'
Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi' E: Sub-process returned an error code

오류 화면

 

사용하고 있는 GPU가 30 시리즈인 반면, 작동해야하는 코드들은 CUDA 10.1 버전에서 돌아가는 것들이 꽤나 많았다.

 

이러한 이유들로 인해 두 가지 이상의 쿠다 버전을 동시에 설치해 상황에 따라 스위칭하는 방식으로 작동해야 했으며(RTX 30시리즈는 CUDA 11 버전 이상에 대해서 작동한다. 구글링 결과 runfile을 통해 로컬 환경에서 CUDA 10버전 대를 설치해 사용할 수 있다고 해 따라해보았으나 실패), 이를 위해 Ubuntu-18.04 환경에서 python 3.7 버전을 설치해 기본값으로 지정해 사용하는 와중 위와 같은 에러가 발생했다.

 

정확히는 Ubuntu-18.04 환경에서 python3.7 설치 이후 python3의 기본값으로 지정한 뒤, sudo apt update를 실행했을 때 발생한 오류였다.

 

이를 확인해보니 apt 명령어로 설정된 것이 기존의 3.6 버전에 대해서만 있기 때문에 발생한 오류이며, 이를 해결하기 위한 방법은 크게 두 가지였다.

 

1. python3.6 버전으로 돌아간다.

2. apt를 3.7 버전으로 재설치

 

구글링 결과로는 대부분 첫 번째 방법을 제시하나, 당연하게도 이는 내 목적에 위배된다.

당연히 두 번째 선택지를 선택할 수밖에 없으나, 만약 그렇지 않은 사람, 상황을 위해 첫 번째를 위한 코드는 다음과 같다.

 

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{your-version-number}-x86_64-linux-gnu.so apt_pkg.so

 

두 번째, 내가 선택한 방법은 apt를 삭제 후 재설치하는 것.

sudo apt-get remove python3-apt
sudo apt-get install python3-apt

 

이후 wsl를 나가서 완전히 종료 후, 다시 들어오면 sudo apt update가 정상적으로 작동하는 것을 확인할 수 있다.