首页 > Python资料 博客日记
python转dll
2024-10-27 20:00:04Python资料围观11次
最近有个新项目,客户需求将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路径下,这个就是为什么我之前一直不好使,这段话价值千金。
右键项目,点击重新生成
点击一下按钮
成功了,完结撒花。
标签:
相关文章
最新发布
- 【Java】在Java中进行日期时间比较的多种方法
- 【Python】网络爬虫——词云wordcloud详细教程,爬取豆瓣最新评论并生成各式词云
- python的csv库常用操作
- 全网最详细Gradio教程系列5——Gradio Client: python
- 【AI 大模型】OpenAI 接口调用 ② ( MacOS 中进行 OpenAI 开发 | 安装 openai 软件包 | PyCharm 中开发 Python 程序调用 OpenAI 接口 )
- 笔试真题——机器人拧魔方模拟
- 大学生玩转小袁口算:Python 抓包破解代码
- **LLAMA-CPP-PYTHON 安装与配置完全指南**
- Python毕业设计选题:基于Python的个性化旅游路线推荐系统-flask+vue
- 【完整版解决方案】sklearn加州房价数据集出错 housing = fetch_california_housing() HTTPError: HTTP Error 403: Forbidden
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj