c++ - 使用boost python的python模块是空的?

标签 c++ windows visual-studio python-3.x boost

我正在尝试学习 boost python API 来创建我自己的 python(3.6) 模块。我能够成功编译以下 C++ 代码并获得生成的 pythonTest.dll。

#define BOOST_ALL_DYN_LINK
#include <boost/python.hpp>
#include <string>

const std::string hello_world(void)
{
    return std::string("hello world!\n");
}

BOOST_PYTHON_MODULE(pythonTest)
{
    namespace python = boost::python;

    python::def("hello_world", hello_world);
}

然后我将 pythonTest.dll 复制到我的模块文件夹,如下所示。 (我将 pythonTest.dll 重命名为 pythonTest.pyd)

pythonTest\
    __init__.py
    pythonTest.pyd

当我执行 python 时,它会导入模块但它没有找到我的 hello_world 函数:

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pythonTest
>>> pythonTest.hello_world()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
**AttributeError: module 'pythonTest' has no attribute 'hello_world'**

>>> help(pythonTest)
Help on package pythonTest:

NAME
    pythonTest

PACKAGE CONTENTS
    pythonTest

FILE
    <...>\pythontest\__init__.py

>>> dir(pythonTest)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__','__name__', '__package__', '__path__', '__spec__']
>>>

我错过了什么? 谢谢。

编辑: 这是 visual studio 构建的输出:

1>------ Rebuild All started: Project: pythonTest, Configuration: Release x64 ------
1>Build started 7/10/2017 2:49:53 PM.
1>InitializeBuildStatus:
1>  Creating "x64\Release\pythonTest.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  pythonTest.cpp
1>G:\DataBackup\dev-vc13\3rdParty\boost_1_64_0\boost/python/detail/caller.hpp(55): warning C4244: 'return' : conversion from 'Py_ssize_t' to 'unsigned int', possible loss of data
1>Link:
1>     Creating library G:\DataBackup\dev-vc13\temp\pythonTest\x64\Release\pythonTest.lib and object G:\DataBackup\dev-vc13\temp\pythonTest\x64\Release\pythonTest.exp
1>  Generating code
1>  Finished generating code
1>  pythonTest.vcxproj -> G:\DataBackup\dev-vc13\temp\pythonTest\x64\Release\pythonTest.dll
1>PostBuildEvent:
1>          1 file(s) copied.
1>FinalizeBuildStatus:
1>  Deleting file "x64\Release\pythonTest.tlog\unsuccessfulbuild".
1>  Touching "x64\Release\pythonTest.tlog\pythonTest.lastbuildstate".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:04.21
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

最佳答案

尝试使用 dir() 函数

>>> dir(pythonTest)

这将向您展示可用的方法和功能 包数

关于c++ - 使用boost python的python模块是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44915633/

相关文章:

c++ - 如何在编译时找出 std::bitset 的大小

c++ - 首选具有相同名称的多个声明之一

c++ - 在 C++ 中使用 ListView

java.nio.file.path : inconsistent behaviour with name count?

windows - 在 Windows 中,为什么有些字符是非法的?

visual-studio - Visual C++ 中的 app.aps 文件是什么?

c++ - 页面分配处的 Visual Studio 断点

c++ - 将负索引包装到数组的大小

java - 将字符串从 EBCDIC 转换为 Unicode/UTF8

c++ - GCC 等同于/INCLUDE Visual Studio 选项