Python

[파이썬] 패키지 설치 자동화 스크립트 - subprocess, importlib

weweGH 2025. 4. 7. 09:00
반응형

패키지 설치 자동화 스크립트
패키지 설치 자동화 스크립트


파이썬 패키지 설치 자동화 스크립트 - subprocess, importlib


들어가며


새로운 장비를 환경 설정하거나 가상 환경을 구축할 때, 필요한 파이썬 패키지를 일일이 설치해야 합니다. 특히, 여러 개의 패키지를 설치할 경우 오랜 시간이 걸리거나 누락되는 경우가 발생합니다.

이 글에서는 단순히 패키지를 설치하는 방법설치 여부를 판단 후 패키지를 설치하는 방법으로 분리하여 설명합니다. 패키지 설치 자동화를 통해 간편하고 편리하게 환경을 구성하고, 반복적인 패키지 설치 작업을 줄일 수 있습니다.


  • 패키지 설치 - 베이스 코드
  • 패키지 설치 스크립트
  • 패키지 설치 여부 확인 - 베이스 코드
  • 패키지 설치 스크립트 w/설치 여부 확인

패키지 설치 - 베이스 코드


패키지 설치 자동화를 위한 베이스 코드는 다음과 같습니다. 패키지를 설치할 때, 터미널 창에 'pip install' 명령어를 입력하는 것과 동일한 기능입니다. 'colorama'를 패키지를 설치한다고 가정하면, subprocess를 활용하여 다음과 같이 입력합니다. 

여기서, 'subprocess.check_call'은 괄호 안의 명령을 실행하고, 정상 종료하면 그대로 진행하고, 실패 시 예외를 발생시킵니다. 'os.sys.executable'은 현재 실행 중인 파이썬 인터프리터의 경로를 반환합니다.

즉, 다음의 코드는 현재의 파이썬 환경에서 'pip install colorama'를 실행한다는 뜻입니다.

import os
import subprocess

package = 'colorama'

subprocess.check_call([os.sys.executable, "-m", "pip", "install", package])

패키지 설치 스크립트


packages에 설치가 필요한 패키지 목록을 정의한 후, 위의 베이스 코드를 사용하여 자동화 스크립트를 작성하면 다음과 같습니다.

import os
import subprocess

def install_packages():
    
    """설치할 패키지 목록을 정의 후, 일괄 설치"""
    
    packages = ["pandas", "numpy"]
    
    for package in packages:
        print(f"'{package}' 패키지를 설치합니다.")
        subprocess.check_call([os.sys.executable, "-m", "pip", "install", package])
        

if __name__ == "__main__":
    print("패키지 설치 시작...")
    install_packages()
    print("패키지 설치 완료!")

install_packages.py
install_packages.py

반응형

위의 코드를 install_packages.py로 저장하고, 터미널 창에서 다음과 같이 입력하면 특정 패키지를 설치하는 스크립트를 실행할 수 있습니다.

install_packages.py 실행
install_packages.py 실행


패키지 설치 여부 확인 - 베이스 코드


패키지 설치 여부를 확인하는 베이스 코드는 다음과 같습니다. 다음의 코드는 'import colorama'와 동일한 기능을 하지만, 패키지 이름을 modul_name으로 설정하여 자동화가 가능합니다.

import importlib

module_name = 'colorama'

importlib.import_module(module_name)

만약, 'colorama' 패키지가 설치되어 있지 않은 상태라면, 다음과 같이 ModuleNotFoundError가 발생합니다.

modulenotfounderror
modulenotfounderror


패키지 설치 스크립트 w/설치 여부 확인


위의 베이스 코드를 사용하여 설치 여부를 확인하고, 미설치된 경우에만 설치하는 스크립트는 다음과 같습니다. try except구문을 활용하여 설치 여부를 확인합니다.

import os
import subprocess
import importlib

def install_packages_new():

    """설치할 패키지 목록을 정의 & 설치 여부 판단 후, 미설치된 경우만 설치"""
    
    packages = ['pandas', 'numpy']
    
    for package in packages:

        try:

            importlib.import_module(package)
            print(f" '{package}' 패키지는 이미 설치되어 있습니다.")

        except ImportError:

            print(f" '{package}' 패키지가 설치되어 있지 않습니다. 설치를 시작합니다...")
            subprocess.check_call([os.sys.executable, "-m", "pip", "install", package])
            print(f" '{package}' 설치 완료!")


if __name__ == '__main__':
    print('패키지 설치 시작...')
    install_packages_new()
    print('패키지 설치 완료!')

install_packages_new.py
install_packages_new.py


위의 코드를 install_packages_new.py로 저장하고, 터미널 창에서 다음과 같이 입력하면 특정 패키지를 설치하는 스크립트를 실행할 수 있습니다.

install_packages_new.py 실행
install_packages_new.py 실행


반응형