增强Python可移植性问题

2024-09-29 19:33:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++写的DLL,我想导出Python来运行回归和单元测试(用Python维护和运行回归更容易)。 为此我想用Boost.Python导出dll的主API,以便它在Python中可用。 我的程序集如下所示:

  1. 在我的图书馆.dll//主API C++库< /LI>
  2. 在我的图书馆.pyd//仅包含BOOST_PYTHON_MODULE导出定义的瘦dll项目(依赖于我的图书馆.dll)在
  3. 。。。//其他C++ DLL文件我的图书馆.dll依赖于

我有点麻烦我的图书馆.pyd为了链接,但是在深入研究了一些问题之后(例如here),我意识到我必须重新构建boost,同时将b2.exe指向我的特定Python版本。之后,我可以从python导入并运行我的库(仅在我的机器上)。在

技术数据:我正在用boost1.51、windows7x64和MSVC-10.0上的python3.23构建库(我自己的项目是从VS2010构建的)。我使用的与boost链接的变体是共享库,64地址模型,根据我自己的构建发布。在

问题是,当我试图在另一台机器上导入库(构建在我的机器上)时,python会抱怨:

ImportError: DLL load failed: The specified procedure could not be found.

import MyLibrary线上

这就引出了以下问题:

  1. 是我的图书馆.pyd我在我的机器上建立了“python便携机”?也就是说,除了3.23(我以前构建的版本)之外,它还能在Python的其他版本上工作吗boost.python在我的机器上?在
  2. 用户是否我的图书馆.pyd必须用自己的python版本重新构建boost才能成功导入它?在
  3. 到目前为止,我们一直在使用BoostPro提供的windows预构建boost安装程序。哪一个版本的Python是链接的呢?如果我们决定在整个团队中使用“正确”的Python版本(BoostPro链接的版本),我能为我的用户省去构建boost的头疼吗?在

Tags: 项目用户程序版本机器api图书馆链接
1条回答
网友
1楼 · 发布于 2024-09-29 19:33:43

看一下位于http://docs.python.org/3.2/whatsnew/3.2.html的pep384。在

http://www.boost.org/doc/libs/1_52_0/libs/python/doc/news.html表明最近没有任何实际进展,所以我对此表示怀疑Boost.Python支持或至少在定义了Py_LIMITED_API的情况下进行了测试。在

根据我对python2.x兼容性的经验Boost.Python和PyCXX(我还没有使用过3.x行):

  1. 不,不会的。只有微版本的改动才是便携的。在
  2. 不完全是。用户我的图书馆.pyd您提供的二进制文件将无法使用不同的主/次python版本来加载它。她拥有的Boost的构建配置并不重要。你需要Boost.Python使用您想要支持的每个小Python版本构建。Python和包含用于64位安装的独立版本。在

我的建议是尝试从源代码构建Boost,并定义Py_LIMITED_API。我不能保证它会成功,但值得一试。在

如果失败了,让你的队友使用与你相同的Python版本,当然还有x64位的Windows(因为.pyd本身就是64位的)。或者更好的方法是设置一个CI机器,在每一个必需的配置中构建python模块,这样客户机就可以选择一个合适的二进制文件。让你的队友构建并使用他们自己的版本我的图书馆.pyd仅供当地使用。在

相关问题 更多 >

    热门问题