본문 바로가기
임베디드 관련/PlatformIO, FreeRTOS

사용하지 않는 PlatformIO libdeps 환경 삭제 방법

by minhyeok.lee 2025. 6. 30.
반응형

PlatformIO libdeps 환경 삭제

1. PlatformIO는 프로젝트 내 여러 빌드 환경([env:XXX])에 따라 .pio/libdeps/ 경로에 라이브러리를 개별 설치
2. 환경 이름을 바꾸거나 테스트 중 여러 환경을 만들다 보면, 오래된 환경 폴더가 그대로 남아 공간을 차지


.pio/
└── libdeps/
    ├── pico/
    ├── n1/
    ├── test/
    └── tag2/

🔹 1. 불필요한 libdeps 환경 수동 삭제 (권장)

작업 방법

  1. .pio/libdeps/ 디렉토리를 염
  2. 현재 platformio.ini[env:xxx]에 없는 디렉토리를 확인
  3. 사용하지 않는 환경 폴더를 삭제

rm -rf .pio/libdeps/n1
rm -rf .pio/libdeps/tag
rm -rf .pio/libdeps/1

📌 안전하게 삭제 가능: 필요하면 PlatformIO가 다음 빌드 때 필요한 라이브러리를 자동으로 다시 설치함


🔹 2. 전체 libdeps 폴더 정리 후 재설치

전체 초기화를 원한다면

rm -rf .pio/libdeps

 

그 후 빌드하면 PlatformIO가 필요한 환경만 다시 채움

pio run

🔹 3. platformio.ini 기반 자동 클린 (간접적)

pio run --target clean
  • .pio/build/만 정리함
  • libdeps 정리는 포함되지 않음

🔹 4. 전역 캐시 및 오래된 툴 자동 정리

pio system prune --force
  • 사용하지 않는 아래 내용을 삭제
    • 플랫폼
    • 프레임워크
    • 패키지
    • 툴체인

 

옵션

  • --storage: 빌드 캐시
  • --packages: 설치된 패키지
  • --projects: 오래된 프로젝트 정보

🔹 삭제 방법 요약

방법 목적 명령 또는 조치
📁 수동 삭제 libdeps 내 불필요한 환경 제거 rm -rf .pio/libdeps/OLD_ENV_NAME
🧹 전체 정리 모든 환경 라이브러리 초기화 rm -rf .pio/libdeps
⚙️ 빌드 클린 .pio/build/만 정리 pio run --target clean
🗑️ 전역 캐시 정리 패키지/툴체인/캐시 제거 pio system prune --force

 


🧼 libdeps 폴더를 동시에 정리해주는 스크립트 정리

clean_libdeps.sh — 오래된 PlatformIO 환경 정리 스크립트

 

macOS/Linux/WSL용: clean_libdeps.sh

#!/bin/bash

# 현재 platformio.ini에서 사용 중인 환경 목록 추출
used_envs=$(grep "^\[env:" platformio.ini | sed -E 's/^\[env:([^]]+)\]/\1/')

libdeps_dir=".pio/libdeps"
if [ ! -d "$libdeps_dir" ]; then
  echo "[INFO] libdeps 디렉토리가 없습니다."
  exit 0
fi

echo "[INFO] 사용 중 환경 목록: $used_envs"

