クリーンインストール後conda update --allをしたら動かなくなった!
minicondaをクリーンインストールしてアップデートを掛けたら動かなくなった。
#いつものオールアップデート
conda update --all
エラーメッセージは・・・
ImportError: DLL load failed while importing _ctypes: 指定されたモジュールが見つかりません
Copilotに聞いてみたら治ったので、その方法を備忘録として残しておきます。
環境
・Windows11
・Miniconda3 py313_25.9-3(Python 3.13.9 64bit)
Condaが動いているか確認
とりあえずAnaconda Promptで下記のコードを打ちましょう。
(ユーザ名はXXXと仮定)
"C:\Users\XXX\AppData\Local\miniconda3\python.exe" -c "import _ctypes; print('ok')"
OKが出ない場合、libffi.dll の確認
C:\Users\XXX\AppData\Local\miniconda3\Library\bin に
ffi-8.dll,ffi-7.dll,ffi.dllがあるか確認
C:\Users\XXX\AppData\Local\miniconda3\pkgs\libffi-*の最新版ではなくて、古い方のpkgsから足りないffi-8.dll,ffi-7.dll,ffi.dllをC:\Users\XXX\AppData\Local\miniconda3\Library\binへコピーする。
うちはffi-7.dll,ffi.dllをコピーして動きました。
補足
ffi-7.dll や ffi.dll も同じく libffi の DLL で、バージョンによって名前が異なります。
Miniconda の場合、以下のどれかが Library\bin にあれば正常です:
ffi-8.dll(libffi 3.4系)
ffi-7.dll(libffi 3.3系)
ffi.dll(さらに古いバージョン)
Miniconda の最新バージョンでは ffi-8.dll が標準です。
古い環境では ffi-7.dll や ffi.dll が残っている場合があります。
ctypes は libffi の API を使いますが、Pythonビルド時の設定によって特定の DLL 名を探すことがあります。
Python が古い libffi 名(ffi-7.dll や ffi.dll)を参照していた可能性があります。
ffi-8.dll はあったものの、Python がそれを見つけられず、追加した DLL で解決したということです。
蛇足
copilotはパッケージを再インストールして整合性をとることを推奨しています。
ただアップデートでこけたので正直やりたくない。
一応やり方を置いておきます。
Miniconda のパッケージを再インストールして整合性を取る
conda install --force-reinstall libffi
conda install --force-reinstall python
VC++ ランタイムも再確認
conda install --force-reinstall vs2015_runtime