2026/05/03

오늘의 이야기

 


 


🐍 Python | PC에 흩어진 .whl 파일, 한 곳으로 모으는 자동화 스크립트 개발기


AI가 그려준 이미지



 


📅 개요 (Intro)



  • 날짜: 2025.10.26

  • 목표: 여러 프로젝트와 폴더에 흩어져 있는 .whl(휠) 파일들을 하나의 지정된 폴더로 모아주는 Python 스크립트를 개발하여 라이브러리 관리를 효율화한다.

  • 기술: Python, os 모듈, shutil 모듈


🧐 문제 정의 (Problem / Motivation)


Python으로 여러 프로젝트를 진행하다 보니 가상 환경(venv), 다운로드 폴더 등 PC 곳곳에 .whl 파일들이 쌓이기 시작했습니다. 특정 라이브러리의 구버전이 필요하거나 오프라인 환경에서 설치해야 할 때, 이 파일들을 찾아 헤매는 일이 잦아졌습니다.


수동으로 *.whl을 검색해서 일일이 옮기는 것은 너무 번거롭고, 실수로 중요한 파일을 누락할 위험도 있었습니다. 이 반복적인 정리 작업을 자동화할 필요성을 느끼게 되었습니다.


🛠️ 해결 과정 (How I Solved It)


이 문제를 해결하기 위해 Python의 내장 라이브러리만을 사용하여 간단한 스크립트를 작성하기로 했습니다.


1. 파일 시스템 순회 및 .whl 파일 검색


가장 먼저 PC의 특정 드라이브(예: C:\)부터 시작해 모든 하위 폴더를 탐색해야 했습니다. Python의 os 모듈에 포함된 os.walk() 함수가 이 작업에 안성맞춤이었습니다. 이 함수는 지정된 경로의 모든 폴더와 파일을 순회하는 제너레이터(generator)를 반환해 줍니다.


파일을 찾은 후에는 문자열의 .endswith(".whl") 메서드를 이용해 확장자가 .whl인 파일만 골라 리스트에 추가했습니다.


import os

def find_whl_files(start_path):
"""지정된 경로와 그 하위 디렉토리에서 .whl 파일을 찾습니다."""
whl_files = []
for root, dirs, files in os.walk(start_path):
for file in files:
if file.endswith(".whl"):
whl_files.append(os.path.join(root, file))
return whl_files

2. 찾은 파일들을 지정된 폴더로 이동


파일 검색이 완료되면, 이제 이 파일들을 한 곳으로 옮겨야 합니다. 파일 이동, 복사, 삭제 등 파일 시스템 관련 고급 작업을 처리하는 shutil 모듈의 shutil.move() 함수를 사용했습니다.


혹시 모를 오류(권한 문제 등)에 대비해 try-except 구문으로 각 파일 이동 작업을 감싸 안정성을 높였습니다.


import shutil

# 파일을 옮길 목적지 폴더
destination_folder = r'C:\Users\nari4\downloads'

# 목적지 폴더가 없으면 생성
if not os.path.exists(destination_folder):
os.makedirs(destination_folder)

# 찾은 파일 리스트(all_whl_files)를 순회하며 이동
for file_path in all_whl_files:
try:
shutil.move(file_path, destination_folder)
print(f"이동 완료: {file_path}")
except Exception as e:
print(f"'{file_path}' 이동 중 오류 발생: {e}")

✨ 결과 (Result)


스크립트를 실행하자 PC에 흩어져 있던 모든 .whl 파일들이 제가 지정한 C:\Users\nari4\downloads 폴더로 깔끔하게 정리되었습니다.


개선된 점:



  • 이제 필요한 .whl 파일이 있다면 지정된 폴더만 확인하면 되므로 라이브러리 관리가 매우 편해졌습니다.

  • 불필요한 파일을 찾아 헤매거나 중복으로 다운로드하는 시간이 사라졌습니다.

  • 단순 반복 작업을 자동화하여 생산성이 향상되었습니다.


실행 결과 예시:


C:\ 드라이브에서 .whl 파일을 검색합니다...

[찾은 .whl 파일 목록]
C:\projectA\venv\downloads\some_package-1.0-py3-none-any.whl
C:\Users\nari4\Downloads\another_package-2.1-cp39-cp39-win_amd64.whl

[총 2개의 .whl 파일을 'C:\Users\nari4\downloads'로 이동합니다]
이동 완료: C:\projectA\venv\downloads\some_package-1.0-py3-none-any.whl
이동 완료: C:\Users\nari4\Downloads\another_package-2.1-cp39-cp39-win_amd64.whl

파일 이동이 완료되었습니다.

📝 느낀 점 / 회고 (Reflection)



  • 교훈: 역시 "반복적인 작업이 있다면 자동화를 고민하라"는 말이 정답이었습니다. 잠시 시간을 투자해 만든 스크립트 덕분에 앞으로의 개발 환경이 훨씬 쾌적해졌습니다.

  • 기술: os.walk()shutil.move()라는 Python의 기본적이면서도 강력한 도구의 활용법을 다시 한번 되새길 수 있었습니다.

  • 다음 목표: 이 스크립트를 좀 더 발전시켜보고 싶습니다. 예를 들어, 이동 전에 파일명이 중복되는 경우 사용자에게 덮어쓸지 물어보는 옵션을 추가하거나, 오래된 버전의 .whl 파일을 식별하여 따로 분류하는 기능을 구현해 볼 계획입니다.


📚 참고자료 (References)



  • Python os 모듈 공식 문서

  • Python shutil 모듈 공식 문서





댓글 없음:

댓글 쓰기

오늘의 이야기

AI 생성 이미지   1️⃣ 글 제목 - 🐍 Python | Raspberry Pi에서 오픈소스 LLM으로 뉴스 요약기 만들기 --- 2️⃣ 개요 (Intro) - 오늘은 라즈베리 파이에서 오픈소...