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

📅 개요 (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모듈 공식 문서
'파이썬 스크립트' 카테고리의 다른 글
| 🐍 Python | 문자열 처리와 xlwings로 엑셀 데이터 다루기 --- (0) | 2025.11.01 |
|---|---|
| 오늘의 개발일지: 웹 스크래핑 삽질에서 모듈화까지(ft Python) (1) | 2025.10.28 |
| Eclipse에서 PyDev 오프라인 설치하는 방법 (1) | 2025.10.05 |
| 쿠팡파트너스 Open API로 국내여행 베스트 상품 조회하기 (1) | 2025.10.01 |
| Python 개발 Q&A 모음 (일하다 궁금해진 질문들) (1) | 2025.09.20 |