将python打包为exe可执行文件—Pyinstaller工具

python是脚本语言,若是你在开发机器上执行固然会很方便,但是若是你帮他人写了个脚本,想在他人机器上运行,可能会遇到点困难。html

为了让脚本在他人机器上顺利执行,你首先要帮他安装python解释器,若是你import了一些库好比pandas,那这个也须要安装,甚至相关的依赖也须要安装。这个时间成本显然是很大的,这部分工做也很枯燥,甚至会影响工做积极性,所以花一点时间,学会如何将python脚本打包为.exe文件,无需再安装各类开发环境和依赖库,是一件一劳永逸的事情。python

如今,主流的工具备Pyinstaller、cz_Freeze、py2exe,本文只介绍Pyinstaller的使用。windows


准备工做

1.开发环境和工具:工具

  • python 3.7
  • Pyinstaller 3.4
  • windows 10
Pyinstaller能够支持Python 2.7 和3.4—3.7。*

2.要打包的文件myscript.py源码:ui

import pandas as pd

df = pd.read_excel('D:/account.xls')
result = dr.dropna()
result.to_excel('D:/result.xls')
该源码包含pandas, xlrd, xlwt等库

3.在windows上安装Pyinstaller.net

  • 根据Pyinstaller官方表述,在windows上安装Pyinstaller须要先安装pywin32 或 pypiwin32, 不然待会儿转换时,会提示没法找到win32com模块的错误,虽然报错缺win32com,但你要清楚缺的实际上是pywin32 或 pypiwin32。
  • 先用下面pip命令查看本身是否已安装该模块:
pip list
  • 若是没有找到,在pywin32下载地址下载对应版本的pywin32,或者直接用下面命令安装pypiwin32:
pip install pypiwin32
  • 最后安装Pyinstaller:
pip install pyinstaller

开始打包

  • 可使用下面命令打包
pyinstaller myscript.py

该命令执行后, pyinstaller会分析myscript.py文件,而且在脚本script.py所在文件夹中:命令行

  • 生成myscripy.spec
  • 建立文件夹build
  • 在build文件夹中生成日志文件和运行所需文件
  • 建立dist文件夹
  • 在dist文件夹中建立可执行文件夹myscript,在myscript文件夹中,就能够找到myscript.exe可执行文件
  • 上面命令生成了不少依赖文件,若是想打包为独立单一的.exe文件,使用-F参数
pyinstaller -F myscript.py
  • 默认生成的执行文件执行时,会弹出一个命令行的窗口,若是不须要弹出,能够再加个-w参数
pyinstaller -F -w myscript.py

遇到的问题

打包过程当中不免会遇到问题,通常都会遇到缺乏模块的问题,好比,在对myscript.py打包时会报错ModuleNotFoundError,缺乏xlrd, xlwt等模块,通常来讲能够按照下面三个步骤进行解决:
1.Pyinstalled会从本地的环境路径下找须要的模块,例如python的包都放在site-packages目录下,所以,Pyinstalled能够直接从该目录下获取须要的模块。若是本地也缺乏该模块,先经过pip命令安装。例如:日志

pip install xlrd
pip install xlwt

2.若是你须要的模块不在site-packages,而在你指定的目录下,那打包时你能够经过-P DIR参数指定,其中DIR为你须要的模块路径:excel

pyinstaller -F -w -p DIR myscript.py
-p命令容许指定多个模块路径,能够用 :分隔,或者屡次使用这个参数,像这样: pyinstaller -p DIR1:DIR2:DIR3 myscript.pypyinstaller -p DIR1 -p DIR2 -p DIR3 myscripy.py

3.有时候并非找不到模块,而是代码中有些模块是隐含导入的,这样的话就须要指出这些模块,才能正确的打包,能够在命令行打包时使用参数--hidden-import MODULENAME指定模块名,或者能够在打包后生成的myscript.spec文件中修改,该文件中有个参数hiddenimports=[]
配置为:code

hiddenimports=['cython','sklearn','sklearn.ensemble','sklearn.tree._utils','scipy._lib.messagestream']

而后再运行如下命令

pyinstaller myscript.spec

到此本片文章结束。

若是遇到什么问题,欢迎你们和我交流。若有不对之处,还望指正。

参考:

  1. https://pyinstaller.readthedo...
  2. https://blog.csdn.net/windows...
  3. https://zhuanlan.zhihu.com/p/...
  4. https://zhuanlan.zhihu.com/p/...
  5. https://www.jianshu.com/p/95c...
相关文章
相关标签/搜索