构建引用 .PYD 的 Python package/module 的正确方法是什么?
What is the proper way to construct a Python package/module referencing a .PYD?
我是 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) 只包含一个导入,因为我的产品必须在 Python 中导入在名字 MyProduct.SDK 下:
import MyCoreBindings as SDK
因此,我希望用户的 Python 脚本能够像这样访问它:
import MyProduct.SDK
按依赖顺序排列的文件摘要:
- ProgramFiles\MyProduct\MyCore.dll
- _MyCoreBindings.pyd
- MyCoreBindings.py
- MyProduct.py(我不确定我是否需要这个)
我还读到 Python 包的格式涉及一些模仿导入路径的目录结构,并且可能包含 setup.py和 __init__.py,但我阅读的所有材料都没有明确说明每个文件中必须包含哪些内容,以及在什么情况下需要它们。我肯定不清楚这个目录结构可能放在哪里
如果您希望 Python 能够导入您的模块,那么您有两个选择:
- 将模块安装到 Python 的
site-packages
文件夹。
- 修改Python搜索modules/packages导入的路径。您可以通过 *.pth 文件或使用 Python 的
sys
模块修改路径(即 sys.path.append(/some/path) )
您使用 setup.py
安装包 and/or 创建 eggs/wheels 等。请参阅以下内容以获得有用的提示:
- https://docs.python.org/2/distutils/setupscript.html
- https://pythonhosted.org/an_example_pypi_project/setuptools.html
您可以在模块旁边的文件夹中使用 _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
。我希望一切都有意义。
我是 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) 只包含一个导入,因为我的产品必须在 Python 中导入在名字 MyProduct.SDK 下:
import MyCoreBindings as SDK
因此,我希望用户的 Python 脚本能够像这样访问它:
import MyProduct.SDK
按依赖顺序排列的文件摘要:
- ProgramFiles\MyProduct\MyCore.dll
- _MyCoreBindings.pyd
- MyCoreBindings.py
- MyProduct.py(我不确定我是否需要这个)
我还读到 Python 包的格式涉及一些模仿导入路径的目录结构,并且可能包含 setup.py和 __init__.py,但我阅读的所有材料都没有明确说明每个文件中必须包含哪些内容,以及在什么情况下需要它们。我肯定不清楚这个目录结构可能放在哪里
如果您希望 Python 能够导入您的模块,那么您有两个选择:
- 将模块安装到 Python 的
site-packages
文件夹。 - 修改Python搜索modules/packages导入的路径。您可以通过 *.pth 文件或使用 Python 的
sys
模块修改路径(即 sys.path.append(/some/path) )
您使用 setup.py
安装包 and/or 创建 eggs/wheels 等。请参阅以下内容以获得有用的提示:
- https://docs.python.org/2/distutils/setupscript.html
- https://pythonhosted.org/an_example_pypi_project/setuptools.html
您可以在模块旁边的文件夹中使用 _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
。我希望一切都有意义。