みなさん、こんにちは。
今回は、私自身がWindows Serverで最近ハマった、とあるDLLエラーの解決体験をお話しようと思います。
先日、Windows Server 2022にPython 3.10をインストールして、OCRライブラリの「PaddleOCR」を動かそうとしたときのことです。
意気揚々とpip install paddleocr
を実行し、いざコードを走らせてみると…
ImportError: DLL load failed while importing _cext: 指定されたモジュールが見つかりません。
こんなエラーが出て、プログラムが止まってしまったのです。
「あれ?どうして?」
最初はパッケージのバージョンが悪いのかと、いろいろ試してみましたが、一向に解決しません。エラーメッセージをよく見ると、どうやら_cext
というモジュールが読み込めないらしい。
そこで、このエラーの原因を深掘りしてみたところ、驚くべき事実が判明しました。
原因は「Visual C++ 再頒布可能パッケージ(以下、VC++ランタイム)」が入っていなかったこと。
そうなんです。Windows Serverをまっさらな状態でインストールすると、このVC++ランタイムは標準では含まれていないんですね。
そして、これが今回のエラーの元凶でした。Pythonのパッケージの多くは、実はC言語やC++で書かれた部分を持っていて、それらを動かすためにはVC++ランタイムが必須なんです。
そこで今回は、私と同じようなDLLエラーで悩まないために、Windows環境でPythonパッケージを使う際に知っておきたいDLLやランタイムの知識を整理してみました。
Pythonパッケージが依存するDLLやランタイムの正体
一言でDLLと言っても、Pythonパッケージが依存するものはいくつか種類があります。
1. 最重要!Visual C++ 再頒布可能パッケージ (2015–2022)
これが今回、私がハマった最大の原因です。
numpy
、scipy
、opencv
、scikit-learn
といった科学技術計算やAI系のライブラリをはじめ、多くのPython拡張モジュールがこのランタイムに依存しています。
エラーメッセージに出てくるmsvcp140.dll
やvcruntime140.dll
といったDLLは、このパッケージに含まれているもの。
Windows ServerにPython環境を構築する場合、このVC++ランタイムを最初にインストールしておくのが、DLLエラーを回避するための最も重要なステップになります。
ダウンロードはこちらから
お使いの環境にあわせてダウンロードしてください。私はx64
版をダウンロードしてインストールしました。
2. GPUを使うなら必須!CUDA / cuDNN
もしpaddlepaddle-gpu
やtensorflow-gpu
、torch
などのGPU版ライブラリを使う場合は、NVIDIAのGPUドライバーに加え、CUDAとcuDNNというライブラリが必要になります。
これらのライブラリは、GPUを効率的に使うためのもので、cudart64_X.dll
やcudnn64_X.dll
といったDLLに依存します。
重要なのは、GPUライブラリのバージョンと、CUDA/cuDNNのバージョンに互換性があるか、という点。
最新のGPUライブラリを使おうとしたら、まだ対応しているCUDAバージョンが古かった、なんてこともよくあるので、必ず公式のリリースノートや対応表を確認するようにしましょう。
CPU版を使う場合は、これらのDLLは不要なのでご安心ください。
3. パッケージに同梱されているDLL
「え、ということはopencv-python
とかPillow
とかも、自分でDLLを探してこないといけないの?」
そう思われた方もいるかもしれません。でも、ご安心ください。
Pythonのパッケージの多くは、必要なネイティブライブラリ(DLL)をパッケージ内にwheel
という形式で同梱しています。
例えば、
opencv-python
はopencv_world*.dll
Pillow
は画像処理に必要なlibjpeg
やzlib
などlxml
はlibxml2.dll
、libxslt.dll
といった具合に、開発者がすでに必要なDLLをまとめてくれています。
ですので、pip install
するだけで、ユーザーは追加でDLLをインストールする必要はありません。
これは本当にありがたいですよね!
DLLエラーを防ぐための実運用でのポイント
ここまでの知識を踏まえて、Windows ServerでPython環境を構築する際に気をつけたいポイントをまとめてみました。
1. VC++ランタイムのインストールは最初の最初
Python環境を構築する手順として、
- Pythonのインストーラを実行
pip
で必要なパッケージをインストール
という流れを考えがちですが、これにVC++ランタイムのインストールを最初に加えてください。
VC++ランタイムインストール → Pythonインストール → パッケージインストール
この順番を守るだけで、DLLエラーに悩む時間はぐっと減らせるはずです。
2. GPUを使うならバージョン整合性を確認
GPU版のライブラリ(paddlepaddle-gpu
など)を使う場合は、先に述べたように、ライブラリが推奨するCUDA/cuDNNのバージョンを必ず確認してください。
もしバージョンが合わない場合は、GPUライブラリのバージョンを下げたり、対応するCUDAをインストールし直したりする必要があります。
3. オフライン環境での対応
インターネットに接続できないクローズドな環境でPythonを使いたい、という方もいると思います。
その場合は、インターネットに接続できる別のPCで、事前にpip download パッケージ名
を実行して、必要なwhl
ファイル(パッケージ本体)をダウンロードしておきましょう。方法は以下に記事にしています。
whl
ファイルをオフライン環境に持ち込み、pip install *.whl
でインストールすればOKです。
pip download
を実行すると、依存するパッケージも一緒にダウンロードしてくれるので、とても便利ですよ。
まとめ
今回は、Windows ServerでPython環境を構築する際に、私が実際に経験したDLLエラーから学んだことをご紹介しました。
paddleocr
を動かそうとしたら、VC++ランタイム不足でDLLエラーが発生。- Pythonの多くのパッケージは、C/C++製の拡張を含んでおり、それらを動かすにはVC++ランタイムが必須。
- GPU版を使わない限り、追加でDLLをインストールする必要はほとんどない(パッケージ内に同梱されているため)。
- Windows ServerにPython環境をデプロイする際は、まずVC++ 再頒布可能パッケージ (2015–2022, x64) をインストールするのがベストプラクティス。
この知識があれば、無駄なトラブルシューティングの時間を大幅に減らすことができます。
もしWindows ServerでこれからPythonを始める、という方がいらっしゃいましたら、ぜひこの記事の内容を参考にしてみてください。
本日も最後までお読みいただきありがとうございました。
それでは、よいWindows Serverライフを!