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?

minicondaで_ctypesのインポートエラーが発生する場合

0
Posted at

クリーンインストール後conda update --allをしたら動かなくなった!

minicondaをクリーンインストールしてアップデートを掛けたら動かなくなった。

command1
#いつものオールアップデート
conda update --all

エラーメッセージは・・・

message1
ImportError: DLL load failed while importing _ctypes: 指定されたモジュールが見つかりません

Copilotに聞いてみたら治ったので、その方法を備忘録として残しておきます。

環境

・Windows11
・Miniconda3 py313_25.9-3(Python 3.13.9 64bit)

Condaが動いているか確認

とりあえずAnaconda Promptで下記のコードを打ちましょう。
(ユーザ名はXXXと仮定)

ctype読み込みテスト.bat
"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 のパッケージを再インストールして整合性を取る
command2.bat
conda install --force-reinstall libffi
conda install --force-reinstall python
VC++ ランタイムも再確認
command3.bat
conda install --force-reinstall vs2015_runtime
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?