我有一个用C ++编写的dll,我想导出到Python运行回归和单元测试(它更容易维护并运行Python回归)。 为此,我想使用Boost.Python导出dll的主API,以便它可以在Python中使用。 我的程序集如下所示:
BOOST_PYTHON_MODULE
导出定义的瘦dll项目(取决于MyLibrary.dll)我在使用MyLibrary.pyd进行链接时遇到了一些麻烦,但在仔细研究了一些问题之后(例如here)我意识到我必须重新构建boost,同时将b2.exe
指向我特定的Python版本。之后我能够从python导入并运行我的库(在我的机器上)。
技术数据:我正在使用boost 1.51构建库,在Windows 7 x64和MSVC-10.0上构建Python 3.23(我自己的项目是从VS2010构建的)。我用来与boost链接的变体是共享库,64地址模型,相应地使用我自己的构建版本。
问题是,当我尝试在另一台机器上导入库(在我的机器上构建)时,python抱怨:
ImportError: DLL load failed: The specified procedure could not be found.
在import MyLibrary
这引出了以下问题:
答案 0 :(得分:3)
在http://docs.python.org/3.2/whatsnew/3.2.html处查看PEP 384。
http://www.boost.org/doc/libs/1_52_0/libs/python/doc/news.html表明最近没有任何真正的进展,所以我怀疑Boost.Python是否支持或至少使用Py_LIMITED_API定义进行测试。
根据我使用Boost.Python和PyCXX的Python 2.x兼容性的经验(我还没有使用3.x行):
我的建议是尝试使用定义的Py_LIMITED_API从源代码构建Boost。我不保证它会成功,但值得一试。
如果失败请求你的队友使用与你相同的Python版本,当然还有x64位Windows(因为.pyd本身就是64位)。或者甚至更好地设置一个CI机器,它将在每个必需的配置中构建你的python模块,以便你的客户能够选择一个合适的二进制文件。让你的队友建立并使用他们自己的MyLibrary.pyd版本仅供本地使用。