python环境迁移
我们在生产环境使用python时其依赖安装起来非常繁琐,这时候可以通过在本地将环境打包好后直接迁移到生产环境,来一次性解决所有依赖。
需求
- 系统版本类似: ,至少同为linux,且内核版本不宜相差过多;
- 两台机器装有miniconda或者anaconda: 若生产环境已经安装conda,建议在本地安装对应的版本,python版本不要过新。附上miniconda及anaconda3镜像地址。
本地操作
- 创建目标python环境:
conda create -n env_name python=3.7.0
建议python版本不要过新,生产环境已经安装conda,建议在本地安装对应的版本。然后激活该环境source activate env_name
。 - 安装你所需要的python包,建议在本地跑一下代码,确定不缺少依赖
- 打包该环境,其实就是压缩该环境的文件夹
cd 你的minconda地址/miniconda3/envs
tar -zcvf env_name.tar.gz env_name
这样就得到了打包好的环境
生产环境操作
- 生产环境中,将打包好的文件解压到./miniconda/envs/下即可。最终解压好后目录为/miniconda3/envs/env_name。
tar -zxvf env_name
- 尝试激活环境
conda env list #这一步应当可以看到刚解压的环境了
source activate env_name #激活环境
python3 #尝试进环境
如果你没有吧conda加入系统变量,可尝试直接调用<...>/miniconda3/envs/env_name/bin/python3
以上十有八九的都可跑起来了。但我在实操中出现了:
glibc_2.14 not found ....required by python3
glibc_2.17 not found ....required by python3
这个问题是由于tensorflow所需的glibc都是2.17以上,而测试环境系统过旧导致的。下面附上解决方案。
glibc_2.17为例进行升级
首先查看已经存在的glibc
[root@ray Desktop]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
如上,确实没有高版本的glibc。可以去此处下载所需的glibc_2.17.tar.gz。
在编译安装前,请确认自己的gcc版本不能过旧!否则会出现吐核的情况(段错误)。
gcc -v #查看版本
至少要让自己的gcc支持c++11。如果存在版本过低,可以看本文第三部分,解决后我们继续。
下载glibc完成后:
tar –zxvf glibc-2.17.tar.gz #解压缩
cd glibc-2.17 #进入目录
mkdir build #新建build
cd build #进入build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin #安装到usr/bin
make –j8 && make install #安装
编译完成后就可以看到结果了:
[root@ray build]# strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE
此时再试试python还缺不缺依赖,如果你安装了tensorflow,建议尝试导入,有可能会报段错误。这就是因为gcc版本过低导致的。可以借鉴本文最后一个标题后再重新编译安装glibc。
由于glibc是比较底层的一个依赖,因此可以不直接进行升级,而是通过指定glibc的方法运行我们所需的任务,可以借鉴的安装方法在此泼两个博文:
在 glibc < 2.17 的系统上安装 TensorFlow
升级glic: 解决"libc.so.6: version 'GLIBC_2.14' not found"问题
gcc版本升级
如果生产环境gcc过旧,你在编译安装glibc时还是可以通过,但python3导tensorflow会出现“段错误”,俗称“吐核”。只能通过升级gcc解决该问题。
首先,下载你想要的gcc,我安装的是5.3.0,因此下载gcc-5.3.0.tar.bz2
然后解压,gcc安装需要依赖很多东西,因此需要提前下载好所需依赖:
tar -jxvf gcc-5.3.0.tar.bz2 #解压
然后查看 ./contrib/download_prerequisites文件:
大概长这个样子,我所安装的5.3.0需要的是:
gmp-4.3.2
mpc-0.8.1
mpfr-2.4.2
分别进行下载
https://ftp.gnu.org/pub/gnu/gmp/
https://ftp.gnu.org/pub/gnu/mpc/ mpc没有对应版本可以去官网下载
https://ftp.gnu.org/pub/gnu/mpfr/
下载后将所需依赖压缩包放到<..>/gcc-5.3.0/目录下解压,并建立软链接:
#解压
tar -zxvf gmp-4.3.2.tar.bz2
tar -zxvf mpfr-2.4.2.tar.bz2
tar -zxvf mpc-0.8.1.tar.gz
#软链接
ln -sf gmp-4.3.2 gmp
ln -sf mpfr-2.4.2 mpfr
ln -sf mpc-0.8.1 mpc
最后,进行gcc编译升级,切勿手动卸载旧版本gcc
# 创建build目录
mkdir build && cd build
# 配置
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
# 执行安装
make -j8 && make install
最后验证gcc -v