4

PythonCAPIを使用してPython2.7.2インタープリターをC++アプリケーションに埋め込みました。

ターゲットマシンでは、Pythonのインストールを保証できないため、組み込みインタープリターにアプリケーションが存在するフォルダーを調べさせようとしています。したがって、アプリケーション部門には、Python用のLib、Libs、およびDLLフォルダーがあります。

コードでは、Py_SetPythonHome()とPy_SetProgramName()を使用して、Pythonをロードし、標準ライブラリをインストールできるようにしました。

私が使用しているテストスクリプトの1つは次のとおりです。

import csv

import numpy

これで、csv行は正常です。\ libsディレクトリ内に、site-packages\numpyが表示されます。しかし、インポートはこの行でクラッシュします。私はこれにnumpy1.6.1を使用しています。

モジュールの検索パスを変更する必要があるかもしれません-これは正しいですか?これを実現して、numpyなどのサードパーティライブラリにスクリプトからアクセスできるようにするための最良の方法は何ですか?それが助けになるなら、私がnumpyディレクトリへの絶対パスを作成できると仮定することができます。

編集:詳細情報-トレースバックを生成することができました。「ImportError:DLLロードに失敗しました」というエラーで「importmultiarray」という行を試行すると、\ numpy \ core \ _init_.pyにエラーが表示されます。 :指定されたモジュールが見つかりません」。ディレクトリを確認すると、multiarray.pydが見つかりました。何かご意見は?

4

2 に答える 2

0

Python C APIを使用してnumpyをインポートすると、まったく同じ問題が発生します。一部の.pydモジュールはインポートできません。boost.pythonに変更したところ、問題ありません。たぶん、boost.pythonも試すことができます。サンプルは次のとおりです

于 2012-07-19T02:30:01.483 に答える
0

これはDLLの不一致エラーであることが判明しました。コードが探していたnumpyバージョンは、インタープリターを埋め込んでいた私のC++コードとはわずかに異なるコンパイルルートを持っていました。

解決策は、アプリケーションで使用したPythonディストリビューションに対してnumpyを再コンパイルすることでしたが、まったく同じコンパイラ設定を使用していました。これで問題は解決しました。

于 2017-02-03T13:25:59.437 に答える