Python封装——如何把python代码打包成一个可执行的.exe文件,Pyinstaller

这篇具有很好参考价值的文章主要介绍了Python封装——如何把python代码打包成一个可执行的.exe文件,Pyinstaller。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Pyinstaller是啥

https://pyinstaller.org/en/stable/

python封装成可执行的小程序,python,python,开发语言,机器学习

Pyinstaller可以打包Win、Linux、MacOS下的python程序,在什么环境下打包的就是什么平台的程序。相对来看,Pyinstaller打包的程序体积大、安全性稍差(容易反编译),但是上手相对简单一些。

入门案例:Hello World 封装

1.hello world封装

安装:cmd下输入pip install Pyinstaller(P大写)
清华大学镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pyinstaller

python封装成可执行的小程序,python,python,开发语言,机器学习

编程:加入input()解决闪退问题

python封装成可执行的小程序,python,python,开发语言,机器学习

print("hello world")
input("输入任意键结束")

2.封装步骤

1.新建文件夹放入hello.py文件

2.按住shift点鼠标右键选择

python封装成可执行的小程序,python,python,开发语言,机器学习

3.输入

python封装成可执行的小程序,python,python,开发语言,机器学习

pyinstaller -F hello.py

4.完成后打开dist文件

python封装成可执行的小程序,python,python,开发语言,机器学习

运行的效果如下

python封装成可执行的小程序,python,python,开发语言,机器学习

pyinstaller的参数详解

python封装成可执行的小程序,python,python,开发语言,机器学习

pyinstaller -F -w --icon=xxx.ico main.py –noconsole

  • -F表示生成单exe可执行文件,-w表示窗体程序,
  • –icon是设置exe的显示图标,'main.py’是程序的入口,
  • –noconsole 表示不展示cmd窗口

python封装成可执行的小程序,python,python,开发语言,机器学习

PyInstaller 支持的常用选项
-h,–help 产生单个的可执行文件
-D,–onedir 产生一个目录(包含多个文件)作为可执行程序
-a,–ascii 不包含 Unicode 字符集支持
-d,–debug 产生 debug 版本的可执行文件
-w,–windowed, --noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed, --console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。
也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME, --name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

比如:加个icon图标

改进后:pyinstaller -F --icon=subway.ico hello.py

python封装成可执行的小程序,python,python,开发语言,机器学习

进阶案例:读取.dat文件,计算绘图并保存结果

1.dat文件读取和处理

import numpy as np
import pandas as pd
import os
# 列出当前目录下所有的文件
files = os.listdir(".")
for filename in files:
    portion = os.path.splitext(filename)
    # 如果后缀是.txt
    if portion[1] == ".txt":
        # 重新组合文件名和后缀名
        newname = portion[0] + ".csv"
        os.rename(filename,newname)
a=pd.read_csv('F:\python\loadc.csv',sep = ',',encoding = 'gbk')

import pandas as pd
import numpy as np
file_path = "./loadc.dat"
df = pd.read_csv(file_path,encoding = 'gbk')

2.整体的流程和代码

python封装成可执行的小程序,python,python,开发语言,机器学习

python封装成可执行的小程序,python,python,开发语言,机器学习

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
#########################################################
pd.set_option('display.width', 1000)#加了这一行那表格的一行就不会分段出现了
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
###########################################################
file_path = "./loadc.dat"
df = pd.read_csv(file_path,encoding = 'gbk')
file_path1 = "./thrustweight.dat"
df1 = pd.read_csv(file_path1,encoding = 'gbk')
##########################################################
# 推力和载荷数据记录的处理
#转换成只有数据的列表
a=df.iloc[1,:].str.split("\t").tolist()
# print(df.loc["预估载荷上下界"])
load_list1=[i for j in a for i in j ]
load_data1=list(map(float,load_list1[1:]))

load_list=[]
for k in range(1,df.shape[0]):
    a = df.iloc[k, :].str.split("\t").tolist()
    load_list1 = [i for j in a for i in j]
    load_data1 = list(map(float, load_list1[1:]))#输出不带米数的数据
    load_list.insert(k-1, load_data1)

#装换成DataFrame数据
load_data_dataframe=pd.DataFrame(load_list,columns=["thrust_min","thrust_max","torque_min","torque_max"])

