> 文章列表 > TensorFlow虚拟环境安装/pip install 与 conda install区别/jupyter kernel的添加与删除

TensorFlow虚拟环境安装/pip install 与 conda install区别/jupyter kernel的添加与删除

TensorFlow虚拟环境安装/pip install 与 conda install区别/jupyter kernel的添加与删除

起因

我自己的TensorFlow是gpu2.4版本的,用lstm模型训练几千个样本,每个epoch要90多秒,太慢。
看了下朋友的,她的只要加上一句

os.environ['CUDA_VISIBLE_DEVICES'] = '0'

这个就可以gpu加速,但我的不行。一看,她的是TensorFlow-gpu2.6版本,于是我也搞了个tf2.6虚拟环境,用来装2.6版本的gpu TensorFlow。
创建虚拟环境的过程想必大家都很熟

conda create env --name tf2.6#(base环境)
activate tf2.6#(base环境)
pip install tensorflow-gpu==2.6.0#(tf2.6环境)
#将新建的tf2.6环境加入到jupyter的kernel里
pip install ipykernel#(tf2.6环境)
python -m ipykernel install --name=tf-kernel(这个名字与虚拟环境的名字可以不一样)#(tf2.6环境)
#删除无用的kernel
jupyter kernelspec list#(base环境)
jupyter kernelspec remove kernel_name#(base环境)
#删除无用的虚拟环境
conda env list
conda env remove --name env_name

一口气把相关会用到的命令全写上了,有需要直接复制。
但是我创建完发现anaconda/env/tf2.6只有一个conda-meta文件夹,而且这个文件夹里只有一个history文件。
所以哪些安装的包(pip install tensorflow)去哪了?
先搁下这个疑问,我在tf2.6中进入python环境import tensorflow
又是一连串的报错
鬼使神差地,我看到报错提醒里有pip 版本过低的提醒,于是升级了pip

pip install --upgrade pip

但还是该报错的报错,anaconda/env/tf2.6下仍然只有一个文件

虚拟环境中通过pip install安装的包究竟到哪去了?

通过不断地尝试和搜索,发现conda create env --name env_name时如果不指定python,那么pip install的包会放在
C:\\Users\\username\\AppData\\Roaming\\Python\\Python38\\site-packages这个文件夹里,因为conda create env --name env_name创建的虚拟环境中的python是系统的python。
conda create env --name env_name python=3.8,如果后面指定一个python,则这个虚拟环境中的python是conda新安装的,通过pip install安装的包也会在Anaconda3\\envs\\tf\\Lib\\site-packages这个文件夹下。

参考:pip install 和conda install的区别
(这个发布有问题,每次编辑的时候这个链接都能看到,但是发布完预览这个网页链接就变成了文字,我真的服。)
(参考博客链接:pip install和conda install区别
点不开的话直接复制这个网址https://www.zhihu.com/question/395145313/answer/2449421755

!值得注意的是,有时候报错的提醒里有叫你加上install的加上–user
以一个简单的轻量级的不依赖其他库的包simple-calc为例。
如果在虚拟环境中conda install simple-calc,那么这个包会放在Anaconda3\\pkgs。
如果在虚拟环境中pip install simple-calc,那么这个包会放在Anaconda3\\envs\\tf\\Lib\\site-packages。
如果在虚拟环境中pip install --user simple-calc,那么这个包会放在C:\\Users\\username\\AppData\\Roaming\\Python\\Python38\\site-packages。
当你pip list时,那些包有些是在Anaconda3\\envs\\tf\\Lib\\site-packages,有些是在C:\\Users\\username\\AppData\\Roaming\\Python\\Python38\\site-packages,所以有时候会看见某个库有两个版本同时存在,这样也会造成很多包的不兼容。
实在是debug de烦了,我直接把AppData\\Roaming\\Python\\Python38\\site-packages这个目录下的包全都删了,然后删除那些有内在版本冲突的虚拟环境,新建了一个tf环境,安装的时候只用pip install,绝对不加–user。

tf-gpu安装问题

我当时一股脑去下载tensorflow-gpu2.6版本,完全忘记了tensorflow-gpu对cuda和cudnn版本的要求。
因为我之前是下载过tensorflow-gpu2.4版本的,因此电脑离的cuda和cudnn版本只能支持tensorflow-gpu2.4,就算安装了2.6版本也用不了。
经过这么一番折腾,我不仅没用用上gpu加速,反而把原来的环境搞得一团糟,连import tensorflow as tf 都一直报错。
把AppData\\Roaming\\Python\\Python38\\site-packages这个目录下的包全删了之后,新建了一个tensorflow-gpu2.4环境。
在这个环境里

pip install tensorflow-gpu==2.4.0
#进入python
python
import tensorflow as tf
成功
print(tf.test.is_built_with_cuda())  # 检查是否使用CUDA
true
print(tf.config.list_physical_devices('GPU'))
返回设备名

这一切都说明我花费两三天终于把新环境搭建好了
但是!还没投入使用,新问题又来了
因为我要训练的data是csv文件,所以我安装了pandas
但是pandas和tensorflow对numpy的版本都有要求,并且要求刚好有冲突。
pandas要求numpy大于等于1.20.3
tensorflow要求numpy=1.19.2
这样一来,怎么都没法构建和谐的环境。
突然,我想到了加–user可以把包放在c盘的AppData\\Roaming\\Python\\Python38\\site-packages里,并且这个路径下的包虚拟环境也是可以用的。
那这样是不是可以install两个numpy?
于是我在虚拟环境中

pip install numpy==1.19.2

ok,import tensorflow成功,利用tensorflow新建lstm模型也成功。但是import pandas报错。
接下来,在虚拟环境中

pip install --user numpy==1.20.3

这时我发现AppData\\Roaming\\Python\\Python38\\site-packages文件里多出了两个numpy文件夹。
再import pandas,成功。
import tensorflow,成功。
终于,环境大和谐!!