CentOS 6.9安装Python2.7.13

技术 13949 次围观 21 次吐槽

Python

查看当前系统中的 Python 版本

python --version

返回 Python 2.6.6 为正常。

检查 CentOS 版本

cat /etc/redhat-release

返回 CentOS release 6.9 (Final) 为正常。

安装所有的开发工具包

yum groupinstall -y "Development tools"

安装其它的必需包

yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

下载、编译和安装 Python 2.7.13

wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
tar zxf Python-2.7.13.tgz
cd Python-2.7.13
./configure
make && make install

默认 Python 2.7.13 会安装在 /usr/local/bin 目录下。

ll -tr /usr/local/bin/python*

/usr/local/bin/python2.7
/usr/local/bin/python2.7-config
/usr/local/bin/python -> python2
/usr/local/bin/python2 -> python2.7
/usr/local/bin/python2-config -> python2.7-config
/usr/local/bin/python-config -> python2-config

而系统自带的 Python 是在 /usr/bin 目录下。

ll -tr /usr/bin/python*

/usr/bin/python2.6-config
/usr/bin/python2.6
/usr/bin/python
/usr/bin/python2 -> python
/usr/bin/python-config -> python2.6-config

更新系统默认 Python 版本

先把系统默认的旧版 Python 重命名。

mv /usr/bin/python /usr/bin/python.old

再删除系统默认的 python-config 软链接。

rm -f /usr/bin/python-config

最后创建新版本的 Python 软链接。

ln -s /usr/local/bin/python /usr/bin/python
ln -s /usr/local/bin/python-config /usr/bin/python-config
ln -s /usr/local/include/python2.7/ /usr/include/python2.7

以上步骤做完以后,目录 /usr/bin 下的 Python 应该是

ll -tr /usr/bin/python*

/usr/bin/python2.6-config
/usr/bin/python2.6
/usr/bin/python.old
/usr/bin/python2 -> python
/usr/bin/python -> /usr/local/bin/python
/usr/bin/python-config -> /usr/local/bin/python-config

查看新的 Python 版本

python --version

返回 Python 2.7.13 为正常。

以下步骤还是有必要的

为新版 Python 安装 setuptools

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

setuptools 正确安装完成后,easy_install 命令就会被安装在 /usr/local/bin 目录下了。

为新版 Python 安装 pip

easy_install pip

正确安装完成后,pip 命令就会被安装在 /usr/local/bin 目录下了。

为新版 Python 安装 distribute 包(可选)

pip install distribute

至此,新版 Python 即算安装完毕了。

注意:这可能会导致以前安装过的 Python 程序运行不了或者无法重启之类的(比如著名的 Shadowsocks Python 版)。原因是旧版的 pkg_resources 位于 /usr/lib/python2.6/site-packages 下。而新版的则是在 /usr/local/lib/python2.7/site-packages 下。
所以,也许你需要重新安装一下程序。

再次注意:升级 Python 可能会导致 yum 命令不可用。解决方法如下:
编辑 /usr/bin/yum 文件,将开头第一行的

#!/usr/bin/python

改为

#!/usr/bin/python2.6

但是,这种改法,万一哪天你 yum update 了一下,yum 被升级了后,又变回老样子了。
所以,经过我的不懈琢磨和努力,发现了一个办法(网上的解决方案都是抄来抄去,没有一点卵用)。
记住旧版本 Python 2.6.6 的重要路径如下所示,在运行 yum 命令的时候,会提示你哪个 module 不存在,不存在的我们就去旧版本的路径下找,一定能找到的。找到后,复制到新版本 Python 的路径 /usr/local/lib/python2.7/site-packages/ 下即可。

/usr/lib/python2.6/site-packages/
/usr/lib64/python2.6/site-packages/

我的复制过程是这样的:

cp -r /usr/lib/python2.6/site-packages/yum /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/rpmUtils /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/iniparse /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib/python2.6/site-packages/urlgrabber /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib64/python2.6/site-packages/rpm /usr/local/lib/python2.7/site-packages/
cp -r /usr/lib64/python2.6/site-packages/curl /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/pycurl.so /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/_sqlitecache.so /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.py /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.pyc /usr/local/lib/python2.7/site-packages/
cp -p /usr/lib64/python2.6/site-packages/sqlitecachec.pyo /usr/local/lib/python2.7/site-packages/

转载请注明:秋水逸冰 » CentOS 6.9安装Python2.7.13

发表评论
取消评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
表情

