Windows ServerでPythonならVC++ランタイム忘れずに – DLLエラーとサヨナラする鉄板の知識

みなさん、こんにちは。

今回は、私自身が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)

これが今回、私がハマった最大の原因です。

numpyscipyopencvscikit-learnといった科学技術計算やAI系のライブラリをはじめ、多くのPython拡張モジュールがこのランタイムに依存しています。

エラーメッセージに出てくるmsvcp140.dllvcruntime140.dllといったDLLは、このパッケージに含まれているもの。

Windows ServerにPython環境を構築する場合、このVC++ランタイムを最初にインストールしておくのが、DLLエラーを回避するための最も重要なステップになります。

ダウンロードはこちらから

お使いの環境にあわせてダウンロードしてください。私はx64版をダウンロードしてインストールしました。

 


 

2. GPUを使うなら必須!CUDA / cuDNN

 

もしpaddlepaddle-gputensorflow-gputorchなどのGPU版ライブラリを使う場合は、NVIDIAのGPUドライバーに加え、CUDAとcuDNNというライブラリが必要になります。

これらのライブラリは、GPUを効率的に使うためのもので、cudart64_X.dllcudnn64_X.dllといったDLLに依存します。

重要なのは、GPUライブラリのバージョンと、CUDA/cuDNNのバージョンに互換性があるか、という点。

最新のGPUライブラリを使おうとしたら、まだ対応しているCUDAバージョンが古かった、なんてこともよくあるので、必ず公式のリリースノートや対応表を確認するようにしましょう。

CPU版を使う場合は、これらのDLLは不要なのでご安心ください。

 


 

3. パッケージに同梱されているDLL

 

「え、ということはopencv-pythonとかPillowとかも、自分でDLLを探してこないといけないの?」

そう思われた方もいるかもしれません。でも、ご安心ください。

Pythonのパッケージの多くは、必要なネイティブライブラリ(DLL)をパッケージ内にwheelという形式で同梱しています。

例えば、

  • opencv-pythonopencv_world*.dll
  • Pillowは画像処理に必要なlibjpegzlibなど
  • lxmllibxml2.dlllibxslt.dll

といった具合に、開発者がすでに必要なDLLをまとめてくれています。

ですので、pip installするだけで、ユーザーは追加でDLLをインストールする必要はありません。

これは本当にありがたいですよね!

 


 

DLLエラーを防ぐための実運用でのポイント

 

ここまでの知識を踏まえて、Windows ServerでPython環境を構築する際に気をつけたいポイントをまとめてみました。

1. VC++ランタイムのインストールは最初の最初

Python環境を構築する手順として、

  1. Pythonのインストーラを実行
  2. 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ライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール