1. 查看Anaconda中的所有虚拟环境
2. 创建和移除Anaconda虚拟环境
3. 克隆Anaconda虚拟环境
方式1:使用yml文件
方式2:使用--clone命令行参数克隆虚拟环境
4. 安装和移除TensorFlow2.x
5. 安装和移除TensorFlow1.x
6. 在PyCharm中切换TensorFlow1和TensorFlow2
TensorFlow是Google推出的深度学习框架,也是使用最广泛的深度学习框架。目前最新的TensorFlow版本是2.1。可能有很多同学想跃跃欲试安装TensorFlow2,不过安装完才发现,TensorFlow2与TensorFlow1的差别非常大,基本上是不兼容的。也就是说,基于TensorFlow1的代码不能直接在TensorFlow2上运行,当然,一种方法是将基于TensorFlow1的代码转换为基于TensorFlow2的代码,尽管Google提供了转换工具,但并不保证能100%转换成功,可能会有一些瑕疵,而且转换完仍然需要进行测试,才能保证原来的代码在TensorFlow2上正确运行,不仅麻烦,而且非常费时费力。所以大多数同学会采用第二种方式:在机器上同时安装TensorFlow1和TensorFlow2。这样以来,运行以前的代码,就切换回TensorFlow1,想尝鲜TensorFlow2,再切换到TensorFlow2。那么具体如何做才能达到我们的目的呢?本文将详细讲解如何通过命令行的方式和PyCharm中安装多个Python环境来运行各个版本TensorFlow程序的方法。
不管安装哪一个版本的TensorFlow,都需要Python环境。推荐安装Anaconda环境,因为Anaconda环境不仅包含了Python运行环境,还包含了很多常用的Python库。如numpy、pandas等。不过Anaconda本身并不包含TensorFlow。Anaconda环境除了附带了众多Python库外,还支持多个虚拟环境,这这是TensorFlow1.x和TensorFlow2.x共存的关键。
读者可以到下面的页面下载与您使用的平台对应的Anaconda版本,然后直接安装即可。
https://www.anaconda.com/distribution/
1. 查看Anaconda中的所有虚拟环境
由于在机器上安装多个TensorFlow环境,需要依赖于Anaconda的虚拟环境。所以首先使用下面的命令查看Anaconda当前的虚拟环境。
conda info --envs
如果是新安装的Anaconda,会输出下图所示的信息。这是在Linux下的输出结果,在Windows和macOS下的输出结果类似。
我们可以看到,Anaconda最初只有一个名为base的环境,这是默认的换。如果下载的是Python3.7的Anaconda版本,那么这个环境的Python版本就是Python3.7。并不建议读者直接修改base环境。而是建立两个单独的虚拟环境来分别安装TensorFlow1.x和TensorFlow2.x。
2. 创建和移除Anaconda虚拟环境
可以通过下面的命令创建一个名为tf2的虚拟环境。这里创建Python版本为3.7.4的虚拟环境
conda create --name tf2 python=3.7.4
在创建的过程中会询问是否安装必要的包,如下图所示。
输入y,按Enter键,会安装这些包。如果成功创建了tf2虚拟环境,那么会输出如下图的信息。
注意,在创建虚拟环境的过程中,会通过Internet下载相关的库,可能在国内有些慢。最好的方式是设置国内的镜像。读者可以使用下面的命令查看Anaconda当前的镜像。
conda config --show channels
如果在此之前设置了其他的镜像,可以使用下面的命令删除这些镜像。
conda config --remove channels 镜像名
这里的镜像名就是使用conda config --show channels命令列出的镜像名。
读者可以使用下的命令添加新的镜像。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --set show_channel_urls yes的意思是从channel中安装包时显示channel的url,这样就可以知道包的安装来源了。
如果想删除某一个镜像(channel),可以使用下面的命令:
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
设置完镜像后,使用conda config --show channels命令,会看到新添加的镜像,如下图所示。
现在回到主题,在前面已经创建了一个名为tf2的虚拟环境,接下来用下面的命令激活tf2。
conda activate tf2
如果想移除虚拟环境,可以使用下面的命令:
conda remove -n tf2 --all
3. 克隆Anaconda虚拟环境
通过前面的命令创建的虚拟环境只安装了一些基本的库,如果想与base环境安装相同的库,可以使用下面两种方式创建虚拟环境。
方式1:使用yml文件
yml文件是普通的文本文件,里面包含了当前虚拟环境已经安装的部分或全部的库的目录,Anaconda会根据yml文件在其他虚拟环境中安装这些库。操作步骤如下:
步骤1:导入yml文件
切换到base环境,然后使用下面的代码导出yml文件(注意,文件扩展名必须是yml,文件名可以随便起)。
conda env export | grep -v "^prefix: " > env.yml
在这条命令里使用grep去除了带prefix的项,如果不去除,在env.yml文件中就会多了类似下面的项,这是当前环境的,在导入时不需要。
prefix: /Users/lining/opt/anaconda3
步骤2:导入yml文件
使用下面的命令在创建虚拟环境时会根据env.yml文件中的内容安装相应的库,需要使用-p命令行参数指定虚拟环境的绝对路径,如/home/user/anaconda3/envs/tf2。
conda env create -f env.yml -p /home/user/anaconda3/envs/tf2
或者使用-n或--name指定虚拟环境的名字:
conda env create -f env.yml -n tf2
在安装完相关的库后,可能当前的python可执行程序指向的不是/home/user/anaconda3/envs/tf2/bin/python,所以可以进入/home/user/anaconda3/envs/tf2/bin目录执行python命令,或将该命令的路径添加到Path环境变量中。
当然,使用conda activate tf2命令切换到tf2环境后,就不需要切换路径了,直接执行python命令即可。
方式2:使用--clone命令行参数克隆虚拟环境
使用下面的命令创建一个名为new_env的新虚拟环境,该虚拟环境会从本地克隆名为tensorflow2的虚拟环境中的所有内容(包括各种库)。克隆成功后,会显示如下图所示的信息。
conda create --name new_env --clone tensorflow2
4. 安装和移除TensorFlow2.x
本文主要用Ubuntu Linux讲解,Windows、macOS和Linux的操作基本一样。
到现在为止,虚拟环境已经准备完了,现在切换到tf2虚拟环境,然后使用下面的命令安装TensorFlow2。
安装不支持GPU的TensorFlow版本
pip install tensorflow
安装支持GPU的TensorFlow版本
pip install tensorflow-gpu
如果要升级TensorFlow,可以使用--upgrade命令行参数,命令如下:
pip install --upgrade tensorflow
pip install --upgrade tensorflow-gpu
与conda命令一样,使用pip命令在国内同样面临下载缓慢的问题,所以可以使用-i命令行参数指定pip的国内镜像,命令如下:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu
执行上面的命令会自动下载安装最新的TensorFlow版本,目前是TensorFlow2.x,有大概421M,使用国内镜像一会就安装完。
现在进入python控制台,执行import tensorflow as tf命令导入TensorFlow库,然后执行tf.version查看TensorFlow的版本,我们会看到,版本是v2。如下图所示。在导入TensorFlow时可能会显示如下图的提示信息,这说明与GPU相关的库没有安装,需要到https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html下载相关的库进行安装,如果只是做实验,不使用GPU的问题不大,所以读者不需要理会这些提示,并不影响正常使用TensorFlow训练模型。
移除TensorFlow,可以使用下面的命令
pip uninstall tensorflow
5. 安装和移除TensorFlow1.x
按前面的方法创建一个名为tf1的虚拟环境,然后使用conda activate tf1切换到该虚拟环境。然后使用下面的命令安装TensorFlow1.x的最新版(1.15)。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow==1.15
安装完后,进入python控制台,然后查看TensorFlow的版本,会输出如下图的信息(很明显,输出版本是v1)。
如果想使用TensorFlow2,那么只要使用conda activate tf2切换到tf2虚拟环境即可,使用TensorFlow1,再使用同样的方法切换回tf1虚拟环境。
6. 在PyCharm中切换TensorFlow1和TensorFlow2
使用TensorFlow训练模型,通常不会使用记事本或vi来编辑代码,这些简单的文本编辑器效率太低了。一般会选一款Python IDE,这里强烈推荐PyCharm,这是目前应用最广泛的Python IDE。这一节就介绍如何在Python IDE中拥有多个TensorFlow环境。
PyCharm仍然会使用Anaconda的虚拟环境。可以在PyCharm中创建新的Anaconda虚拟环境,也可以使用以前创建的虚拟环境。
现在进入PyCharm,打开Settings对话框(macOS版PyCharm是Preferences对话框),找到Project Interpreter节点,点击该节点,在右侧会显示如下图的页面。
该页面是目前PyCharm所有已经配置的Python环境以及当前环境已经安装的库、版本等信息。如果要添加新的环境,可以点击Project Interpreter列表右侧的按钮,会打开Add Python Interpreter对话框。如下图所示。在左侧显示了可以建立的Python环境种类。如果要使用虚拟环境,可以使用前两项。其实这两项的效果类似。如果这个虚拟环境是Anaconda的,建议第2类(Conda Environment),进入该类环境,会显示如下图所示的页面。与第1类不同的是,如果选择已经存在的环境,会在Interpreter列表中列出已经在Anaconda中创建的虚拟环境,如下图所示。读者可以选择一个。例如,在前面创建的tf1和tf2。
当然,使用第一类虚拟环境也可以,不过要手动找打Anaconda虚拟环境目录,并选择虚拟环境中的python可执行文件(windows是python.exe),如下图所示。这里建议选择已经创建的虚拟环境,如果要新创建虚拟环境也可以,不过要使用前面讲的方法重新安装TensorFlow的各个版本。
创建完虚拟环境,点击OK按钮关闭Settings对话框,这是PyCharm会对新的虚拟环境重新建立索引,那么为什么要建立索引呢?这是因为PyCharm是支持支持编辑器的。也就是说,你输入一个对象变量,PyCharm会列出该对象中所有的属性、方法。那么这些数据是如何来的呢?Python并不像Java一样有class文件,可以直接通过反射获取。Python需要事先扫描虚拟环境中所有已经安装的模块中的函数、方法、属性,然后将其记录在PyCharm中,这样PyCharm才能知道当前虚拟环境有哪些模块,模块中有什么函数、方法、类、属性。所以这一过程比较慢,要耐心等待。
当建立索引完成后,创建一个test.py文件,然后输入Import ,再输入tensorflow中的前几个字母,PyCharm就会列出以这前几个字母开头的所有模块,如下图所示。这就是PyCharm扫描完所有模块后给用户的反馈。如果不建立索引,这些数据是根本出不来的。
然后可以编写下面的代码看看当前TensorFlow的版本。
代码语言:javascript复制import tensorflow as tf
print(tf.version)
如果要切换TensorFlow环境,可以在PyCharm右上角点击运行列表的第1项:Edit Configurations...,如下图所示。
点击Edit Configurations...项,会弹出Run/Debug Configurations对话框,如下图所示。在左侧列表选择运行项,在右侧找到Python interpreter列表框,在里面选择已经创建的PyCharm运行环境。然后点击OK按钮关闭对话框,这时再运行test.py,就会使用新选择的Python虚拟环境了。
现在是不是很方便呢?当然,还可以利用虚拟环境来解决其他库的多版本共存问题。在后续的文章中,将利用这些技术来深入讲解关于机器学习、TensorFlow1和TensorFlow2的相关技术,欢迎关注我的后序文章。