使用pyinstaller打包python程序

使用python3.7+anaconda环境编写了个程序,里面使用了numpy pandas xgboost等包
想用pyinstaller打包成exe,pip install pyinstaller后无法打包成exe文件

别人说是pyinstaller不兼容python3.7

遂安装py3.6环境,试图隔离不需要的包安装,失败。只好安装venv:

pip install virtualenv 

,命名此环境为venv1,什么包都没有
参考 https://blog.csdn.net/wskzgz/article/details/88993910

cmd(管理员)进入 \venv1\venv\Scripts\ 文件夹后输入activate,激活环境,此时提示符前会有(venv)字样

pip install 需要的包,只安装需要的包,这样可以减小打包后程序大小,并防止奇奇怪怪的错误

还是这个venv环境,安装好后cd进入python程序所在的路径:

pyinstaller -D ***.py

打包出exe文件了!在打包文件夹的dist文件夹里,命令行cd到exe文件所在路径后运行,出错,提示distutils模块出错,

ModuleNotFoundError: No module named 'distutils'
[10373] Failed to execute script <name here>

但distutils是python自带的模块,所以不是包没装全的问题,找到如下方法:

# work-around for https://github.com/pyinstaller/pyinstaller/issues/4064
import distutils
if distutils.distutils_path.endswith('__init__.py'):
    distutils.distutils_path = os.path.dirname(distutils.distutils_path)

将以上代码贴入打包exe时生成的 *.spec文件开头,清理build目录重新生成exe文件就可以了。生成方法:

pyinstaller -D ***.spec 

pyinstaller又会像刚才一样在打包一次,期间会问你此操作会删除dist文件夹全部的文件要继续吗,摁y继续,然后就又生成了一个exe文件,还在dist文件夹里。

命令行cd到exe文件所在路径后运行,出错,提示缺少xgboost的dll。解决办法:打开venv所在的*\venv1\venv\Lib\site-packages\xgboost*,发现里面确实没有dll,可以从网上找xgboost.dll文件放里面,如下图。我从网上找的都不行,从虚拟环境外面的anaconda文件夹里找到了,复制粘贴到下图所在的文件夹。
在这里插入图片描述
然后把整个文件夹扔到打包出的exe文件所在同目录下。不用再打包一遍了,直接cmd里运行,成功。
在这里插入图片描述

##########################分割线#################################
转天打包另一个文件,有了一些新问题
这次没在venv里打包,直接在3.6&anaconda环境里打包成功了
生成exe后运行,抛出错误 ModuleNotFoundError: No module named 'typedefs‘
查阅得此文章 https://blog.csdn.net/qq_36698385/article/details/99608354
基本情况差不多,稍微有点区别
在打包过程中生成的xxx.spec文件中(xxx是自己打包时的py文件名)的第二行添加如下两行代码:

import sys
sys.setrecursionlimit(5000)

然后再输入命令 pyinstaller xxx.spec --hidden-import sklearn.neighbors.typedefs,进行打包
成功

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值