VirtualBoxをPythonで管理するというのを Linux と Mac でやってみた。
なんとなくうまくできたので、ではWindowsでもやってみようと思ったら酷いカオスに遭遇したので注意点をまとめてみた。
結論
- Python Install Manager が正道
-
python3ではなくpythonコマンドを使う -
pipコマンドが使えないときはpython -m pipを使う
インストール方法は大きく3つ(地雷アリ)
WindowsにPythonをインストールする場合、主な選択肢が3つある。
- Microsoft Store で「Python 3.13」をインストールする
- Python公式サイトでインストーラをダウンロードしてインストールする
- Microsoft Store またはPython公式サイトから「Python Install Manger」をインストールして、そこから Python をインストールする
Pythonを何もインストールしていない状態でコマンドプロンプトで python または python3 を実行すると、自動的に Microsoft Store が立ち上がって「Python 3.13」のページが開く。(2025/11/18現在)
ここでインストールするのが最も早い。と思ったら地雷だった。
import vboxapi
mgr = vboxapi.VirtualBoxManager()
これは、VirtualBoxをPythonで操作するための、最初かつ最小限のコード。
これだけで下記の警告が表示される。
Warning: CoInitializeSecurity was already called
まあ、警告がでるだけで実害があるわけではないのだけれど、何かがうまくいっていない証拠でもある。
VirtualBox SDKでは、COMを使ってVirtualBoxサービスと通信し、仮想マシンや環境の操作・管理を実行する。
WindowsでCOMを使う場合、初期化のためにCoInitializeSecurityAPIを一度だけ実行しなければいけない。
ひとつのプロセス内で2度目の呼び出しは失敗する。
上記の警告は、その「2度目の呼び出しで失敗したよ」という表示。
この関数は vboxapi.VirtualBoxManager() の中で1度だけ呼び出されるが、誰かがその前にすでにCoInitializeSecurityを呼び出しているようだ。
誰が?
冒頭の import vboxapi より前でWin32 API呼び出せるのなんで、Python環境それ自体しかおらんじゃろ。
との見当をつけて、Storeからインストールした Python を一度アンインストールし、公式から 3.14 のインストーラーをダウンロードしてインストールした。
で、やってみた結果、警告は解消した。
一応検証として公式の 3.13 も入れてみたが同じく警告解消。
そういうわけで犯人はStore版Python 3.13と確信。
しかし、公式サイトの説明によると、python単体のインストーラー配布は 3.15 までで、3.16からは Python Install Manager 一択になるらしい。
そこで、公式版 3.14 も一旦アンインストールして、 Python Install Manager を入れてみる。
こちらは、公式でもインストーラーを配布しているし、Microsoft Store でもインストールできる。
公式インストーラーとMicrosoft Storeの両方試してみたが、Python単体版と違ってどちらも同じく使えるようだった。
公式インストーラーの画面で「準備ができたら起動」をチェックしておくか、Storeからインストール後の通知で「ここをクリックして開いてください」をクリックすると、初期設定画面が開く。
ここで最新のpythonをインストールできるし、ここでインストールしなくてもコマンドプロンプトで python と打てばその時に最新のpythonをインストールしてくれる。
あるいはコマンドプロンプトで py install 3.14 などと入力して好きなバージョンを入れることもできる。
python3 には罠がある
上述のインストール方法でも言及したが、python というコマンドはいろいろ引き起こす。
何もインストールしていない状態では Microsoft Store を開くし、Python Install Manager をインストールして python 未インストールの状態だと最新のPythonをインストールする。
もちろんPythonインストール後は普通にpythonを起動する。
ここの挙動は、Windows設定アプリの「アプリ > アプリの詳細設定 > アプリ実行エイリアス」で設定できるもので、C:\Users\shusuke\AppData\Local\Microsoft\WindowsApps\python.exe がこの設定によりいろいろ振り分けているようだ。
これだけでもなかなかのカオスだが、インストール方法によってインストールされるコマンドとされないコマンドがあり、さらに仮想環境にインストールされるコマンド/されないコマンドもあり、混沌が深すぎる。
とりあえずまとめる。
| Python (Store) | Python (公式) | Python Install Manager | |
|---|---|---|---|
| グローバル python | 使える | 使える | 使える |
| グローバル python3 | 使える | Microsoft Storeに遷移 | 使える |
| グローバル python3.1x | 使える | インストールされない | 使える |
| グローバル pip/pip3/pip3.1x | 使える | 使えない | 使えない |
| venv python | 使える | 使える | 使える |
| venv python3 | 使える | Microsoft Storeに遷移 | 使える |
| venv python3.1x | グローバル python3.1x を実行 | 使えない | グローバル python3.1x を実行 |
| venv pip/pip3/pip3.1x | 使える | 使える | 使える |
基本的に python コマンドを使うのが安全。
Linux/Macでは通常 python3 コマンドを使うが、その感覚で Windows でも python3 を使うと残念なことになる。
具体的には、仮想環境で実行してるつもりで「モジュールがありません」とか、python3 -m pip install xxx でうっかりグローバルにインストールしちゃったりとか。
pip が使えない場合
前掲の表にあるように、グローバル環境に pip はインストールされない。
「グローバルでモジュール入れない」というのであれば確かに要らないのだが、VirtualBox で Python Support をインストールするためには、グローバルに pywin32 モジュールをインストールしなければならなかったりする。
そういう時には、 python -m pip install pywin32 でインストールする。
いじょ。