构造引用.PYD的Python包/模块的正确方法是什么?

时间:2015-01-21 17:59:01

标签: python windows dll swig

我是Python世界的新手,现在我发现自己正在努力学习如何正确创建Python包或模块。我还有一些必须满足的要求。

我有一个从C ++编译的核心本机DLL(我们将其命名为 MyCore.dll )。此DLL必须部署到特定的安装位置,因为它是产品的核心组件(我们会说 ProgramFiles \ MyProduct )。

我使用SWIG为 MyCore.dll 生成Python绑定。它生成了2个文件: _MyCoreBindings.pyd (本质上是引用 MyCore.dll 的DLL)和 MyCoreBindings.py (加载 _MyCoreBindings.pyd 并为其提供Python API。

最后,我有一个只包含导入的Python脚本( MyProduct.py ),因为我的产品必须在名为 MyProduct.SDK 的名称下以Python导入:< / p>

import MyCoreBindings as SDK

因此,我希望用户的Python脚本能够像这样访问它:

import MyProduct.SDK

依赖顺序的文件摘要:

  • PROGRAMFILES \ myProduct的\ MyCore.dll
  • _MyCoreBindings.pyd
  • MyCoreBindings.py
  • MyProduct.py (我不确定是否需要此内容)

我还读到Python包的格式涉及一些模仿导入路径的目录结构,可能包含 setup.py __ init __。py ,但我读过的所有材料都没有明确说明每个文件中必须包含的内容,以及在什么情况下需要它们。我绝对不清楚这个目录结构的位置。

1 个答案:

答案 0 :(得分:2)

如果您希望Python能够导入您的模块,那么您有几个选择:

  • 将模块安装到Python的site-packages文件夹中。
  • 修改Python搜索要导入的模块/包的路径。您可以通过* .pth文件或使用Python的sys模块修改路径(即sys.path.append(/ some / path))

您使用setup.py安装包裹和/或创建鸡蛋/轮子等。有关有用的提示,请参阅以下内容:

您可以在模块旁边的文件夹中使用_init__.py创建包:

- MyProduct
  - __init__.py
  - MyCoreBindings.py
  - _MyCoreBindings.pyd

_init__.py文件可以为空。这基本上允许您将文件夹导入为MyProduct

import MyProduct

MyProduct.MyCoreBindings

from MyProduct import MyCoreBindings as SDK

如果您使用根文件夹中的MyProduct.py,则不需要__init__.py。我希望这一切都有道理。