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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5039|回复: 48
收起左侧

[Python 转载] Python代码打包成exe文件的几种方法尝试后经验分享

  [复制链接]
xlqin 发表于 2021-12-5 12:29
本帖最后由 xlqin 于 2022-11-10 12:09 编辑

最近做了一个python的小脚本用于提取电子加油票PDF文件中的信息到excel文件,因为别人的电脑没有安装python,所以需要打包成exe文件。
代码如下,代码很少:

[Python] 纯文本查看 复制代码
import pdfplumber
import os
import pandas
print('开始提取...请稍后...')
list=[]
tikes=[]
pdf_files=os.listdir()
for file in pdf_files:
    if file.endswith('.pdf'):
        with pdfplumber.open(file) as pdf:
            page=pdf.pages[0]
            text=page.extract_text().split('\n')
            date=text[0].replace("  ","/")
            money=text[-2]
            no=file.split('_')[1].split(".")[0]
            list=[date,money,no]
            tikes.append(list)
if len(tikes)!=0:
    ex=pandas.DataFrame(tikes,columns=['日期','金额','发票号码'])
    ex.to_excel('邮票.xlsx',index=False)
else:
    print("未发现PDF文件...")


打包尝试:
pyinstaller常用参数说明:
-F 打包单体文件
-i 文件图标
-w 不显示命令窗口,就是cmd那种黑窗口
--add-data 打包时把附带的文件夹或文件一同打包进去



第一种方法:仅pyinstaller
1.打开CMD(window键+R),安装pyinstaller模块,使用命令:pip install pyinstaller 等待完成,然后关闭cmd.

2.在需要打包的py文件所在文件夹的地址栏清空后输入cmd,打开cmd,这时候cmd路径会变成当前文件夹路径
路径.JPG

3.输入命令:pyinstaller -F 打包的文件名(比如我的打包文件时pdf.py,输入:pyinstaller -F pdf.py)然后等待结束,在当前文件夹的dist文件夹中会生成一个exe文件。
如果想生成的exe有自己的图标,需要把ico格式的图标文件与打包文件放在一个文件夹里,打包命令就变成:pyinstaller -F -i 图标文件名 打包文件名(例如我的是pyinstaller -Fw -i pdf.ico pdf.py)。这里说明-F表示生成一个单体文件,不用-F 默认产生多个文件作为可执行程序 ,w运行生成的exe程序时不显示命令窗口。

结论:pyinstaller生成的文件可以运行,但是体积有点大,我这短短几行代码生成的文件69MB大,于是开始尝试其他方法缩小文件体积。

第二种方法:pipenv虚拟环境下打包,pipenv+pyinstaller。

1.打开cmd 安装pipenv模块:pip install pipenv

2.安装完成后,随便找一个盘符,在这个盘符的根目录(最好是根目录)新建一个文件夹,作为虚拟环境,然后双击进入该文件夹,比如我在D盘创建env文件夹作为虚拟环境。

env.JPG

3.按住Shift键,在文件夹的空白处,点击鼠标右键,在菜单中找到Powershell,点击,出现Powershell的命令界面

4.安装python,例如:pipenv install --python 3.8(因为我的电脑安装的3.8版本python,所以我还选择3.8),安装完成后关闭
以上命令仅第一次创建虚拟环境文件夹使用,之后就不用了
5.把打包的py文件和图标文件复制到此文件夹里(我的wenjpdf.ico,pdf.py)。

6.文件夹地址栏清空,输入cmd,打开CMD窗口,激活虚拟环境,输入命令:pipenv shell,这时cmd变成下面这样:

cmd.JPG

7.安装打包文件需要的第三方模块(python自带的不用安装),使用命令:pipenv install 模块名,比如我的py文件7用到了pdfplumber、pandas和pyinstaller也要安装。比如我安装命令是pipenv install pdfplumber,pandas,pyinstaller

8.打包文件,命令跟第一种方法一样:pyinstaller -F py文件名 或带图标的:pyinstaller -F -i 图标文件夹名 py文件夹名 然后等待完成后在dist文件夹中可找到生成的exe文件。

结论,虚拟环境下生成的exe文件37MB,比纯pyinstaller小了近一半。虽然看上去步骤好多8个步骤,实际操作起来很简单,也很快。

