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

我是Python世界的新手,现在我发现自己正在努力学习如何正确地创buildPython包或模块。 我也有几个必须满足的要求。

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

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

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

import MyCoreBindings as SDK 

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

 import MyProduct.SDK 

依赖项顺序的文件摘要:

  • PROGRAMFILES \ myProduct的\ MyCore.dll
  • _MyCoreBindings.pyd
  • MyCoreBindings.py
  • MyProduct.py (我不知道我需要这个)

我也读过,Python包的格式包含一些模仿导入path的目录结构,并且可能包含了setup.py__init__.py ,但是我读过的所有材料都没有明确说明必须要做什么每个这些文件,以及在什么情况下,他们是必需的。 我当然不清楚这个目录结构可以放在哪里。

如果你想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 

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