打包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也无法成功运行的,到时候给了同事没法用就尴尬了。
打包python脚本的血与泪相关推荐
- python 打包exe_打包python脚本为exe的坎坷经历, by pyinstaller方法
打包python脚本为exe的坎坷经历, by pyinstaller方法 又应验了那句歌词. 不经历风雨, 怎么见得了彩虹. 安装过程略去不提, 仅提示: pip install pyinstall ...
- python打包脚本_py2exe打包python脚本
在工作中遇到将python脚本转换成exe可执行程序的需求,通过查询可以使用py2exe来构建满足要求的程序,这里简要说明一下使用步骤. 一.py2exe是一个将python脚本转换成windows上 ...
- 使用py2exe打包python脚本为exe可执行程序
2019独角兽企业重金招聘Python工程师标准>>> python为解释性语言,对应的脚本文件需要在python的程序库中执行.为了方便在没有安装python的PC机上运行pyth ...
- 将python脚本打包为exe可执行文件
技术背景 在很多情况下,编程人员是在Linux环境下完成的编程任务,但是更多的使用人员是在Windows环境下的,比方说,在参考链接1的文章中提到: 那么我们就不得不考虑一个环境转化的问题.pytho ...
- 【Python实用技巧】如何将Python脚本打包成exe可执行文件?
相信大家也有过这样的困惑,本来已经使用Python写好了脚本代码,又不想公开代码逻辑,但又要给别人使用这些功能? 这可怎么办呢? 有没有什么办法,可以将Python脚本打包成一个exe文件,这样发布的 ...
- python 没反应 生成exe_通过 pyinstaller 将 python 脚本打包成可执行程序!
1. 引言 很多时候,我们需要在 windows 环境编写和执行 python 脚本,但是去搭建一整套 python 运行环境看上去就过于繁琐了,即便是拥有 python 运行环境,脚本的执行也并不方 ...
- PyInstaller将python脚本打包成exe可执行程序
一.PyInstaller说明 pyinstaller是一个第三方模块,托管在github上,它是一个把python脚本及其依赖的模块,打包成一个独立的可执行程序,使其能运行在没有安装python环境 ...
- Python脚本打包成exe文件
打包工具有很多,这里使用pyinstaller 安装Pyinstaller 打开cmd,输入: pip install pyinstaller 安装完成后,检查安装是否成功: pyinstaller ...
- 将Python脚本打包成可执行文件
Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安 ...
最新文章
- 科学家认为“人脑+AI”至少有三大尺度:最低级是脑启发,最高级是创造机器意识...
- c++入门之运算符重载
- Android之UI控件
- 用神经网络二分类人脑与电脑
- oracle_j000,Process J000 died, kkjcre1p: unable to spawn jobq slave process引起的宕机
- 用SAP BSP应用实现图片灰度效果
- 使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry
- Java形参的改变不会影响实参
- wordpress 301重定向 htaccess
- java商城项目中多线程执行_java多线程中执行多个程序的实例分析
- All Friends 极大团
- 设计模式-17-迭代器
- Encoding非常用编码转换
- perl:非贪婪的数量词
- android使用cpu软解,Android 使用自带的MediaCodec 框架进行本地视频压缩,速度嗖嗖的,亲测有效!!!...
- web前端入门到实战:CSS box-sizing属性的正确用法
- oracle expdp作业外表报错ORA-20011KUP-11024ORA-29913
- 使用select2 实现拼音全拼和首字母 搜索
- lch 儿童围棋课堂 初级篇1 ( (李昌镐 著))
- 8道C语言笔试题及答案(2022发布)
热门文章
- Pytorch中contiguous()函数理解
- Docker Swarm 网络
- 统计当前代码量(以十万为标准)
- Z-File 开源免费自建个人网盘程序 Java/支持云存储
- 计算机学硕保博有必要读吗,学硕的直博或者保博是不是只能上本校的博士。如果这个学校没有博士点那是不是这个学校的学硕就不值得报了...
- 床垫上面直接铺床单吗
- java学习代码02 范围:方法、方法递归、面向对象、static和this关键字、多态
- 汽车三滤是什么 汽车三滤的使用注意事项
- 技术学习之路漫漫其修远兮,奋力勤学吾辈将上下而求索
- 让我知道生活如何教我做人