利用Anaconda3安装tensorflow/keras,并迁移虚拟环境至不能上网的电脑
利用Anaconda3安装tensorflow/keras,并迁移虚拟环境至不能上网的电脑
下面记录下利用Anaconda安装tensorflow和keras,前前后后也踩了不少坑。并分别在windows系统和linux系统下将能上网的电脑下安装的tensorflow虚拟环境迁移至不能上网的环境下。
1、安装系统环境和安装包
centOS7
Anaconda3-5.1.0
TensorFlow 2.1.0
Keras 2.3.1
2、在能上外网的系统中安装anaconda/tensorflow/keras
2.1 先在能上外网电脑中安装anaconda
在linux系统下,我是用vmware装的centos7,注意每次重启前确认“服务”中与VMWare相关的服务处于开启状态。若在linux系统中,若安装anaconda时没有添加启动路径,需要自己手动添加启动路径:
vi /root/.bashrc
export PATH="/usr/bin/:$PATH:/root/training/anaconda3/bin:/root/training/anaconda3/condabin"
2.2 conda的一些常用命令
# 切换虚拟环境
source activate base # linux系统
activate base # windows系统
# 切换至普通环境:
source deactivate base # linux系统
deactivate base # windows系统
# 查看虚拟环境
conda info --envs
# 查看该虚拟环境下面所有的包
conda list
# 查看某一个包
conda list pkg_name
# 清除conda缓存
conda clean --all
# 创建虚拟环境
conda create -n env_name
# 复制虚拟环境base
conda create -n env_name --clone base
# 删除虚拟环境
conda remove -n env_name --all
# conda安装包, 相比于pip, 它检查兼容性更优,但下载速度或者下载源的问题,我基本没有成功过
conda install tensorflow==2.1.0
# conda升级包
condad upgrade pck_name
2.3 更改pip下载源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 生成的配置文件路径:C:\Users\cheny\AppData\Roaming\pip\pip.ini
或在C:\Users\cheny\pip路径下新建pip.ini文件:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
2.4 新建tensorflow虚拟环境
conda create -n tensorflow python=3.6
2.5 安装tensorflow和keras
# 版本号要与环境中的python版本兼容,且tensorflow版本要与keras版本兼容
pip install tensorflow==2.1.0
pip install keras==2.3.1
# 环境需要的其它包,版本号与虚拟环境base中一致,避免后续冲突
pip install pandas==0.22.0
pip install matplotlib==2.1.2
pip install scikit-learn==0.19.1
pip install scikit-image==0.13.1
pip install seaborn==0.8.1
# 这里推荐使用pip安装,网上很多使用conda安装,实际效果就是一致等待,我反正是没成功过。
# 之前一直想先复制base虚拟环境,再在该环境上安装tensorflow,结果由于有的包需要升级,升级卸载时会报错(如wrap包),后面还不如重新从基础python装起。
2.6 tensorflow相关的网站
# anaconda清华镜像站
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
# anaconda官网:各版本介绍
https://docs.anaconda.com/free/anaconda/reference/packages/oldpkglists/
# Tensorflow和Keras版本对照及环境安装
https://blog.csdn.net/Strive_For_Future/article/details/126587222
3、虚拟环境复制迁移
3.1 将虚拟环境tensorflow从一台能上网的电脑迁移至另一台不能上网的服务器, 首先两台电脑先安装好同一种版本的Anaconda。
3.2 windows系统和linux系统下,虚拟环境迁移方法类似。
1)在源电脑上,切换至tensorflow虚拟环境,安装conda-pack
conda install -c conda-forge conda-pack # conda-forge是下载源
2)打包迁移虚拟环境
(tensorflow) C:\Users\cheny>conda pack -n tensorflow
# 完成后在C:\Users\cheny目录下生成文件tensorflow.tar.gz
3)拷贝文件tensorflow.tar.gz至不能上网服务器
4)进入envs目录,新建目录tensorflow,并进行以下操作
windows系统:
# cmd进入envs目录
# 新建tensorflow目录
# 解压,注意这里不能用windows自带的解压软件
C:\software\Anaconda3\envs> tar -xzf tensorflow.tar.gz -C tensorflow
# 打开Anaconda Promot
# 可以发现虚拟环境tensorflow已经加入
(base) C:\Users\User>conda info --envs
# conda environments:
#
base * C:\software\Anaconda3
tensorflow C:\software\Anaconda3\envs\tensorflow
# 激活tensorflow虚拟环境
(base) C:\Users\User>activate tensorflow
# 运行conda-unpack清除前缀
(tensorflow) C:\Users\User>conda-unpack
linux系统:
# 进入envs目录
(base) [root@bigdate envs]# mkdir -p tensorflow
(base) [root@bigdate envs]# tar -xzf tensorflow.tar.gz -C tensorflow
# 激活tensorflow虚拟环境
(base) [root@bigdate envs]# source activate tensorflow
# 运行conda-unpack清除前缀
(tensorflow) [root@bigdate envs]# conda-unpack
后经自己对比测试,windows环境下的迁移,表面上看没啥问题,但运行tensorflow项目会报错,因此建议只做linux环境下的虚拟环境迁移;windows环境下还是老老实实在线安装吧。
4、将h5py版本从3.1.0降级至2.10.0
当使用load_model(model_save_path)加载保存的***.h5模型时,会出现报错:
Traceback (most recent call last):
File "/root/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/saving.py", line 584, in load_model
model = _deserialize_model(h5dict, custom_objects, compile)
File "/root/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/saving.py", line 273, in _deserialize_model
model_config = json.loads(model_config.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'
# 由于h5py在2.10版本中,字符串的存储是经过编码的,而在3.0.0的版本中,则不会检查是否经过编码,所以会报错。解决方法:降级至2.10.0版本
pip install 'h5py==2.10.0' --force-reinstall
5、离线安装PyMySQL
激活tensorflow虚拟环境,并切换至PyMySQL目录下安装。
python setup.py install
God will send the rain when you are ready.You need to prepare your field to receive it.