2025年4月24日 星期四

檢查 / 列出你手動建立過的虛擬環境 (python3 venv TOOL)

 python3 -m venv 建立的虛擬環境其實只是普通目錄,不會自動被系統統一管理,因此 沒有內建「列出所有 venv」的指令,但你可以用以下方法來檢查 / 列出你手動建立過的虛擬環境


✅ 方法一:自訂虛擬環境目錄 + 統一放置

如果你建立時都放在統一資料夾,例如 ~/venvs/

bash
ls ~/venvs

若有如下結構:

bash
~/venvs/ ├── venv38/ ├── ros2_env/ ├── pyqt_dev/

表示你建立了 3 個虛擬環境。


✅ 方法二:全系統搜尋虛擬環境(找出包含 bin/activate 的資料夾)

bash
find ~ -type f -name "activate" -path "*/bin/activate" 2>/dev/null

輸出範例:

swift
/home/user/venvs/ros2_env/bin/activate /home/user/myproject/venv/bin/activate

這些目錄上層即為虛擬環境根目錄。


✅ 方法三:使用 lsvirtualenv(需要安裝 virtualenvwrapper

若你使用 virtualenvwrapper 管理:

bash
pip install virtualenvwrapper export WORKON_HOME=~/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh

然後就可以:

bash
lsvirtualenv

✅ 方法四:列出 pyenv virtualenvs(若使用 pyenv

bash
pyenv virtualenvs

輸出會列出 pyenv 建立的虛擬環境:

bash
3.10.9/envs/ros2env ros2env (created from 3.10.9)

📌 小提示:如何啟動指定虛擬環境?

假設你有這個目錄 /home/user/venvs/ros2_env/

bash
source ~/venvs/ros2_env/bin/activate

如你有特定命名習慣、想建立 .venv_index 或 GUI 工具自動管理,


==============================================

寫個 Python 工具來列出 + 啟動你所有的 venv。寫一個「venv 管理工具」Python 腳本?


這裡是一個簡單但功能完整的 Python venv 管理工具腳本,支援:


✅ 功能一覽

功能項目說明
🔍 自動掃描所有虛擬環境(含 bin/activate
📜 顯示環境清單
🚀 快速啟動指定 venv(顯示啟動指令)
🧹 支援移除虛擬環境(詢問確認)

🧠 建議放置方式

  1. 建議你將所有 venv 放在 ~/venvs/ 或自行指定路徑

  2. 存成檔名例如 venv_manager.py


🧾 venv_manager.py 程式碼

[python]
import os import glob import argparse import shutil DEFAULT_VENV_DIR = os.path.expanduser("~/venvs") def list_venvs(venv_dir): venvs = [] for path in glob.glob(os.path.join(venv_dir, "*/bin/activate")): venv_root = os.path.dirname(os.path.dirname(path)) venvs.append(os.path.basename(venv_root)) return sorted(venvs) def show_venvs(venv_dir): venvs = list_venvs(venv_dir) print(f"\n📦 發現的虛擬環境(位於 {venv_dir}):") for i, name in enumerate(venvs, 1): print(f" {i}. {name}") if not venvs: print("🚫 沒有找到虛擬環境。") def activate_hint(venv_dir, name): path = os.path.join(venv_dir, name, "bin/activate") if os.path.exists(path): print(f"\n🚀 啟動虛擬環境指令:\n\n source {path}\n") else: print(f"⚠️ 找不到虛擬環境:{name}") def remove_venv(venv_dir, name): path = os.path.join(venv_dir, name) if os.path.exists(path): confirm = input(f"❗ 確定要刪除虛擬環境 '{name}' 嗎?(y/n): ") if confirm.lower() == "y": shutil.rmtree(path) print(f"✅ 已刪除 {name}") else: print("❌ 取消刪除") else: print(f"⚠️ 找不到虛擬環境:{name}") if __name__ == "__main__": parser = argparse.ArgumentParser(description="🐍 Python venv 管理工具") parser.add_argument("--dir", help="虛擬環境所在目錄", default=DEFAULT_VENV_DIR) parser.add_argument("--list", action="store_true", help="列出所有虛擬環境") parser.add_argument("--use", help="顯示啟動指定虛擬環境的指令") parser.add_argument("--remove", help="刪除指定虛擬環境") args = parser.parse_args() if args.list: show_venvs(args.dir) elif args.use: activate_hint(args.dir, args.use) elif args.remove: remove_venv(args.dir, args.remove) else: parser.print_help()

🧪 使用方式

bash
python3 venv_manager.py --list # 顯示所有虛擬環境 python3 venv_manager.py --use ros2_env # 顯示啟動 ros2_env 的指令 python3 venv_manager.py --remove ros2_env # 刪除 ros2_env

🧠 建議搭配

  • 把你的虛擬環境都建立在 ~/venvs 中,清晰易管理:

    bash
    python3 -m venv ~/venvs/ros2_env

需要我加上 GUI 介面(PyQt5/pyqtgraph)版本的 venv 管理工具?

或整合啟動 ROS2 + venv 一鍵腳本?可以幫你做!



沒有留言:

張貼留言