##########################################################
# 占比数据的处理
b=df1.iloc[1,:].str.split("\t").tolist()
load_rate1=[i for j in b for i in j ]
load_rate=list(map(float,load_rate1[:]))
cutter_thrust_rate1=load_rate[0]/100
shield_friction_rate1=load_rate[1]/100
equipment_traction_rate1=load_rate[2]/100
###########################################################
#输出刀盘推力的预估上界和下界
cutter_thrust_rate=pd.Series([cutter_thrust_rate1]*800)
cutter_thrust_load=load_data_dataframe.mul(cutter_thrust_rate,axis=0)
shield_friction_rate=pd.Series([shield_friction_rate1]*800)
shield_friction_load=load_data_dataframe.mul(shield_friction_rate,axis=0)
equipment_traction_rate=pd.Series([equipment_traction_rate1]*800)
equipment_traction_load=load_data_dataframe.mul(equipment_traction_rate,axis=0)
# print(load_data_dataframe)
# print(cutter_thrust_load)
###############################################################
#画图
plt.figure(figsize=(20,8),dpi=80)#设置窗口大小
x=range(800)
y1=cutter_thrust_load["thrust_min"]
y2=cutter_thrust_load["thrust_max"]
# y3=cutter_thrust_load["torque_min"]
# y4=cutter_thrust_load["torque_max"]
y3=shield_friction_load["thrust_min"]
y4=shield_friction_load["thrust_max"]
y5=equipment_traction_load["thrust_min"]
y6=equipment_traction_load["thrust_max"]

plt.plot(x,y1,color="r",linestyle="--",linewidth=3,label="刀盘推力下界")
plt.plot(x,y2,color="r",linewidth=3,label="刀盘推力上界")
# plt.plot(x,y3,color="y",linewidth=3,label="刀盘扭矩下界")
# plt.plot(x,y4,color="k",linewidth=3,label="刀盘扭矩上界")
plt.plot(x,y3,color="g",linestyle="--",linewidth=3,label="盾构摩擦力下界")
plt.plot(x,y4,color="g",linewidth=3,label="盾构摩擦力上界")
plt.plot(x,y5,color="y",linestyle="--",linewidth=3,label="设备牵引力下界")
plt.plot(x,y6,color="y",linewidth=3,label="设备牵引力上界")

plt.legend(loc="best",fontsize='x-large')
plt.tick_params(labelsize=13)
plt.xticks(range(800)[::20],x[::20])
plt.savefig('./推力分布曲线图.png')
plt.title('推力分布曲线图',fontdict={'weight':'normal','size': 20})
plt.ylabel('预估推力/kN',fontdict={'weight':'normal','size': 17})
plt.xlabel('掘进行程/m',fontdict={'weight':'normal','size': 17})
plt.grid(alpha=0.3)
plt.savefig("./推力分布曲线图.png")
# plt.show()
##############################################################
#文件存储
thrust_torque=pd.DataFrame()
thrust_torque["thrust_min"]=load_data_dataframe["thrust_min"]
thrust_torque["thrust_max"]=load_data_dataframe["thrust_max"]
thrust_torque["cutter_thrust_min"]=cutter_thrust_load["thrust_min"]
thrust_torque["cutter_thrust_max"]=cutter_thrust_load["thrust_max"]
thrust_torque["shield_friction_thrust_min"]=shield_friction_load["thrust_min"]
thrust_torque["shield_friction_thrust_max"]=shield_friction_load["thrust_max"]
thrust_torque["equipment_traction_thrust_min"]=equipment_traction_load["thrust_min"]
thrust_torque["equipment_traction_thrust_max"]=equipment_traction_load["thrust_max"]
thrust_torque["torque_min"]=load_data_dataframe["torque_min"]
thrust_torque["torque_max"]=load_data_dataframe["torque_max"]

thrust_torque.to_csv('./thrust_load.csv',sep = ';',index = True)

3.封装遇到问题及解决

问题1:RecursionError:maximum recursion depth exceeded

pyinstaller -F --icon=subway.ico PET.py

python封装成可执行的小程序,python,python,开发语言,机器学习

python封装成可执行的小程序,python,python,开发语言,机器学习

核心代码:
python封装成可执行的小程序,python,python,开发语言,机器学习

import sys
sys.setrecursionlimit(5000)

pyinstaller PET.spec

python封装成可执行的小程序,python,python,开发语言,机器学习

问题2:FileNotFoundError:File b’./loadc.dat’does not exist

python封装成可执行的小程序,python,python,开发语言,机器学习
解决方法:把文件loadc.dat和thrustweight.dat放在PET.exe所在文件中

运行成功后的截图:

python封装成可执行的小程序,python,python,开发语言,机器学习

问题3:ModuleNotFoundError:No module named’sklearn.utils._cython_blas

python封装成可执行的小程序,python,python,开发语言,机器学习

解决方法:Spec文件内加入

hiddenimports=[‘cython’, ‘sklearn’, ‘sklearn.utils._cython_blas’ ],(手敲)
然后pyinstaller fg2.spec

问题4:ModuleNotFoundError:No module named’sklearn.neighbors.typedefs

python封装成可执行的小程序,python,python,开发语言,机器学习
解决方法:编译时加sklearn.neighbors.typedefs

pyinstaller -F fg2.py --hidden-import sklearn.neighbors.typedefs

4.封装成功后运行

pyinstaller -F --icon=subway.ico choosebest.py
pyinstaller choosebest.spec

【用途】:推力预测
【流程设计】:
python封装成可执行的小程序,python,python,开发语言,机器学习

封装结果如下:
python封装成可执行的小程序,python,python,开发语言,机器学习
使用说明:

python封装成可执行的小程序,python,python,开发语言,机器学习

使用方法:
1.内部所有文件直接拷贝到D盘;
2.点击 dist 中的 choosebest.exe 文件;
3.等待一会儿,出现“输入任意键结束”;
4.输入任意键,窗口消失;
5.打开dist文件夹,“maxr2_推力”为运行结果。

程序运行结果:
python封装成可执行的小程序,python,python,开发语言,机器学习

python封装成可执行的小程序,python,python,开发语言,机器学习文章来源地址https://www.toymoban.com/news/detail-691952.html

到了这里,关于Python封装——如何把python代码打包成一个可执行的.exe文件,Pyinstaller的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-55-打包exe执行

    你是否有这种烦恼? 他人在使用你的项目、工具时可能只需关注使用,但还需要安装各种依赖包? 共用服务机器环境,偶尔被他人改了依赖包版本,导致运行不起来? 换台机器环境又得安装一遍环境依赖? 我会发现每次搞这些都要耗费一大堆时间,于是想到以前也有编译打

    2024年02月09日
    浏览(26)
  • Python程序打包exe可执行软件教程

    Python虽好,但是平时我们写的代码都是.py脚本文件,必须要在Python环境下 才可以运行。如果一台电脑没有安装Python是无法运行我们的程序的。当然你也可以选择随身携带安装包。 不过终究是有些麻烦。那么有没有什么办法,能把我们编写的Python代码转换成exe文件呢?这样不

    2024年02月09日
    浏览(31)
  • 【Python】使用nuitka打包Python程序为EXE可执行程序

    1.说明 写好的Python程序如果想要拿到其他电脑上运行,那还得安装一下Python环境和各种库,这是比较麻烦的,所以有必要把它打包成一个可执行的exe文件。可以打包exe的库有好多个,比如说pyinstaller、cx_Freeze等。 pyinstaller打包比较简单,如果有需要可以参考之前的文章【Pyth

    2024年01月25日
    浏览(31)
  • 将Python打包为exe+inno setup将exe程序封装成向导安装程序

    为什么要打包? Python脚本不能在没有安装Python的机器上运行。如果写了一个脚本,想分享给其他人使用,可她电脑又没有装Python。如果将脚本打包成exe文件,即使她的电脑上没有安装Python解释器,这个exe程序也能在上面运行。 1、在pycharm中安装pyinstaller 2、进入你所在的文件

    2024年01月25日
    浏览(27)
  • 通过pyinstaller将python项目打包成exe执行文件

    目录 第一步:安装pyinstaller 第二步:获取一个ico图标(也即是自己这个exe文件最后的图标) 第三步:打包 pip install pyinstaller 先从这里获取一个png图片:iconfont-阿里巴巴矢量图标库 再转化成ico图片(推荐256 x 256):PNG转ICO - 在线转换图标文件  可以把得到的ico图片放在pytho

    2024年02月09日
    浏览(37)
  • python项目打包成exe可执行文件(pyinstaller库)

    前言:才入职新公司;进来工作内容,就是将之前的python脚本项目打包成.exe可执行文件;一来方便不同岗位的同事之间使用,二来源码信息不会改动和泄漏。 正因为python具有丰富的第三方库,目前已有数万之多;这里用到的是 \\\'pyinstaller\\\'库; 正文: 两种情况: Ⅰ、单独一个

    2024年02月06日
    浏览(35)
  • 【Python打包成exe】快速将多个py文件及其他文件打包为exe可执行文件

    尝试了很多种Python打包为exe可执行文件的方式,通过总结,得出一种最简洁、最有效的打包方式分享给大家! 准备好将要打包的工程文件(夹) 如上图所示, 首先将主文件UI.py和文件夹./file放在一级文件夹./YW下方,如果有同级其他.py文件与UI.py放在同一级文件夹即可! 然后

    2024年01月21日
    浏览(34)
  • 【前端】关于如何将html、js、css等一个html网页打包成单一的exe可执行程序文件

    要将 HTML、JS、CSS 等一个 HTML 网页打包成单一的可执行程序文件(exe),通常需要使用一些工具和框架来实现的。 这里以Electron为例,详细说一下具体的打包过程 1.安装依赖: 确保已经安装了 Node.js。在命令行中进入你的项目目录,执行以下命令安装 Electron: 2.创建文件结构

    2024年02月11日
    浏览(40)
  • py2exe打包Python程序为Windows下的exe执行文件

    py2exe 是一个将 Python 脚本转换成 Windows 上可独立执行的**.exe 程序的工具,这样就可以在不用装Python解析器的情况下在 Windows**系统上运行这个可执行程序。 py2exe 已经被用于创建 wxPython 、 Tkinter 、 Pmw 、 PyGTK 、 pygame 、 win32com client和server ,和其它的独立程序。 py2exe 是发布在开

    2024年02月04日
    浏览(33)
  • nuitka打包python的PyQt5成exe可执行文件

    可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载 64位 winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14. 后,解压到

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包