已有评论 (21)

  1. 博主,重新安装Shadowsocks Python 版之后,新的ss的日志文件放在哪里? 我仍旧无法正常上网,这边客户端显示 System.Net.Sockets.SocketException (0x80004005): 提供了一个无效的参数。 在 System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) 在 System.Net.Sockets.Socket.InternalBind(EndPoint localEP) 在 System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext, AsyncCallback callback, Object state) 在 System.Net.Sockets.Socket.BeginConnect(EndPoint remoteEP, AsyncCallback callback, Object state) 在 Shadowsocks.Controller.Handler.StartConnect() server (...) timeout server (...) timeout 所以想看一下服务器的日志到底哪里还是不行
    littlepaper3个月前 (2017-05-29)回复
    • 要么是防火墙里端口没开,要么就加密方式或密码或端口号填错了。 服务器日志位于 /var/log/shadowsocks.log
      秋水逸冰3个月前 (2017-05-30)回复
  2. 请问如何退回原来的python2.6呢?
    boyden3个月前 (2017-05-19)回复
  3. 已收藏!来了你的博客很多次了,大多时候是冲着SS脚本来的,每次来都多少都有点收获!再不留言都不好意思了!
    noco5个月前 (2017-03-30)回复
  4. ovz 6.8 6.5 升级后如果不修改#!/usr/bin/python,其他正常cp过去 使用yum时候都会出现No module named sqlite (不是sqlite3) 后来在安装其它的必需包时增加了一个sqlite-devel,完后直接可以使用yum
    初学者8个月前 (2016-12-29)回复
  5. 你好,我想问一下:大神,你博客上的代码高亮效果是如何实现的?效果很漂亮,能说一下吗?
    Jianrry9个月前 (2016-11-20)回复
  6. 分享一个repo安装的脚本,装好后bin是python2.7 rpm -Uvh https://centos6.iuscommunity.org/ius-release.rpm yum install -y python27 python27-devel wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | python2.7 echo "python 2.7 installed successfully as `which python2.7`" echo "pip setuptools installed for python2.7 successfully "
    xiaoyutou10个月前 (2016-10-26)回复
  7. 大大能介绍一下你编辑文章使用的什么工具插件吗?以及代码是用什么工具写的啊?谢谢。
    Choi10个月前 (2016-10-17)回复
  8. 是shadowsocksR在Linux客户端怎么配置,不用特别详细,大概说下就行了,谢谢!
    w10个月前 (2016-10-13)回复
    • 在 Ubuntu 下,可以使用 ShadowsocksR 自带的 /usr/local/shadowsocks/local.py 具体命令的使用方法,参考 Wiki 的 configuration
      秋水逸冰10个月前 (2016-10-13)回复
  9. 大神,这个shadowsocksR 在Linux(Ubuntu)怎么配置啊,我有ipv6的地址,请同时介绍一下ipv6, 谢谢!
    w10个月前 (2016-10-13)回复
  10. 你好, 感谢你的教程. 我是新装 centos 6 mini 32位版本, 升级到最新后按照方法执行(把后面那几个 /usr/lib64 换成了 /usr/lib ), 运行 yum 后报错 No module named sqlite
    请求帮助11个月前 (2016-09-29)回复
    • 就去原来的 Python 的 site-package 下找到 sqlite 复制到新的路径下就好了
      秋水逸冰11个月前 (2016-09-29)回复
      • 感谢回复. 我把 /usr/lib/python2.6/site-packages 里面所有带 sqlite 的文件都复制过去了, 也不行的.. 我还尝试过把 /usr/local/lib/python2.7/site-packages 备份, 然后把 /usr/lib/python2.6/site-packages 整体都复制过去, 也是不行的.. 最后还是修改了 yum 文件
        请求帮助11个月前 (2016-09-30)回复
        • 2.7编译之前先运行yum install sqlite-devel -y
          willron9个月前 (2016-12-02)回复
        • If you are under RHEL/centos 6, you can try this: cp /usr/lib64/python2.6/lib-dynload/_sqlite3.so /usr/local/lib/python2.7/sqlite3/
          mamian3周前 (2017-07-28)回复
  11. 大神,这个能做成一键脚本么?
    红领巾11个月前 (2016-09-23)回复
    • 这个不都有安装步骤了么?一步一步来也不复杂,不要懒。
      秋水逸冰11个月前 (2016-09-23)回复
  12. 已转载。。。啦啦啦
    Mr.Lin11个月前 (2016-09-20)回复
  13. yum的解决方法确实大开眼界!
    xiaoyutou11个月前 (2016-09-15)回复