1. ホーム
  2. c++

[解決済み] Py_Initializeが失敗する - ファイルシステムのコーデックをロードできない

2022-01-28 20:58:46

質問

組み込みのPython 3.2インタプリタを使用する簡単なc++のテストプロジェクトをまとめようとしています。プロジェクトは正常にビルドされますが、Py_Initialize は致命的なエラーを発生させます。

Fatal Python error: Py_Initialize: unable to load the file system codec
LookupError: no codec search functions registered: can't find encoding

最小限のコード

#include <Python.h>

int main (int, char**)
{
  Py_Initialize ();
  Py_Finalize ();
  return 0;
}

OSは32bitのVistaです。

使用したpythonのバージョンはpython 3.2 debug buildで、VC++ 10を使用してソースからビルドしました。

同じビルドの python_d.exe ファイルは問題なく実行されます。

どなたか、この問題と解決方法を説明していただけませんか?私自身のgoogle-fuは私を失敗させる。

EDIT 1

Pythonのソースコードを調べてみたところ、エラーにあるように、コーデック検索関数が登録されていないことがわかりました。どちらも codec_registerPyCodec_Register はその通りです。ただ、コードのどこにもこれらの関数が呼び出されていないだけなのです。

これらの関数がいつ、どこから呼ばれるべきなのか、まだ分からないので、これが何を意味するのかよく分かりません。このエラーを発生させるコードは、私の他の Python ビルド (3.1.3) のソースからは完全に失われています。

編集2

以下、自分の質問に答えています。

どのように解決するのですか?

そこで、何らかの理由で python dll がエンコーディングモジュールを見つけることに失敗しました。python.exeの実行ファイルは、期待される相対パスを持っているので、明らかにそれを見つけることができます。検索パスを変更するとうまくいきます。

なぜ、このようなことになったのか?わからないが、少なくとも動作はする。私のタイプミスを強く疑いますが、奇妙なバグはたいていそれが原因のようです。