python虚拟环境virtualenv和conda

本文最后更新于 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