在python中调用dll,并将dll以及python合并打包成一个exe文件的方法

  • 0

在python中调用dll,并将dll以及python合并打包成一个exe文件的方法

相信很多学习使用python的朋友都想过将python程序打包成一个EXE文件,这样避免了程序发布时还要安装python运行环境的问题。有很多程序可以帮助我们做到这一点,如py2exe,pyinstaller,cxfreeze等。

其中只有cxfreeze支持3.x的版本,而且cxfreeze不支持将所有文件打包到一个exe。3.x版本的python相对于2.x改动较大,所以,建议开发者使用2.X的版本。

py2exe可以做到将python程序的运行库、依赖库打包到一个EXE文件中。这可以解决大部分人的问题。但是如果使用到了ctypes调用dll时怎么将dll文件进去呢?一个办法是用自解压的方式,把所有文件用rar压缩,配置自解压。但是这样做有一个缺陷,就是会创建两个进程,一个是解压程序,第二个才是自己的程序。笔者尝试了很多种办法都没有做到只有一个进程并将dll文件打包进去。

最后利用脚本程序的一个特性绕过这个问题。

脚本是边解释边执行,所以我将dll文件编码后存储到程序里,在加载dll前将其释放即可。程序如下:

#释放dll
def FreeDll():
strBase64 =“这里是dll文件的base64编码”
content = base64.decodestring(strBase64)
if (not os.path.exists(‘D:\\a.dll’)):
file_object = open(‘D:\\a.dll’, ‘wb’)
file_object.write(content)
file_object.close()
dll = ctypes.WinDLL(‘D:\\a.dll’)
return dll


About Author

深圳市闻道软件有限公司

闻道软件工作室

Leave a Reply