Python pyd库编译生成

1介绍

 python转pyd的主要目的是为了对源码进行加密。pyc文件比较容易被反编译出源码。采用pyd加密的方式更加安全,不易于被反编译。python文件转pyd格式相当于编译成DLL或so文件,即把文件编译成库,然后供其他函数调用。pyd文件可以直接通过import进行调用,使用方法与.py文件一样,例如test.pyd和test.py使用方法保持一致。但是,pyd文件不能直接运行,必须通过import来运行。

2 安装内容

(1) python环境中需要安装cython。
pip install cython
(2) 安装vs_BuildTools.exe工具,网址:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/。安装内容如下图。
在这里插入图片描述
(3) 如果安装了VisualStudio(VS)不需要安装(2)的工具。

3 编译过程

(1) 把pyd.py编译成*.pyd,pyd.py内容如下:

def cythonTest():
    print("cython使用教程")

(2) 创建setup.py文件
在这里插入图片描述
(3) 打开命令行,激活python环境。如下使用pycharm的环境,项目名称pythonProject3。命令行定位到.venv\Scripts下,激活环境,在返回到项目目录。(注意:不一定使用pycharm的python环境,只要python安装了cython都可以)
在这里插入图片描述
在这里插入图片描述
(4) 在命令行输入如下命令就可以编译完成。

python setup.py build_ext –inplace

(5) 执行到第(3)步pyd库就编译完成。但是有时候会出现如下报错,出现的原因是搜索不到VS的io.h库,目前还不知原因。
在这里插入图片描述
解决方法是在命令行中输入如下命令,分两次输入(命令行中不用换行,以下换行是为了显示,需要根据自己VS安装路径查找。-表示版本):

set INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\-\VC\Tools\MSVC\14.41.34120\include;
C:\Program Files\Microsoft Visual Studio\2022\-\VC\Auxiliary\VS\include;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\ucrt;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\um;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\shared;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\winrt;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\cppwinrt;
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um;

set LIB=E:\python3.12\libs;E:\python3.12\PCbuild\amd64;
C:\Program Files\Microsoft Visual Studio\2022\-\VC\Tools\MSVC\14.41.34120\lib\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\ucrt\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64;

(5) 如果出现LINK : fatal error LNK1158: 无法运行“rc.exe”的错误,可以把
C:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\x64目录加到系统环境或把rc.exe和rcdll.dll拷贝到link.exe目录中。
(6) 编译结果
在这里插入图片描述
(7) 编译多个py文件
在这里插入图片描述

4测试

把之前的pyd.py改成pyd1.py或删除,防止重名调用。
在这里插入图片描述

参考博客:

https://blog.csdn.net/q454706532/article/details/79636284
https://blog.csdn.net/weixin_54482403/article/details/129298187

Python 中,有两种方法可以创建 C/C++ 扩展模块,一种是使用 ctypes 将 C/C++ 代码封装为 Python 模块,另一种是使用 Python 的 C API 构建 Python 模块。 如果你想使用 Python 的 C API 构建 Python 模块,那么可以使用以下步骤编译 pyd 文件: 1. 编写 C/C++ 扩展模块的代码,并将代码保存为 .c 或 .cpp 文件。 2. 使用 Visual Studio 或者 GCC 等编译器将 C/C++ 代码编译成动态链接(DLL)或共享对象(SO)文件。 3. 在编译时链接 Python 文件和头文件。 4. 将生成的 DLL 或 SO 文件重命名为 pyd 文件。 下面是一个示例代码: ```c++ #include <Python.h> static PyObject* example(PyObject* self, PyObject* args) { // 实现扩展模块的逻辑 return Py_BuildValue("s", "Hello, World!"); } static PyMethodDef exampleMethods[] = { {"example", example, METH_VARARGS, "example function"}, {NULL, NULL, 0, NULL} }; static struct PyModuleDef exampleModule = { PyModuleDef_HEAD_INIT, "example", "example module", -1, exampleMethods }; PyMODINIT_FUNC PyInit_example(void) { return PyModule_Create(&exampleModule); } ``` 上面的代码实现了一个名为 example 的函数,并将其作为 Python 模块的一部分导出。如果你使用 Visual Studio 编译器,可以使用以下命令编译该代码: ``` cl /LD /I C:\Python38\include example.c /link /LIBPATH:C:\Python38\libs python38.lib ``` 这将在当前目录下生成 example.dll 文件。你可以将其重命名为 example.pyd 文件,然后将其导入到 Python 代码中使用。 注意:在编译时需要根据你的 Python 版本和安装路径设置头文件、文件、链接等相关参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geo@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值