0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Conda 指定パケージ検索スクリプト 備忘録

Posted at

概要

任意のパケージについて、minicondaで作成したどの仮想環境に入れたか、検索するツールをGeminiに作ってもらったので残す。

使い方はhogeをパケージ名に置き換えるだけ。

conda-find hoge
  • 実施期間: 2025年12月
  • 環境:Ubuntu22.04LTS
  • Python: miniconda

1. Ubuntu

1.1. スクリプト

vim conda-find.shでファイルを作成する。
スクリプトは下記の通り

#!/bin/bash

# 引数チェック
if [ -z "$1" ]; then
    echo "Usage: $0 <package_name>"
    exit 1
fi

TARGET=$1

echo "Searching for package: '$TARGET' in all conda environments..."
echo "---------------------------------------------------------"

# 環境リストを取得してループ(ヘッダー行を除去し、環境名/パスを取得)
# 以前のバージョンや環境によってはパスのみの場合もあるため柔軟に対応
conda env list | grep -v "^#" | while read line; do
    # 行から環境名を取得(アクティブな環境の * マークを考慮)
    env_name=$(echo $line | awk '{print $1}')
    
    # 環境名がパス(/から始まる)の場合は名前がないのでパス自体を使う
    if [[ "$env_name" == /* ]]; then
        # パス指定の場合は -p オプション、名前なら -n オプションを使うためのフラグ管理
        # ここではシンプルに名前解決できたものだけを対象とするか、
        # awkのロジックで名前を取得します。
        
        # 名前付き環境が基本と想定し、シンプルに第1カラムを使います。
        # アクティブな環境(*)の場合も考慮して単純化します。
        : 
    fi
    
    # シンプルかつ確実な方法:各環境に対して conda list を実行
    # -n で名前指定が可能ですが、conda env listの出力の第1カラムを使います
    
    # 出力の整形用
    result=$(conda list -n "$env_name" -f "$TARGET" 2>/dev/null)
    
    if [ -n "$result" ]; then
        # パッケージが見つかった場合(ヘッダー以外の出力があるか確認)
        # conda listの出力にはヘッダーが含まれるため、パッケージ名の行があるかgrepで確認
        if echo "$result" | grep -q "^$TARGET "; then
             echo -e "\033[32m[FOUND]\033[m Environment: \033[1m$env_name\033[m"
             echo "$result" | grep "^$TARGET "
             echo "---------------------------------------------------------"
        fi
    fi
done

1.2. スクリプトを登録

どのパスにいても実行できるようにパスを通す。

mkdir -p ~/.local/bin    # すでにあれば無視される
mv conda-find.sh ~/.local/bin/conda-find
chmod +x ~/.local/bin/conda-find    # 権限付与
export PATH="$HOME/.local/bin:$PATH"    # パスを通すが、すでに"~/.bashrc"にあれば不要
source ~/.bashrc

1.3 動作確認

例えばpandasを探してもらう。

ihmon@SSD1T:~$ ./conda-find.sh pandas
Searching for package: 'pandas' in all conda environments...
---------------------------------------------------------
[FOUND] Environment: ag
pandas                    2.3.3                    pypi_0    pypi
---------------------------------------------------------
[FOUND] Environment: cmn
pandas                    2.2.2           py310hcc13569_0    conda-forge
---------------------------------------------------------
[FOUND] Environment: gpml
pandas                    1.3.5                    pypi_0    pypi
---------------------------------------------------------
[FOUND] Environment: llm
pandas                    2.2.0                    pypi_0    pypi
---------------------------------------------------------
以下略

チョー便利

2. Windows

WindowsのPowerShellでは、.bashrc の代わりに $PROFILE という設定ファイルに関数を定義するらしい。

2.1. スクリプト

PowerShellからメモ帳を起動する。

if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILE

下記のスクリプトをコピペする。

function conda-find {
    param(
        [Parameter(Mandatory=$true)]
        [string]$PackageName
    )

    Write-Host "Searching for '$PackageName' in all conda environments..." -ForegroundColor Cyan
    Write-Host "---------------------------------------------------------" -ForegroundColor Gray

    # conda env list の出力を取得し、コメント行と空行を除外
    $envs = conda env list | Where-Object { $_ -notmatch "^#" -and $_.Trim() -ne "" }

    foreach ($line in $envs) {
        # 行を空白で分割して環境名を取得(1列目)
        $parts = $line -split "\s+" | Where-Object { $_ -ne "" }
        $envName = $parts[0]

        # conda list を実行 (エラーは非表示、完全一致検索)
        $result = conda list -n $envName -f $PackageName 2>$null

        # 結果があり、かつパッケージ名の行が含まれているかチェック
        # (ヘッダー行だけが出力される場合を除くため)
        $match = $result | Where-Object { $_ -match "^$PackageName\s" }

        if ($match) {
            Write-Host "[FOUND] Environment: $envName" -ForegroundColor Green
            # バージョン情報の行を表示
            Write-Host $match
            Write-Host "---------------------------------------------------------" -ForegroundColor Gray
        }
    }
}

保存してメモ帳を閉じ、PowerShellから下記を打つ。

. $PROFILE

Windowsは持ってないので未動作確認。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?