目录
一、Win7系统下报错
1. 问题描述
在win10系统中,pyinstaller打包.py文件成.exe文件时,到win7系统报错:
Error loading Python DLL xxx python39.dll
LoadLibrary:PyInstaller:FormatMessageW failed.
原因:Win7系统不支持Python3.9,需要对Python进行降级,最好是3.7及以下,3.8部分也可以
2. 尝试在Anaconda新建3.7虚拟环境:失败
我在Anaconda里面新建一个环境,指定Python版本是3.7
conda create -n hjw python=3.7
然而新建环境后,也把新环境路径添加到环境变量Path ,但是无论是在cmd还是conda 命令行,执行pyinstaller,还是无法在Win7系统运行打包好的exe文件。
核心原因:pyinstaller打包时,默认使用Anaconda的base环境的Python的.dll文件,因为我的base环境是Python3.9,所以一直是3.9,和创立新环境无关。
3. 解决方案
将base环境的Python版本降到3.7
conda install python==3.7 anaconda=custom
成功解决,现在Win10系统打包的exe是基于Python3.7的,成功在Win7系统下运行。
在download.py对应文件夹下,输入cmd打开命令行窗口,输入 ,产生的exe文件在dist(好像是)文件夹中
pyinstaller -F download.py
二、打包的exe文件过大
由于一般的cmd是在Anaconda的base环境下打包,因此会加进去很多本程序用不到的包,整体exe有300多M,非常不实用。解决方案:pipenv创建虚拟python环境
1. 安装pipenv
pip install pipenv
2. 在某个盘符下,创建一个新的文件夹,作为虚拟环境,进入该文件夹
3.安装Python
pipenv install --python 3.7 或者
pipenv --python 3.7
注意:这一步,很可能会用电脑中环境变量Path路径下的第一个python作为版本
但是我的电脑没有Python3.8,运行下面报错
D:\python3.8>pipenv install --python 3.8
Warning: Python 3.8 was not found on your system...
Neither 'pyenv' nor 'asdf' could be found to install Python.
You can specify specific versions of Python with:
$ pipenv --python path\to\python
原因是要想创建虚拟环境,必须再系统变量Path里面有python版本的.exe路径,即需要首先从Python官网下载对应版本的python,再创建python虚拟环境。
4. 在命令行激活该环境
pipenv shell
附:
删除虚拟环境:pipenv --rm
退出虚拟环境:exit
查看虚拟环境所在目录:pipenv --where
查看虚拟环境位置:pipenv --venv
5. 安装程序需要的包
pipenv install tqdm
pipenv install requests
pipenv install pyinstaller
6. 将.py文件移动到该文件夹下
在命令行cmd中,输入pipenv shell,激活环境,再运行
pyinstaller -F Download.py
附:anaconda删除环境注意事项
- 一般创建环境要指明python版本:conda create -n hjw python=3.7
- 退出环境:conda deactivate hjw
- 删除环境:conda remove -n hjw –all
注:删除环境后,输入conda env list里面没有了,但是在D:\Anaconda\envs路径下还是有hjw文件夹,但是里面内容很少,可以手动删除;注意,conda activate hjw还是可以进入到hjw下的,因为文件夹还留存着。所以必须要手动删除文件夹
- 在Anaconda Navigator中删除环境,和conda 命令行删除是一样的,都会有残留少许文件
附:命令行Python版本
和环境变量Path的位置有关:如Pytorch_1(3.10)在最上面,那么就是python3.10
如果hjw(3.7)在最上面,那么就是python3.7