本文最后更新于 2023年11月23日。
conda activate env_openpyxl
pyinstaller -F -w .\ChgFilesnameInFoder_230129.py
如果不先激活需要的虚拟环境,会默认在base环境中打包,可能报错
win32ctypes.pywin32.pywintypes.error: (5, 'EndUpdateResource', '拒绝访问。')
自从使用anaconda后python程序用pyinstaller打包之后体积都在两百兆以上。即使使用虚拟环境也不行。
经多长时间探索,终于在双十一当天找到了解决办法。
一是使用conda的方法
首先使用conda创建虚拟环境
conda create -n env_pandas
激活虚拟环境
conda activate env_pandas
用conda在虚拟环境中安装pip,这一步很重要,项目需要什么库都用pip安装,避免conda安装一些不需要的包
conda install pip
用pip安装pyinstaller,用于打包程序
pip install pyinstaller
pip安装项目依赖的pandas
pip install pandas
pip安装项目依赖的openpyxl
pip install openpyxl
使用pyinstaller打包
pyinstaller -F -w .\RttfCal_221104.py
到这里就全部完成了,对于有pandas库的项目打包,我用这种方法打包出来30M,而用conda安装第三方库的时候打包出来300M还多。
需要注意的是创建虚拟环境之后要激活,这样下面的操作才是在虚拟环境中进行。
另一种方法是使用virtualenv。
二是使用virtualenv
首先进入目标文件夹
cd E:\virtualenv
创建虚拟环境
virtualenv venv1
这里会新建venv1
文件夹
进入虚拟空间文件夹
cd venv1
激活虚拟环境,先进入虚拟空间
.\Scripts\activate
查看已经安装的东西
(base) (venv1) PS E:\pipenv1\venv1> pip list
Package Version
---------- -------
pip 22.3
setuptools 65.5.0
wheel 0.37.1
退出虚拟环境
deactivate
virtualenv虚拟环境默认安装pip
如果在虚拟环境中不安装pyinstaller,在打包时会默认使用base环境的pyinstaller,打包文件还是很大。
安装pyinstaller后会优先使用虚拟环境中的pyinstaller,打包后程序体积会减小。
探索过程
新建虚拟环境后用pip去安装第三方库。
打包的时候要在命令行中切换到目标虚拟环境中,在虚拟环境中安装pyinstaller,不然会调用base环境中的installer,打包出来还是会将base中的库都打包进去。
~~anaconda的虚拟环境对pyinstaller不起作用,打包后文件会很大。
~~anaconda虚拟环境对pyinstaller有用。
并且发现用管理员模式创建虚拟环境文件夹在C:\ProgramData\Anaconda3\envs
非管理员创建的在用户文件夹的C:\Users\weiyo\.conda\envs
中
pyinstaller打包大小和环境好像关系不大。
找到打包出来体积大的原因了,我的rttfcal程序以前打包出来10M,后来打包350M,刚好这期间我从pip转到了anaconda,因此我以为是anaconda的环境中安装的包太多导致的。
今天对比发现是因为后面这个程序导入了pandas和openpyxl包导致体积剧增。
通过paracheck的打包对比发现和anaconda的环境有关
paracheck程序在没有pandas,没有openpyxl的环境中打包10.1M
安装pandas后再打包就变成247M了,看来主要是pandas包占空间。
conda在安装pandas的时候也会安装numpy,MKL等。其中MKL的下载体积就有115M。
所以计划在笔记本上还是用python+pip的形式,conda太占空间了。
anaconda虚拟环境管理
**conda创建新环境
conda create -n tf
# To activate this environment, use
#
# $ conda activate tf
#
# To deactivate an active environment, use
#
# $ conda deactivate
conda安装Python包是总是要提示输入y确认安装,这个操作如果觉得麻烦,可以使用如下方式解决:
conda install sth_name -y
或者
conda install package --yes
**conda添加清华源
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
conda config –set show_channel_urls yes
环境降低python版本的时候直接运行conda install python=3.9,版本号根据自己的需要来。
可能不止是安装这个绘图包会遇到冲突问题吧,记录一下解决方法:
使用指令conda-forge,安装matplotlib,解决了冲突问题
conda install -c conda-forge matplotlib
anaconda安装sklearn
conda install scikit-learn
conda查看虚拟环境
conda env list或conda info -e确认当前存在什么虚拟环境
conda移除虚拟环境
conda env remove -n env1