【环境问题】Anaconda环境下使用pyinstaller封装exe

目录

一、Win7系统下报错

1. 问题描述

2. 尝试在Anaconda新建3.7虚拟环境:失败

3. 解决方案

二、打包的exe文件过大

附:anaconda删除环境注意事项

附:命令行Python版本


一、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

你可能感兴趣的:(python,开发语言)