virtualenv + pyinstaller 将python程序打包成.exe文件(Windows系统)
一、virtualenv
virtualenv用于创建一个虚拟的python环境,用于解决python环境中安装的包过多,存在冲突的问题
1、virtualenv安装
pip install virtualenv
可使用 virtualenv --version 查看安装情况
2、virturalenv基本使用
打开命令行窗口(win+R ->cmd),切换到想要创建虚拟环境的目录下(例如:cd xxx)
(1)创建虚拟环境:
virtualenv pyenv
pyenv即虚拟环境所在的文件夹,可自行定义其名称
(2)激活虚拟环境
cd pyenv/Scripts 切换到虚拟环境的Scripts目录
activate 执行activate命令激活当前虚拟环境
(3)退出当前虚拟环境
deactivate
二、pyinstaller
1、安装pyinstaller
pip install pyinstaller
2、pyinstaller 基本使用
命令语法:pyinstaller -选项 python源文件/目录
打包后的exe文件存放在生成的dist文件夹中
三、virturalenv + pyinstaller最小化打包python程序
基本流程
- virtualenv envname #创建新的虚拟环境
- cd envname # 进入虚拟环境目录
- cd Scripts # 进入虚拟环境的Scripts文件夹中
- activate # 激活虚拟环境
- pip install pyinstaller # 安装打包工具pyinstaller
- pip install pypiwin32 # 安装打包工具相关依赖
- pip install python-packages # 安装python程序中需要引入的外部包
- 将需要打包的python文件或文件夹复制到Scripts目录中(该步骤也可以不用执行)
- pyinstaller -F py文件路径
- 切换到Scripts目录下,执行deactivate,取消激活虚拟环境
- 打包结束,exe文件存放在dist文件夹中
四、pyinstaller打包xgboost存在的一些问题
由于打包的程序中引用了xgboost模块,打包成功后运行exe文件时,界面一闪而过,通过命令行运行该程序,报错如下
xgboost.libpath.XGBoostLibraryNotFound: Cannot find XGBoost Library in the candidate path
对此在网上搜索了一些方法,如下介绍本人解决问题的一种方法:
(1)在GitHub上下载xgbbost源码
https://github.com/dmlc/xgboost
(2)将源码文件中python-package中的xgboost文件夹复制到你自己的python项目中
(3)下载xgboost.dll
通过官方网站下载时网页无法访问,故在此通过本人百度网盘分享该文件。
链接:https://pan.baidu.com/s/1zkvTFe-Jt5K2cv96etwLIQ
提取码:w9tz
下载好了之后,将该文件复制到(2)中的xgboost文件夹中
(4)使用pyinstaller打包时,在命令结尾加上
--add-data=xgboost;xgboost
后期发现这个方法在使用的时候还是会出现问题,可以尝试用-D参数打包成文件夹,然后把xgboost源码文件复制到生成的exe文件所在的文件夹中
或者直接用下面的命令,不过xgboost源码文件夹要在当前命令目录下
pyinstaller -D main.py --add-data=xgboost;xgboost