mystic-agit 개발 블로그

[Python3] Python 3.12.4 에서 distutils module 찾지 못하는 이슈 본문

Mac/Utiility

[Python3] Python 3.12.4 에서 distutils module 찾지 못하는 이슈

mystic-agit 2024. 6. 26. 19:11
목 차

1. Python 버전 변경없이 대응하는 방법
2. Python 버전을 다운그레이드하여 대응하는 방법

 

Python 3.x 사용 중에 기존 py 스크립트를 실행하던 중 에러가 발생했다.

// 에러 내용
Traceback (most recent call last):
File "/Users/jschoi/.../build.py", line 5, in <module>
from distutils import dir_util
ModuleNotFoundError: No module named 'distutils'

 

'distutils' 모듈을 못찾아 해당 함수를 호출하지 못하고 있었다.

별일 없이 사용하던 코드에서 발생해서 최근에 변경사항을 확인해보니

Python3 버전을 3.12.4로 최신 업데이트 한 것을 확인하였다.

 

해당 에러에 대한 몇 가지 피드백을 확인하여 시도..

(1) Python을 재설치

// HomeBrew로 Python을 설치한 경우 시도
brew reinstall python

 

(2) setuptools 설치 (distutils를 포함하고 있는)

pip3 install setuptools

(해당 케이스는 되려 에러가 발생하였다.)

 

 

(3) 그리고 기타 등등...

모두 해결되지 않았다.

 

Python 3.10 버전부터 setuptools가 독립적인 패키지로 분리되었으나 Python 3.10 부터 setuptools을 추가 설치하고 사용함에 특이사항은 없었다.

확인 결과 3.10에서 deprecated, 3.12에서 remove 되어 발생하는 부분...

아래 2가지 방법으로 이슈를 해결하였다.

 

 

1. Python 버전 변경없이 대응하는 방법

아마도 위에서 pip3 install setuptools 가 통하지 않았던건
Python3를 어느 경로를 통해 설치하였는지의 영향으로 보인다. (개인의 단말 환경을 확인 바란다.)

나의 단말의 경우 아래 처럼 brew 를 통한 코드로 setuptools를 사용할 수 있었다.

 

brew install python-setuptools

 

이후 기존 코드에서 아래처럼 대응이 필요하다.

# A.
# 아래 distutils 사용처를 제거
# from distutils import dir_util

# 대신하여 setuptools 사용 추가
from setuptools import setup

# B.
# 코드에서 dir_util을 사용하고 있던 부분 제거
# dir_util.copy_tree(str(SAMPLE_FOLDER), str(DISTRIBUTE_SAMPLE))

# dir_utils를 사용하지 않는 방향으로 대응
shutil.copytree(str(SAMPLE_FOLDER), str(DISTRIBUTE_SAMPLE), dirs_exist_ok=True)

 

(결과) 이렇게 distutils가 없어진 Python3 버전에서 대응이 가능하다.

 

2. Python 버전을 다운그레이드하여 대응하는 방법

 

일단 기존 py 스크립트 빌드 작업을 위해 아래와 같이 해소를 하였다.

(대응) Python 3.12.x 를 제거

// HomeBrew에 설치된 Python이 있는 경우 제거
brew uninstall python@3.12
// HomeBrew를 통해 설치하지 않은 Python 제거

// ex) Python3.12.x 버전을 제거한다면
# Python 실행 파일을 확인하고 제거
ls -l /usr/local/bin | grep python3.12
sudo rm -f /usr/local/bin/python3.12
sudo rm -f /usr/local/bin/pip3.12

# Python 프레임워크 디렉토리를 제거
sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.12

 

(결과) 이후 Python 3.10.6 에서 기존 py 스크립트 수행 : 정상 동작 확인

Comments