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