在windows系统和ubantu系统下python打包成可执行程序
应公司要求,领导要对python程序进行打包处理。所以一场煎熬战无声打响,这个过程是最烦人,最没有人愿意干的(明知道是个坑,还得跳!!!!!!!!)。要求是ubantu系统下,但是我的电脑是windows,所以现在windows下小试牛刀。。。。。不说了,开始正题:
1.在windows系统下
准备工作:1.windows10系统
2.python3.5.x
前言:
将python脚本打包为可执行的exe文件是通常的需求,python也提供了许多的第三方库,比如:bbFreeze,py2ese,pyinstaller,cx_Freeze,py2app等等。它们都各自有优缺点,经过查询大量的文献,我最终选择了pyinstaller,因为它操作起来相对比较简单,而且有较好的支持。
1.安装pyinstaller
方法一:离线安装
先安装依赖库pywin32,然后下载pyinstaller,安装方法如下(不推荐)。
方法二:在线安装
(1)简单粗暴,什么也不用管。(注:下图的安装显示是我已经安装完的显示。。。。。。)
pip install pyinstaller
(2)检查是否安装成功
pyinstaller --version
到此安装结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2.将我们想要打包的程序打包成.exe
(1)进入你要打包的python目录内
(2)将你要打包的程序完整以及程序的依赖文件放到一个新的文件夹内
(3)执行打包命令pyinstaller test.py 即可。
下面来进行一个简单的演示!!!!!!!!!!!!!!!!!!!!!!
我简单的写了一个测试文件pk_test.py.一个简单的hello,word!
步骤一:进入你要打包的python目录内
步骤二:将你要打包的程序完整以及程序的依赖文件放到一个新的文件夹内
注:比如需要pandas包,就将pandas放到pk_test.py的目录中。(注意!网上说如果不放的话可能出错,,但是我没有放也没有出错,,,,,,,,,,玄学!!!!!!!!!!!!!如果报错请检查是否是因为没有放依赖的原因)
步骤三:执行打包命令pyinstaller test.py 即可。
执行完的结果如上图所示:会生成许多依赖的文件包,,,不关心它们,,,只需要dist文件夹即可!!!进入dist,会有一个pk_test文件夹(****我们所需要的,请一并拷走****,不然会报错),进入pk_test文件夹找到pk_test.exe双击即可!!
关键来了!!!!我双击pk_test.exe屏幕一闪而过!!!!然后就没有然后了!!!!!!!于是,我在命令窗口中运行,,,,,,
顿时我哭了,什么鬼!!然后接着查,,,,,,,,,,,,,,最后发现!应该和C++程序闪是一个道理!!于是,我又做了一番修正,,,然后编译打包,,,,(没有闪退!!!!!!!!)
修改如下:
import os
print('hello word!')
os.system('pause')
到此,简单的打包已经结束!!!!!!!!!!!!!!!!!!!!!!!
3.测试一下稍复杂的程序
#!/usr/bin/env python
# encoding: utf-8
'''
@author: 真梦行路
@file: pk_test.py
@time: 2018/8/10 10:16
'''
import os
import numpy as np
import matplotlib.pyplot as plt
x=np.random.rand(100)
y=np.sin(x)
plt.figure()
plt.plot(x)
plt.show()
os.system('pause')
完美!!!!!!!!!!!!等等。。。。。。。后面怎么有烦人的黑窗口。。。(接下来!!!!!)
4.打包命令的小操作。
在cmd窗口键入:pyinstaller -h就会出现pyinstaller的所用帮助说明。
pyinstaller -w -F pk_test.py
5.带第三放库以及读取文件的测试
第三方库选择pandas和tensorflow,以及pandans需要用到的.csv文件。
准备:按照上述方法,将主函数test.py,以及数据文件夹data放到一个文夹中,执行打包命令。(没有放pandans和tensflow安装包)
运行:发现报错,提示没有找到pandas._lilbs.tslibs.np_datetime。难道是因为我没有把pandans放进去?于是,接着测试。
也没有什么用,应该不是这个问题,于是又是一番百度。终于找到了一种解决办法!
解决办法:1.找到自己电脑中的D:\python3.5\Lib\site-packages\PyInstaller\hooks目录
2.新建一个文件名为hook-pandas.py,写入以下内容并保存。
#!/usr/bin/env python
# encoding: utf-8
'''
@author: 真梦行路
@file: hook-pandas.py
@time: 2018/8/10 13:03
'''
hiddenimports = ['pandas._libs.tslibs.timedeltas',
'pandas._libs.tslibs.nattype',
'pandas._libs.tslibs.np_datetime',
'pandas._libs.skiplist']
测试!!!!!!!!!!!!!!!!!!!!又发现新的报错。
打包完成!!!!(而且pandas和tensorflow也自动打进去了)。
(注:在打包过程中也可能出现其他的报错!目前我没有遇到,如果遇到,大家尝试解决!)
2.在ubantu系统中
准备工作:1.ubantu16.04
2.python3.5.x
3.pip
在ubantu系统中,使用python对.py文件打包成可执行程序与在windows下基本上没有什么区别,最主要的区别就是Linux命令的使用。下面就简单的演示一****:我使用的是pip安装,习惯了)
1.安装
(1)首先获取root权限使用sudo -i 命,令,输入密码,获取权限(当然也可以在执行命令前加sudo)
(2)使用pip3 install pyinstaller 进行安装pyinstaller。(我的是python3所以用pip3)(原版本已经安装完成!!故此显示)
(3)检查是否安装成功
2.测试
测试跟windows一样,(ubantu系统没有闪退问题)就不多写了。现测试一个python写的函数库调用,看能否打包成功。
准备:主文件test.py,调用文件hello.py。
打包:(1)按照官方文档对多个文件打包要执行多文件命令(结果和windows一样)
(2)找到dist文件夹下的test文件夹,执行test
根据结果来看,不管是主文件test.py,还是调用文件hello.py都执行成功。
注:我又测试了一下将test.py ,hello.py放到一个文件夹中,只打包test.py发现也能运行;然后将hello.py删掉,然后再打包,打包失败。
(注:在打包过程中也可能出现其他的报错!目前我没有遇到,如果遇到,大家尝试解决!)
还有就是,如何打包二进制文件,如何更换图标,如何在打包过程中如何新建文件夹以及子目录,等等
具体其他的命令可以通过官方文档查阅!