首页 > Python资料 博客日记
python转dll
2024-10-27 20:00:04Python资料围观54次
最近有个新项目,客户需求将python脚本转为dll文件,当初听到这个需求我也是蒙圈的,毕竟我工作是干java的,对这个python啊c++啊都很久没接触过了。参考CSDN站大神写的帖子成功了,手把手教你将Python程序打包为DLL,在此非常感谢这位仁兄。但他写的年代有些久远了,不是特别适合2024年这个时间段小白的我,我用了三天的时间和寻求了一些同事的帮助和踩了很多坑,所以,我在此在他思路的基础上结合当前时点的软件版本进行新的记录,供大家参考。
1.安装python环境,因客户需求用3.6.5版本,直接官网下载安装,一路默认确定安装就行,非常无脑。注意目前电脑都应该是x64位的系统了,所以大家都安装x64的,千万别搞错了。
安装好之后,cmd上确认下
2.安装cython
这个安装就很简单了,在cmd直接执行命令
easy_install -U cython
等待它安装完成,在cmd 输入pip list 确认下
好了,这个时候我们就可以操作python文件了,据了解python文件是以.py结尾的文件,我们需要将.py文件先转为.pyx文件再进行下去(这个过程我还没弄,后续补充)。
那就假设我们手里就有了.pyx文件,直接从这部开始。
新建一个run.pyx文件,直接用记事本编辑,就是这么简单粗暴
cdef public int str_add(const char* str1,const char* str2):
return int(str1) + int(str2)
然后在此文件的所在目录直接cmd,输入命令
cython run.pyx
就会得到.c和.h文件,如下图
想必到这大家应该都不会有啥问题,那咱们深吸一口气继续。
此时我们需要安装一个工具,这个工具完全免费,它的名字叫做 visual studio community,这玩意我是第一次用,官网下载,visual studio community官网首页,也是一路无脑安装,我用的是2022版本,
上面两个红框里的内容都要勾上,上图是网图转过来的,你们必须两个都选哈,否则失败了,和我没关系。安装时间有些久,大家稍安勿躁。
安好之后,我们就可以一步一步,都有点耐心哈,我都会截图下来,跟住了。
点击下一步,
名称位置啥的都挺随意,点击创建。
一进来,它长这样,然后我们开始表演。
首先将下图中,三个红框里的文件都删了。
之后,右键项目点击属性如下图
上图,四个红框的内容都必须非常注意
1.配置(C):Release
2.平台(P):x64
3.可执行文件目录:你自己的python安装目录下的include文件夹,不知道python安装目录,没关系我黄风大圣来助你,cmd上如下执行
4.库目录:你自己的python安装目录下的libs文件夹(注意不是lib文件夹)
然后将下面代码,替换掉dllmain.cpp中的内容
#include <Python.h>
#include <Windows.h>
#include "run.h"
extern "C"
{
__declspec(dllexport) int __stdcall _str_add(const char* a, const char* b)
{
return str_add(a, b);
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
Py_Initialize();
PyImport_AppendInittab("run", PyInit_run);
break;
case DLL_PROCESS_DETACH:
Py_Finalize();
break;
}
return TRUE;
}
咔咔咔,一堆报错,不要慌,挨个解决。
注意红框内容。都虚点心嗷,我不啰嗦你们直接照着做。
这张图我多说一句,这个比较细节,这个就只手填“python36.lib”,不需要带任何路径,那你会问了这个.lib文件是哪来的了,那我告诉你,是刚才上面配置过的库目录的地址下的包,根据python版本不同,名字也不同,没找到的,转转自己脑子嗷。
以上做完之后,你会发现,报错减少了,但还是有。
你看报的run.h眼熟不,对了,就是咱们一开始就生好的那个.c和.h文件中的.h文件,这时候,我们需要把.c和.h文件所在的目录配到如下的地方。
并且把.c和.h文件,粘贴到头文件里。
之后,再看,爽了吧各位。一点错没有。
然后右键项目,点重新生成。
这就成功了,去项目目录下找到.dll文件。
接下来我们需要验证下,生成的这个dll文件是否好用。
我们新打开一个visual Studio 2022
啥也不用配置,把ConsoleApplication1.cpp文件内容替换成下面的,.dll名称根据自己的改哈,抄作业别抄名,狗头。
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
// 调用dll测试
typedef int(*pAdd)(const char* a, const char* b);
HINSTANCE hDLL = LoadLibrary(L"Dll1.dll");
cout << "hDLL:" << hDLL << endl;
if (hDLL)
{
// 获取DLL中需要调用的函数的地址
pAdd pFun = (pAdd)GetProcAddress(hDLL, "_str_add");
cout << "pFun:" << pFun << endl;
const char* stra = "50";
const char* strb = "51";
if (pFun)
{
int i = pFun(stra, strb);
cout << "i = " << i << endl;
}
}
else {
}
system("pause");
return 0;
}
将刚才生的.dll文件粘到cpp同层。
并且同时将此文件放入C:\Windows\System32路径下,这个就是为什么我之前一直不好使,这段话价值千金。
右键项目,点击重新生成
点击一下按钮
成功了,完结撒花。
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程