7

PythonでVisualC++(boostでラップ)のc++コードを使用するのに非常に問題があります。

了解しました。使用しているツールは、Visual Studio 2010、BoostPro 1_47、Windows 7、およびPython 2.7(32ビット)です。

VisualStudio2010で適切にコンパイルされる次のコードがあります。

#define BOOST_PYTHON_STATIC_LIB
#include <boost/python.hpp>
using namespace boost::python;

struct World
{
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    std::string msg;
};


BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
            .def("greet", &World::greet)
            .def("set", &World::set);
}

形式は次のとおりです。Win32コンソールアプリケーション>>>空のプロジェクト/DLL。

「プロジェクトのプロパティ」:

VC++ DIRECTORIES: 
  I added:  
  >>> INCLUDE DIRECTORIES:  C:\Program Files\boost\boost_1_47;C:\Python27\include        .  
  >>> LIBRARY DIRECTORIES:  C:\Program Files\boost\boost_1_47\lib;C:\Python27\libs

これらすべてがc++ファイルをビルドしますが、Pythonからアクセスできません。

これは、私がモジュールを使おうとしたときにPythonが言うことです。

">>> import hello
 Traceback (most recent call last):
   File "<pyshell#0>", line 1, in <module>
     import hello
 ImportError: No module named hello

だから私の質問は...Pythonにそれを見つけさせるにはどうすればいいですか?

c ++コードがコンパイルされると、DLLファイルが作成されます。ファイルの場所を変更する必要がありますか?もしそうなら、どこに置くべきですか?

あなたの助けをいただければ幸いです

4

1 に答える 1

10

DLLの拡張子をに変更する必要があります.pyd。そうしないと、PythonはDLLをロードできません。VSで拡張子を自動的に設定するビルドオプションを設定できると思いますが、よくわかりません。

また、作成された拡張機能がPYTHONPATHパスのどこかにあることを確認してください。pythonはロードするモジュールを探します。

于 2012-06-14T16:01:21.147 に答える