用pyenv解决在centos7下多版本python共存问题

前言(可忽略)由于毕设需求,需要进行模拟仿真(基于无人机平台的遍历不规则区域的算法),虽然已经有了matlab代码的基础,但还是本着学习一门实用语言的心态开始了python之旅(已经有了matplotlib库可以近乎完美的实现matlab下的绘图功能)。可是由于python2.x和python3.x完全不兼容,加之python3.x的库可以满足我的需求(这点最重要,选择版本首先看有没有你需要功能的库作支持),加之未来的趋势肯定是python3代替老的有缺陷的python2,所以选择了python3.x。


先简单说下我安装python3.x的悲催经历:

系统自带的是python2.7版本,想当然的就是安装新版本(第一处错误,未考虑版本共存问题),官网下载源码,然后按照readme文件指示(linux下安装软件的说明书,比任何教程都要好!),一步一步完成安装,然后简历软连接,修改系统默认的python版本(第二处错误,埋下了一大地雷)。

之后就是经典的yum错误了。由于yum依赖系统提供的python2.x,但是你安装的时候修改了默认python版本wei为Python3.x(2.x和3.x版本完全不兼容),显而易见,用python2.x编写的yum脚本(至少其中一部分肯定需用python实现),在当你调用系统默认的python3.x的时候肯定是出错的。

接下来就是网上的各种解决方案,大体都是这么说的,让你修改yum中python脚本的执行版本(在脚本的第一行可以指定执行脚本程序的默认程序,一般为#/usr/bin/python),当然是按照要求修改了,可是在安装其他python库的时候又出了许多问题。

宣告靠修改yum中python脚本文件的执行版本策略失败!


下来发现了一个专门解决python多版本共存的利器——pyenv

安装:

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l<strong>
</strong>


使用:

查看可安装的python版本

</pre><pre name="code" class="plain" style="font-weight: bold;">
$ pyenv install --list


安装python依赖的一些软件包

在centos、rht、fedora下

<pre name="code" class="html">sudo yum install readline readline-devel readline-static
sudo yum install openssl openssl-devel openssl-static
sudo yum install sqlite-devel
sudo yum install bzip2-devel bzip2-libs
</pre><h2>安装指定版本</h2><p></p><pre name="code" class="html">pyenv install 3.4.1 -v



更新数据库(安装完成之后,星号代表正在使用的版本)

pyenv rehash

</pre><p></p><h2>设置全局python版本</h2><pre name="code" class="html"><pre name="code" class="plain">$ pyenv global 3.4.1
$ pyenv versions
system
* 3.4.1 (set by /home/seisman/.pyenv/version)

确认python版本



<pre name="code" class="plain">$ python
Python 3.4.1 (default, Sep 10 2014, 17:10:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>





说明:

系统自带的脚本会调用/usr/bin/python,所以安装的新版本不会对系统脚本产生影响