CentOS 6.10安装Python2.7.18

技术 秋水逸冰 61910浏览 27评论

Python

查看当前系统中的 Python 版本

python --version

返回 Python 2.6.6 为正常。

检查 CentOS 版本

cat /etc/redhat-release

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

安装所有的开发工具包

yum groupinstall -y "Development tools"

安装其它的必需包

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

下载、编译和安装 Python 2.7.18

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

默认 Python 2.7.18 会安装在 /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.18 为正常。

以下步骤还是有必要的

为新版 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.10安装Python2.7.18

发表我的评论
取消评论

请输入正确答案后提交评论 *超出时限。 请再次填写验证码。

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (27)

  1. 博主,按照你文章中的思路把缺少的module复制后,依旧提示如下错误。 [root@ecs-66e6-0035 ~]# yum search vim Traceback (most recent call last): File "/usr/bin/yum", line 29, in yummain.user_main(sys.argv[1:], exit_code=True) File "/usr/share/yum-cli/yummain.py", line 298, in user_main errcode = main(args) File "/usr/share/yum-cli/yummain.py", line 110, in main base = cli.YumBaseCli() File "/usr/share/yum-cli/cli.py", line 72, in __init__ output.YumOutput.__init__(self) File "/usr/share/yum-cli/output.py", line 307, in __init__ self.reported_error_msgs = dict((k, False) for (k, v) in ERRORS_TO_KBASE_ARTICLES.iteritems()) NameError: global name 'ERRORS_TO_KBASE_ARTICLES' is not defined
    padluo7年前(2017-09-18)回复
    • 你说的这个 module 也许不是系统自带的。 去搜索一下相关错误提示,也许能帮到你。
      秋水逸冰7年前(2017-09-18)回复
      • google了一下,把这一行注释掉了,暂时解决了问题,但是不知是否会有后遗症。 https://community.oracle.com/thread/3953281?start=30&tstart=0
        padluo7年前(2017-09-18)回复
      • yum install mongodb时报错,还是先改为2.6了 Traceback (most recent call last): File "/usr/bin/yum", line 29, in yummain.user_main(sys.argv[1:], exit_code=True) File "/usr/share/yum-cli/yummain.py", line 298, in user_main errcode = main(args) File "/usr/share/yum-cli/yummain.py", line 146, in main result, resultmsgs = base.doCommands() File "/usr/share/yum-cli/cli.py", line 440, in doCommands return self.yum_cli_commands[self.basecmd].doCommand(self, self.basecmd, self.extcmds) File "/usr/share/yum-cli/yumcommands.py", line 211, in doCommand return base.installPkgs(extcmds) File "/usr/share/yum-cli/cli.py", line 703, in installPkgs except yum.Errors.GroupInstallError, e: AttributeError: 'module' object has no attribute 'GroupInstallError'
        padluo7年前(2017-09-18)回复
  2. 我是新手,请问一下之前还很正常,但是当删除系统软链接就不能执行了怎么弄得
    求助7年前(2017-08-30)回复
  3. 博主,重新安装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 所以想看一下服务器的日志到底哪里还是不行
    littlepaper7年前(2017-05-29)回复
    • 要么是防火墙里端口没开,要么就加密方式或密码或端口号填错了。 服务器日志位于 /var/log/shadowsocks.log
      秋水逸冰7年前(2017-05-30)回复
  4. 请问如何退回原来的python2.6呢?
    boyden7年前(2017-05-19)回复
  5. 已收藏!来了你的博客很多次了,大多时候是冲着SS脚本来的,每次来都多少都有点收获!再不留言都不好意思了!
    noco7年前(2017-03-30)回复
  6. ovz 6.8 6.5 升级后如果不修改#!/usr/bin/python,其他正常cp过去 使用yum时候都会出现No module named sqlite (不是sqlite3) 后来在安装其它的必需包时增加了一个sqlite-devel,完后直接可以使用yum
    初学者7年前(2016-12-29)回复
  7. 你好,我想问一下:大神,你博客上的代码高亮效果是如何实现的?效果很漂亮,能说一下吗?
    Jianrry7年前(2016-11-20)回复
  8. 分享一个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 "
    xiaoyutou8年前(2016-10-26)回复
  9. 大大能介绍一下你编辑文章使用的什么工具插件吗?以及代码是用什么工具写的啊?谢谢。
    Choi8年前(2016-10-17)回复
  10. 是shadowsocksR在Linux客户端怎么配置,不用特别详细,大概说下就行了,谢谢!
    w8年前(2016-10-13)回复
    • 在 Ubuntu 下,可以使用 ShadowsocksR 自带的 /usr/local/shadowsocks/local.py 具体命令的使用方法,参考 Wiki 的 configuration
      秋水逸冰8年前(2016-10-13)回复
  11. 大神,这个shadowsocksR 在Linux(Ubuntu)怎么配置啊,我有ipv6的地址,请同时介绍一下ipv6, 谢谢!
    w8年前(2016-10-13)回复
  12. 你好, 感谢你的教程. 我是新装 centos 6 mini 32位版本, 升级到最新后按照方法执行(把后面那几个 /usr/lib64 换成了 /usr/lib ), 运行 yum 后报错 No module named sqlite
    请求帮助8年前(2016-09-29)回复
    • 就去原来的 Python 的 site-package 下找到 sqlite 复制到新的路径下就好了
      秋水逸冰8年前(2016-09-29)回复
      • 感谢回复. 我把 /usr/lib/python2.6/site-packages 里面所有带 sqlite 的文件都复制过去了, 也不行的.. 我还尝试过把 /usr/local/lib/python2.7/site-packages 备份, 然后把 /usr/lib/python2.6/site-packages 整体都复制过去, 也是不行的.. 最后还是修改了 yum 文件
        请求帮助8年前(2016-09-30)回复
        • 2.7编译之前先运行yum install sqlite-devel -y
          willron7年前(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/
          mamian7年前(2017-07-28)回复
  13. 大神,这个能做成一键脚本么?
    红领巾8年前(2016-09-23)回复
    • 这个不都有安装步骤了么?一步一步来也不复杂,不要懒。
      秋水逸冰8年前(2016-09-23)回复
  14. 已转载。。。啦啦啦
    Mr.Lin8年前(2016-09-20)回复
  15. yum的解决方法确实大开眼界!
    xiaoyutou8年前(2016-09-15)回复