1

我在单个 .cpp 文件中有一个很大的 c++ 程序,它定义了很多类(相互依赖)并最终运行一个主函数。现在我只对在 python 中使用其中一个类感兴趣,特别是这个类的一种方法,它接受 5 个浮点数作为输入并输出一个浮点数。我试图找到最简单的方法来实现这一点。在 boost:python 没有成功之后(主要是因为安装问题),我来到了 Cython,它在当前版本中支持 C++。我可以成功运行 Cython 教程中给出的 Rectangle 示例,但我不知道如何继续并使其适应我不需要如此复杂的 .pyx 文件且没有 .h 的情况文件。有人可以用简单的话解释我应该在 setup.py 和 .pyx 文件中写什么,如果我的 .

...
class Nuclei {
public:
...
    double potential(float,float,float,float,float);
...
private:
...
};
...
4

1 回答 1

0

如果您只想调用一个函数,使用 C/C++ 扩展 Python可能是最简单的方法。这个页面提供了一个很好的例子。

该示例中的相关 setup.py 代码是

from distutils.core import setup, Extension

module1 = Extension('demo',
                    define_macros = [('MAJOR_VERSION', '1'),
                                     ('MINOR_VERSION', '0')],
                    include_dirs = ['/usr/local/include'],
                    libraries = ['tcl83'],
                    library_dirs = ['/usr/local/lib'],
                    sources = ['demo.c'])

setup (name = 'PackageName',
       version = '1.0',
       description = 'This is a demo package',
       author = 'Martin v. Loewis',
       author_email = 'martin@v.loewis.de',
       url = 'http://docs.python.org/extending/building',
       long_description = '''
This is really just a demo package.
''',
       ext_modules = [module1])

如果您要调用的 C++ 代码在 中demo.c,则可以import demo在 Python 中使用 with。

请注意,这并不是那么简单——您将创建一个函数,该函数接受一个带有参数的 PyObject * 并返回一个 PyObject *,关于它们的构造方式可以说很多。看看上面链接的页面——它们充满了例子。

于 2012-05-08T08:17:05.903 回答