打包python脚本的血与泪

解决Python脚本打包遇到的各种问题

故事背景

某日隔壁部门同事请领导帮忙写个脚本,能够完成excel上的高重复度繁复的工作。
领导随手交给我,“这个东西简单的,日天你去做吧”
正在b站摸鱼的我:

行吧这还能不干吗,还好不难
花了一上午完成脚本,忽然想到,糟了,怕不是中了圈套了,还要负责教会没有编程基础的同事怎么使用,不过机智如我立即想到了解决方案——封装成exe

通过百度得悉,常用python封装不过py2exe、PyInstaller、cx_Freeze等工具,最后确定使用 PyInstaller ,毕竟教程多,教程少我怕根本学不会……

以下开始花里胡哨的错误操作

那么开始了
首先当然是安装
进入cmd命令行

pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

这一步的目的是防止出现国外源下载慢或者无法下载

若出现pip不是内部命令之类的,需要手动配置一下环境变量,可自行百度

接下来输入pyinstaller,若出现相关信息则安装成功。
若成功则可直接通过以下pyinstaller指令完成封装
至此,任务完成!

# 打包成一个文件
pyinstaller -F test.py
# 打包成文件夹(默认)
pyinstaller test.py

要是能那么简单就好了……大多数人在这一步都是要爆炸的
常见问题可概括为以下两种:

  • 封装过程中出现错误,显示各种importerror
  • 封装正常完成,但是双击后没有运行

我遇到的情况是importerror:unable to import required ……

在百度上得到的解决方案是,降级适应大法:给numpy降级,降级到1.16.1版本

pip uninstall numpy
pip install numpy==1.16.2

以及另一种解决方案,缺啥补啥大法:既然你import不了,大爷我给你人为在脚本内引入

import numpy.random.common
import numpy.random.bounded_integers
import numpy.random.entropy

我很负责任地告诉你,这两种方法除了让你有一种“本宝宝一下午都在忙碌”的充实感外,毫无作用!
而后我手贱又封装了一次,发现出现了截然不同的错误……

至此,卒

遂尝试第二个包,cx_Freeze
同样pip安装后,封装。
这玩意儿不仅时间长,封装后还特别大
但是!没有报错了!
成功封装了!
然而双击无反应……
通过命令行得知,仍然是numpy的问题

百度后又发现一种解决方案
安装python拓展库numpy-mkl
然而该网站下载速度感人,20min后,12M/200M
心态爆炸

认怂,询问公司大佬

正确方法

大佬审题30s后表示可能是因为版本冲突或者某些包不兼容的原因。
五分钟后大佬发来了封装好的exe,并且告诉我
“我帮你封装好了,顺便帮你改善了一下你脚本里的一些逻辑问题”

虚心请教以后,方法如下:
原理:通过python虚拟环境来配置一个干净的环境,里面没有各种乱七八糟的包,这样不容易出现版本问题。
第一步安装

virtualenv --version #若已安装,查看版本
pip install virtualenv==16.1  # 安装指定版本的virtualenv

若已安装,查看版本号若是16.4,则最好pip uninstall掉,否则容易出现
ModuleNotFoundError: No module named ‘distutils’
(此处又是一个坑,原因是在“加载模块挂钩”序列期间,hook-distutils.py缺少并且distutils模块不包含在最终的可执行二进制文件中。因此最好使用16.1版本)

virtualenv --no-site-packages myenv

通过以上命令行建立名字为myenv的虚拟环境(文件夹),注意,请在想放置的目录下执行该操作。
通过参数 --no-site-packages,就可以得到一个不带任何第三方包的干净的python运行环境。
随后可以在pycharm中直接open这个文件夹,并在终端中cd进入Script文件夹,执行activate操作,命令提示符就变了,会有(myenv)的前缀,表示当前环境是一个名为myenv的python环境。
接着就可以装需要的包以及试运行一下脚本了。
无误后,终端输入

pyinstaller -F xxxx.py #xxxx是你的要封装的脚本

在终端中运行一下无误!
完美!

记得一定要在封装后自己试运行一下,有时候出exe也无法成功运行的,到时候给了同事没法用就尴尬了。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值