首页 > Python资料 博客日记
python转dll
2024-10-27 20:00:04Python资料围观33次
最近有个新项目,客户需求将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】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南: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