吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 552|回复: 8
上一主题 下一主题
收起左侧

[Python] pyinstaller 打包自定义图片,文档,多个py文件的方法

  [复制链接]
跳转到指定楼层
楼主
679 发表于 2021-4-30 10:13 回帖奖励
先说最简单的
1.打包多个py文件
举一个简单的例子
两个py
[Python] 纯文本查看 复制代码
文件1 main.py 内容
from add import add
k,p = input('输入两个 个位数字 \n')
print(add(k,p))

文件2 add.py 内容
def add(number1,number2):
    adds = int(number1) + int(number2)
    return adds


一个加法的函数
从main.py里执行,从add.py调出一个函数使用
所以打包时填写 pyinstaller -F main.py -p add.py
add.py只是被调用,放在-p后,多个py,就要多写几次-p. 仍然是保持一个主人,多个随从的形式

2.打包自定义的图片 文档等等
这里打包了一个dll和一个exe文件
[Python] 纯文本查看 复制代码
未修改之前的代码
import ctypes
from comtypes.client import CreateObject
import sys
from win32 import win32api
import os


#调用某dll 
dms = ctypes.windll.LoadLibrary('D:\\pydm2\\DmReg.dll')
dms.SetDllPathW('D:\\pydm2\\dm.dll', 0)
dm = CreateObject('dm.dmsoft')
print('调用成功')

#打开某exe软件
win32api.ShellExecute(0, 'open','D:\\pydm2\\SetDpi.exe','125', '', 1)


修改之后的代码
import ctypes
from comtypes.client import CreateObject
import sys
from win32 import win32api
import os

#解压文件 必填
def get_resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

#调用某dll 
dms = ctypes.windll.LoadLibrary(get_resource_path('.\DmReg.dll'))
dms.SetDllPathW(get_resource_path('.\dm.dll'), 0)
dm = CreateObject('dm.dmsoft')
print('调用成功')

#打开某exe软件
win32api.ShellExecute(0, 'open', get_resource_path('.\SetDpi.exe'),'125', '', 1)


仔细看两处变化的地方,除了要多加一个释放文件的函数,还要把具体的文件路径改成 get_resource_path('xx文件夹\xxx.文件')
\的前面是某某文件所处文件夹的名字,没有的话,直接填小数点
本地运行一遍无误后
编译时
pyinstaller -F 主人.py -p 随从.py  --add-data="SetDpi.exe;." --add-binary="DmReg.dll;." --add-binary="dm.dll;."
图片 文档 等数据使用 --add-data="xx文件;xx文件夹"
动态链接库 dll等 使用 --add-binary="xx文件;xx文件夹"
不设置文件夹的话 同样是用.代替,引号内用分号隔开

没有用修改spec.文件的方法,都一样

还有用转py文件的方法的,我嫌麻烦

还有些其他的用法 具体见官方文档
https://pyinstaller.readthedocs.io/en/stable/usage.html#what-to-bundle-where-to-search
我复制一下

[Asm] 纯文本查看 复制代码
--add-data <SRC;DEST or SRC:DEST>
要添加到可执行文件的其他非二进制文件或文件夹。路径分隔符是特定于平台的os.pathsep(;在Windows和:大多数Unix系统上使用)。此选项可以多次使用。

--add-binary <SRC;DEST or SRC:DEST>
要添加到可执行文件的其他二进制文件。请参阅该--add-data选项以获取更多详细信息。此选项可以多次使用。

-p DIR, --paths DIR
搜索导入的路径(例如使用PYTHONPATH)。允许使用多个路径,以“:”分隔,或多次使用此选项

--hidden-import MODULENAME, --hiddenimport MODULENAME
命名在脚本代码中不可见的导入。此选项可以多次使用。

--collect-submodules MODULENAME
从指定的程序包或模块中收集所有子模块。此选项可以多次使用。

--collect-data MODULENAME, --collect-datas MODULENAME
从指定的程序包或模块收集所有数据。此选项可以多次使用。

--collect-binaries MODULENAME
从指定的程序包或模块中收集所有二进制文件。此选项可以多次使用。

--collect-all MODULENAME
从指定的程序包或模块中收集所有子模块,数据文件和二进制文件。此选项可以多次使用。

--copy-metadata PACKAGENAME
复制指定程序包的元数据。此选项可以多次使用。

--additional-hooks-dir HOOKSPATH
搜索钩子的其他路径。此选项可以多次使用。

--runtime-hook RUNTIME_HOOKS
定制运行时挂钩文件的路径。运行时挂钩是与可执行文件捆绑在一起的代码,该代码在执行任何其他代码或模块之前执行以设置运行时环境的特殊功能。此选项可以多次使用。

--exclude-module EXCLUDES
可选模块或包(Python名称,而不是路径名),将被忽略(好像未找到)。此选项可以多次使用。

--key KEY
用于加密Python字节码的密钥。



免费评分

参与人数 3吾爱币 +7 热心值 +2 收起 理由
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
莫凉生 + 1 + 1 感谢
gentlespider + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
MasterW 发表于 2021-4-30 10:33
打包后文件大吗?
3#
ygx0769 发表于 2021-4-30 11:07
4#
阿傑 发表于 2021-4-30 12:03
5#
1047861073 发表于 2021-4-30 12:18
学习了学习了
6#
想要个妹妹 发表于 2021-4-30 13:04


win32api.ShellExecute(0, 'open', get_resource_path('.\SetDpi.exe'),'125', '', 1)
楼主这个'125'参数代表什么意思
7#
 楼主| 679 发表于 2021-4-30 14:29 |楼主
MasterW 发表于 2021-4-30 10:33
打包后文件大吗?

自定义的材料大 当然就大了,代码里import的库多也会大
好像是用upx之类的 可以大幅减小体积并加密,我没关注这个
8#
 楼主| 679 发表于 2021-4-30 14:30 |楼主
想要个妹妹 发表于 2021-4-30 13:04
win32api.ShellExecute(0, 'open', get_resource_path('.\SetDpi.exe'),'125', '', 1)
楼主这个'125'参 ...

那个不用管,是运行这个文件后加的参数,和本主题没关系的
9#
SagJoker 发表于 2021-4-30 16:14
学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2021-7-26 11:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表