欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在windows系统和ubantu系统下python打包成可执行程序

程序员文章站 2022-03-30 18:54:03
...

应公司要求,领导要对python程序进行打包处理。所以一场煎熬战无声打响,这个过程是最烦人,最没有人愿意干的(明知道是个坑,还得跳!!!!!!!!)。要求是ubantu系统下,但是我的电脑是windows,所以现在windows下小试牛刀。。。。。不说了,开始正题:

1.在windows系统下

准备工作:1.windows10系统

                  2.python3.5.x

前言:

将python脚本打包为可执行的exe文件是通常的需求,python也提供了许多的第三方库,比如:bbFreeze,py2ese,pyinstaller,cx_Freeze,py2app等等。它们都各自有优缺点,经过查询大量的文献,我最终选择了pyinstaller,因为它操作起来相对比较简单,而且有较好的支持。

这是一个来自Freezing Your Code的统计

在windows系统和ubantu系统下python打包成可执行程序

1.安装pyinstaller

方法一:离线安装

              先安装依赖库pywin32,然后下载pyinstaller,安装方法如下不推荐)。

方法二:在线安装

             (1)简单粗暴,什么也不用管。(注:下图的安装显示是我已经安装完的显示。。。。。。)

pip install pyinstaller

在windows系统和ubantu系统下python打包成可执行程序

 

          (2)检查是否安装成功

pyinstaller --version

在windows系统和ubantu系统下python打包成可执行程序

到此安装结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2.将我们想要打包的程序打包成.exe

(1)进入你要打包的python目录内

(2)将你要打包的程序完整以及程序的依赖文件放到一个新的文件夹内

(3)执行打包命令pyinstaller test.py 即可。

下面来进行一个简单的演示!!!!!!!!!!!!!!!!!!!!!!

我简单的写了一个测试文件pk_test.py.一个简单的hello,word!

在windows系统和ubantu系统下python打包成可执行程序

 

步骤一:进入你要打包的python目录内

在windows系统和ubantu系统下python打包成可执行程序

步骤二:将你要打包的程序完整以及程序的依赖文件放到一个新的文件夹内

注:比如需要pandas包,就将pandas放到pk_test.py的目录中。(注意!网上说如果不放的话可能出错,,但是我没有放也没有出错,,,,,,,,,,玄学!!!!!!!!!!!!!如果报错请检查是否是因为没有放依赖的原因)

在windows系统和ubantu系统下python打包成可执行程序

步骤三:执行打包命令pyinstaller test.py 即可。

在windows系统和ubantu系统下python打包成可执行程序

在windows系统和ubantu系统下python打包成可执行程序

执行完的结果如上图所示:会生成许多依赖的文件包,,,不关心它们,,,只需要dist文件夹即可!!!进入dist,会有一个pk_test文件夹(****我们所需要的,请一并拷走****,不然会报错),进入pk_test文件夹找到pk_test.exe双击即可!!

在windows系统和ubantu系统下python打包成可执行程序

关键来了!!!!我双击pk_test.exe屏幕一闪而过!!!!然后就没有然后了!!!!!!!于是,我在命令窗口中运行,,,,,,

在windows系统和ubantu系统下python打包成可执行程序

顿时我哭了,什么鬼!!然后接着查,,,,,,,,,,,,,,最后发现!应该和C++程序闪是一个道理!!于是,我又做了一番修正,,,然后编译打包,,,,(没有闪退!!!!!!!!)

在windows系统和ubantu系统下python打包成可执行程序

修改如下:

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')

在windows系统和ubantu系统下python打包成可执行程序

完美!!!!!!!!!!!!等等。。。。。。。后面怎么有烦人的黑窗口。。。(接下来!!!!!)

4.打包命令的小操作。

在cmd窗口键入:pyinstaller -h就会出现pyinstaller的所用帮助说明。

在windows系统和ubantu系统下python打包成可执行程序

在windows系统和ubantu系统下python打包成可执行程序

pyinstaller -w -F pk_test.py

 

5.带第三放库以及读取文件的测试

第三方库选择pandas和tensorflow,以及pandans需要用到的.csv文件。

准备:按照上述方法,将主函数test.py,以及数据文件夹data放到一个文夹中,执行打包命令。(没有放pandans和tensflow安装包)

在windows系统和ubantu系统下python打包成可执行程序

运行:发现报错,提示没有找到pandas._lilbs.tslibs.np_datetime。难道是因为我没有把pandans放进去?于是,接着测试。

在windows系统和ubantu系统下python打包成可执行程序

也没有什么用,应该不是这个问题,于是又是一番百度。终于找到了一种解决办法!

解决办法:1.找到自己电脑中的D:\python3.5\Lib\site-packages\PyInstaller\hooks目录

在windows系统和ubantu系统下python打包成可执行程序

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']

测试!!!!!!!!!!!!!!!!!!!!又发现新的报错。

在windows系统和ubantu系统下python打包成可执行程序

打包完成!!!!(而且pandas和tensorflow也自动打进去了)。

在windows系统和ubantu系统下python打包成可执行程序

(注:在打包过程中也可能出现其他的报错!目前我没有遇到,如果遇到,大家尝试解决!)

2.在ubantu系统中

准备工作:1.ubantu16.04

                    2.python3.5.x

                    3.pip

在ubantu系统中,使用python对.py文件打包成可执行程序与在windows下基本上没有什么区别,最主要的区别就是Linux命令的使用。下面就简单的演示一****:我使用的是pip安装,习惯了)

1.安装

(1)首先获取root权限使用sudo -i 命,令,输入密码,获取权限(当然也可以在执行命令前加sudo)

在windows系统和ubantu系统下python打包成可执行程序

(2)使用pip3 install pyinstaller 进行安装pyinstaller。(我的是python3所以用pip3)(原版本已经安装完成!!故此显示)

在windows系统和ubantu系统下python打包成可执行程序

(3)检查是否安装成功

在windows系统和ubantu系统下python打包成可执行程序

2.测试

测试跟windows一样,(ubantu系统没有闪退问题)就不多写了。现测试一个python写的函数库调用,看能否打包成功。

准备:主文件test.py,调用文件hello.py。

在windows系统和ubantu系统下python打包成可执行程序

打包:(1)按照官方文档对多个文件打包要执行多文件命令(结果和windows一样)

在windows系统和ubantu系统下python打包成可执行程序

(2)找到dist文件夹下的test文件夹,执行test

在windows系统和ubantu系统下python打包成可执行程序

根据结果来看,不管是主文件test.py,还是调用文件hello.py都执行成功。

注:我又测试了一下将test.py ,hello.py放到一个文件夹中,只打包test.py发现也能运行;然后将hello.py删掉,然后再打包,打包失败。

(注:在打包过程中也可能出现其他的报错!目前我没有遇到,如果遇到,大家尝试解决!)

还有就是,如何打包二进制文件,如何更换图标,如何在打包过程中如何新建文件夹以及子目录,等等

具体其他的命令可以通过官方文档查阅!