美文网首页
pyinstaller打包动态库

pyinstaller打包动态库

作者: 生活就是爱 | 来源:发表于2020-04-20 18:45 被阅读0次

一、问题背景

pyinstaller是一个很好的工具,可以把Python工程文件打包成可执行文件
这样的好处很多,可以避免源码泄露,也方便用户阅读和管理
但是当程序集涉及到动态库的时候,常规操作无法将动态库自动打包到可执行文件中

举个例子,下图所示的程序集中有需要用到两个".so"的动态库

--bin
--data
--lib
--model
--config
main.py
link1.so
link2.so

我们使用常规指令对该程序集进行打包

pyinstaller --key mypassword -F main.py
# --key mypassword: 设置打包密码,防止反编译
# -F 将程序集打包成一个可执行文件

上述打包指令执行完成后,在当前文件夹会生产一个"disk"文件夹,里面有一个"main"的可执行文件
最终需要把下述三个文件同时放在一起,可执行文件"main"才能正常执行

main
link1.so
link2.so

现在的想法是,在pyinstaller打包过程中把两个".so"动态库也编译到可执行文件中
经过一番探索,这个想法是可以实现的,需要用到配置文件".spec"

二、pyinstaller打包动态库

1. 首先生成配置文件

pyi-makespec --key mypassword -F main.py
# -*- mode: python ; coding: utf-8 -*-

block_cipher = pyi_crypto.PyiBlockCipher(key='mypassword')

a = Analysis(['main.py'],
             pathex=['/home/root/test'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

2. 修改配置文件

配置文件中Analysis[binaries]专门用来放置动态库的位置,不过格式稍微有些特殊

# -*- mode: python ; coding: utf-8 -*-

block_cipher = pyi_crypto.PyiBlockCipher(key='mypassword')

a = Analysis(['main.py'],
             pathex=['/home/root/test'],
             binaries=[("/home/root/test/link1.so", "."),("/home/root/test/link2.so", ".")],
             datas=[],
              、、、

3. 利用配置文件生成可执行文件

pyinstaller -F main.spec

大功告成
顺便提一句,如果有素材(图标、模型、文件等)需要打包,则直接把路径填写到Analysis[data]中即可

参考资料:
Pyinstaller 打包发布经验总结
Pyinstaller打包py文件简明教程
pyinstaller官方文档

相关文章

网友评论

      本文标题:pyinstaller打包动态库

      本文链接:https://www.haomeiwen.com/subject/dindihtx.html