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

方法 专栏收录该内容
3 篇文章 0 订阅

应公司要求,领导要对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的统计

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删掉,然后再打包,打包失败。

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

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

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

 

  • 6
    点赞
  • 6
    评论
  • 43
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值