for env_path in "$libdeps_dir"/*; do
  env_name=$(basename "$env_path")

  if ! echo "$used_envs" | grep -qx "$env_name"; then
    echo "🗑️  삭제: $env_name"
    rm -rf "$env_path"
  else
    echo "✅ 유지: $env_name"
  fi
done

echo "[DONE] 정리 완료."

 

📦 사용법

chmod +x clean_libdeps.sh
./clean_libdeps.sh

Windows용 PowerShell 버전: clean_libdeps.ps1

# 현재 디렉토리 기준 platformio.ini에서 환경명 추출
$iniPath = "platformio.ini"
$usedEnvs = Select-String "^\[env:(.+)\]" $iniPath | ForEach-Object {
    ($_ -replace "^\[env:([^\]]+)\]", '$1').Trim()
}

$libdepsPath = ".pio/libdeps"

if (-Not (Test-Path $libdepsPath)) {
    Write-Host "[INFO] libdeps 디렉토리가 없습니다."
    exit
}

Write-Host "[INFO] 사용 중 환경 목록: $($usedEnvs -join ', ')"

Get-ChildItem $libdepsPath | ForEach-Object {
    $envName = $_.Name
    if ($usedEnvs -notcontains $envName) {
        Write-Host "🗑️  삭제: $envName"
        Remove-Item $_.FullName -Recurse -Force
    } else {
        Write-Host "✅ 유지: $envName"
    }
}

Write-Host "[DONE] 정리 완료."

 

📦 사용법

  1. PowerShell을 관리자 권한이 아닌 일반 권한으로 실행
  2. 프로젝트 루트에서 실행
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\clean_libdeps.ps1

🔚 정리

OS 파일 실행 명령
Linux/macOS/WSL clean_libdeps.sh ./clean_libdeps.sh
Windows (PowerShell) clean_libdeps.ps1 .\clean_libdeps.ps1

libdeps + build 폴더를 동시에 정리해주는 스크립트 정리

 

✅ macOS/Linux/WSL 버전 (clean_platformio.sh)

#!/bin/bash

used_envs=$(grep "^\[env:" platformio.ini | sed -E 's/^\[env:([^]]+)\]/\1/')

libdeps_dir=".pio/libdeps"
build_dir=".pio/build"

echo "📦 PlatformIO 환경 정리 시작..."

# libdeps 정리
if [ -d "$libdeps_dir" ]; then
  for env in "$libdeps_dir"/*; do
    env_name=$(basename "$env")
    if ! echo "$used_envs" | grep -qx "$env_name"; then
      echo "🗑️  libdeps 삭제: $env_name"
      rm -rf "$env"
    else
      echo "✅ libdeps 유지: $env_name"
    fi
  done
else
  echo "ℹ️  libdeps 디렉토리 없음, 생략"
fi

# build 정리
if [ -d "$build_dir" ]; then
  echo "🧹 build 디렉토리 정리 중..."
  rm -rf "$build_dir"
else
  echo "ℹ️  build 디렉토리 없음, 생략"
fi

echo "✅ 정리 완료!"

 

🔧 실행 방법

chmod +x clean_platformio.sh
./clean_platformio.sh

✅ Windows PowerShell 버전 (clean_platformio.ps1)

Write-Host "📦 PlatformIO 환경 정리 시작..."

$iniPath = "platformio.ini"
$usedEnvs = Select-String "^\[env:(.+)\]" $iniPath | ForEach-Object {
    ($_ -replace "^\[env:([^\]]+)\]", '$1').Trim()
}

$libdepsPath = ".pio/libdeps"
$buildPath = ".pio/build"

# libdeps 정리
if (Test-Path $libdepsPath) {
    Get-ChildItem $libdepsPath | ForEach-Object {
        $envName = $_.Name
        if ($usedEnvs -notcontains $envName) {
            Write-Host "🗑️  libdeps 삭제: $envName"
            Remove-Item $_.FullName -Recurse -Force
        } else {
            Write-Host "✅ libdeps 유지: $envName"
        }
    }
} else {
    Write-Host "ℹ️  libdeps 디렉토리 없음, 생략"
}

# build 정리
if (Test-Path $buildPath) {
    Write-Host "🧹 build 디렉토리 정리 중..."
    Remove-Item $buildPath -Recurse -Force
} else {
    Write-Host "ℹ️  build 디렉토리 없음, 생략"
}

Write-Host "✅ 정리 완료!"

 

🔧 실행 방법

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\clean_platformio.ps1

 

반응형

댓글