第三种:pipenv+upx+pyinstaller,就是把upx这个文件放在同目录下就可以了 用第二种方法打包的时候会自动运行upx,生成的文件会再压缩,只有28MB。虽然还不太满意,目前还没有找到更好的方法。

捕获.JPG
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

今天补充一些内容:如何把附带的文件夹一同打包成单体文件,如果打包成多文件的形式,只需要把附带的文件或文件夹拷贝到程序根目录即可,但是单体文件打包就麻烦一些。
比如我的代码中用到img文件夹下的favicon.ico这个图标文件

1.JPG

打包前要把有img文件夹复制到虚拟文件夹里,ex.ico 是生成程序的图标文件,ex.py 是代码文件,如下图,就以打包ex.py文件为例:

2.JPG

我从网上找的打包单体文件连同附带文件夹的方法都是:pyinstaller --add-data="./img/favicon.ico;./img" -i ex.ico -Fw ex.py,但是不知道为什么总是不成功,于是我换了折中的方法,
既然打包单体文件不行,我可以打包成多文件的方式,然后用单体文件生成工具再进行打包,打包多文件方式的命令用:pyinstaller --add-data="./img/favicon.ico;./img" -i ex.ico -w ex.py
然后dist文件夹中生成ex文件夹。


就是这个软件,网上可以搜到

3.JPG
用这个软件进行把ex文件夹打包成单体文件,就ok了。。


这个软件打包时需要注意,一定选择遍历文件夹的方式添加文件夹。

upx不太好找,我网盘里可以下:
链接:https://pan.baidu.com/s/121064pMlZsrr4JAZxUvR5w
提取码:52pj

免费评分

参与人数 6吾爱币 +4 热心值 +5 收起 理由
mxy2qk + 1 + 1 热心回复!
woqunina + 1 我很赞同!
zich123 + 1 用心讨论,共获提升!
soenluzy + 1 谢谢@Thanks!
lizy169 + 1 + 1 用心讨论,共获提升!
gangmiao + 1 + 1 热心回复!

查看全部评分

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

平淡最真 发表于 2021-12-5 14:33
不要import  所有  

免费评分

参与人数 1热心值 +1 收起 理由
iStarZ + 1 我很赞同!

查看全部评分

 楼主| xlqin 发表于 2022-11-7 20:15
masa1chi 发表于 2022-10-3 17:13
pyinstaller 打包超级大而且经常失败让python的通用性差了好多哦 ,没有更靠谱的方法么(打包超级慢)

在虚拟环境里打包快很多,目前没什么太好的办法,希望以后会有吧
lbbas 发表于 2021-12-8 11:08
因为你用了几个比较大的库,所以pyinstaller打包的体积就大。pyinstaller本质上应该是打包库+python运行环境的。
nuitka默认编译库的好像,pandas这种你就别编译了,费劲还出错,可以在打包时设置参数。
[Python] 纯文本查看 复制代码
--nofollow-imports  # 所有的import不编译,交给python3x.dll执行
--follow-import-to=need  # need为你需要编译成C/C++的py文件夹命名
dft2010 发表于 2021-12-5 13:06
感谢总结,不过大不大有啥关系呢- -
bg_yx 发表于 2021-12-5 13:12
好贴,支持,谢谢分享。
Gilgamesh_1 发表于 2021-12-5 13:30
dft2010 发表于 2021-12-5 13:06
感谢总结,不过大不大有啥关系呢- -

30M以下就能用邮件发,否则作为超大附件几天就会过期。给老师交过python作业的学生应该深有体会,尤其是那些不限定内容的作业,老师几乎只看效果不看代码,就需要打包。当然这只是体积小好处的一个很小的方面。
Shimmer666 发表于 2021-12-5 13:57
非常感谢!!!!学会;了
头像被屏蔽
tl;dr 发表于 2021-12-5 14:09
提示: 作者被禁止或删除 内容自动屏蔽
wlyk0311 发表于 2021-12-5 14:10
谢谢,学习了,马上实践一下。
dongyueding 发表于 2021-12-5 14:25
学习了,
mokson 发表于 2021-12-5 14:25
打包出来的文件太大,所以放弃PY学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-4-27 12:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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