概要
任意のパケージについて、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は持ってないので未動作確認。
以上