Centos下升级Python
预准备(可忽略)
由于Centos需要提前安装Sqlite数据库,否则之后Python无法正常导入sqlite3,因此建议在升级Python前预先安装Sqlite数据库
<code>yum </code><code>install</code> <code>sqlite-devel -y</code>
一、查看本机Pyhton版本
本机Centos6.5 预带Pyhton版本为2.6.6
<code># python --version</code>
<code>>>Python 2.6.6</code>
二、下载欲升级最新Python安装包
三、修改编译文件支持SSL
编译安装的时候并没有把SSL模块编译进去,安装后可能会导致urllib2不支持https链接
<code>Traceback (most recent call last):</code>
<code> </code><code>File</code> <code>"<stdin>"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code><module></code>
<code> </code><code>File</code> <code>"/usr/local/lib/python2.7/urllib2.py"</code><code>, line </code><code>154</code><code>, </code><code>in</code> <code>urlopen</code>
<code> </code><code>return</code> <code>opener.</code><code>open</code><code>(url, data, timeout)</code>
<code> </code><code>File</code> <code>"/usr/local/lib/python2.7/urllib2.py"</code><code>, line </code><code>431</code><code>, </code><code>in</code> <code>open</code>
<code> </code><code>response </code><code>=</code> <code>self</code><code>._open(req, data)</code>
<code> </code><code>File</code> <code>"/usr/local/lib/python2.7/urllib2.py"</code><code>, line </code><code>454</code><code>, </code><code>in</code> <code>_open</code>
<code> </code><code>'unknown_open'</code><code>, req)</code>
<code> </code><code>File</code> <code>"/usr/local/lib/python2.7/urllib2.py"</code><code>, line </code><code>409</code><code>, </code><code>in</code> <code>_call_chain</code>
<code> </code><code>result </code><code>=</code> <code>func(</code><code>*</code><code>args)</code>
<code> </code><code>File</code> <code>"/usr/local/lib/python2.7/urllib2.py"</code><code>, line </code><code>1265</code><code>, </code><code>in</code> <code>unknown_open</code>
<code> </code><code>raise</code> <code>URLError(</code><code>'unknown url type: %s'</code> <code>%</code> <code>type</code><code>)</code>
<code>urllib2.URLError: <urlopen error unknown url </code><code>type</code><code>: https></code>
我们需要先安装openssl-devel(已安装可忽略)
<code># rpm -aq|grep openssl</code>
<code>>>openssl-1.0.1e-30.el6.x86_64</code>
<code># yum install openssl-devel -y</code>
<code>>>openssl-devel-1.0.1e-42.el6.x86_64</code>
在编译安装Python之前加上以下这段代码(代码去除注释即可)
<code>>></code><code>vi</code> <code>Python-2.7.11</code><code>/Modules/Setup</code><code>.dist</code>
<code># Socket module helper for SSL support; you must comment out the other</code>
<code># socket line above, and possibly edit the SSL variable:</code>
<code>SSL</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>ssl</code>
<code>_ssl _ssl.c \</code>
<code> </code><code>-</code><code>DUSE_SSL </code><code>-</code><code>I$(SSL)</code><code>/</code><code>include </code><code>-</code><code>I$(SSL)</code><code>/</code><code>include</code><code>/</code><code>openssl \</code>
<code> </code><code>-</code><code>L$(SSL)</code><code>/</code><code>lib </code><code>-</code><code>lssl </code><code>-</code><code>lcrypto</code>
*另注:
由于系统缺少了readline相关模块,会导致编译安装Python后无法使用上下左右退格,所以需要再编译安装前安装readline-devel模块
<code>yum -y </code><code>install</code> <code>readline-devel</code>
四、编译安装Python
<code>wget </code>
<code>tar</code> <code>-zxvf Python-2.7.10.tgz</code>
<code>cd</code> <code>Python-2.7.10</code>
<code>.</code><code>/configure</code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
<code>#也可以先查看是否有安装gcc再进行编译安装</code>
通过命令查看是否已安装新版本
<code># /usr/local/bin/python2.7 -V</code>
<code>>>Python 2.7.11</code>
现在我们可以通过python2.7启动python,但是这样太麻烦,我们可以自行修改下
<code>mv</code> <code>/usr/bin/python</code> <code>/usr/bin/python2</code><code>.6.6</code>
<code>ln</code> <code>-s </code><code>/usr/local/bin/python2</code><code>.7 </code><code>/usr/bin/python</code>
<code># python -V</code>
五、修改yum脚本环境变量引用
安装完新版本Python后会发现yum出错,所以我们要把yum指向老版本
<code>vi</code> <code>/usr/bin/yum</code>
<code>#!/usr/bin/python2.6.6 # 修改#!/usr/bin/python为#!/usr/bin/python2.6.6</code>
<code>import</code> <code>sys</code>
<code>try</code><code>:</code>
<code> </code><code>import</code> <code>yum</code>
<code>except</code> <code>ImportError:</code>
<code> </code><code>print</code> <code>>> sys.stderr, """\</code>
<code>.....</code>
测试yum命令,一切正常
六、升级完Python后安装pip
python从2.6升级到2.7之后会出现安装setuptools和pip启动失败,这是因为路径的问题,我们可以下载一个脚本,运行后会自动重新下载一个setuptools
curl -O https://bootstrap.pypa.io/ez_setup.py
安装setuptools
<code># yum install -y python-setuptools</code>
安装distribute
由于Setuptools包不再维护distribute,所以安装后可能由于distribute版本缺失导致报错
<code># easy_install</code>
<code> </code><code>File </code><code>"/usr/local/bin/easy_install"</code><code>, line 5, </code><code>in</code> <code><module></code>
<code> </code><code>from pkg_resources </code><code>import</code> <code>load_entry_point</code>
<code> </code><code>File </code><code>"/usr/lib/python2.7/dist-packages/pkg_resources.py"</code><code>, line 2675, </code><code>in</code> <code><module></code>
<code> </code><code>parse_requirements(__requires__), Environment()</code>
<code> </code><code>File </code><code>"/usr/lib/python2.7/dist-packages/pkg_resources.py"</code><code>, line 552, </code><code>in</code> <code>resolve</code>
<code> </code><code>raise DistributionNotFound(req)</code>
<code>pkg_resources.DistributionNotFound: distribute==0.6.10 distribution was not found and is required by the application</code>
通过以下方式安装缺失的distribute
<code># wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.10.zip --no-check-certificate</code>
<code># unzip distribute-0.6.10.zip</code>
<code># cd distribute-0.6.10</code>
<code># /usr/local/bin/python2.7 setup.py install</code>
or
<code># wget </code>
<code># tar xf distribute-0.6.10.tar.gz</code>
安装pip
# easy_install pip
<code><span style=</code><code>"font-family: sans-serif;"</code><code>></code><code># </span><span style="font-family: sans-serif;">easy_install</span><span style="font-family: sans-serif;"> </span><span style="font-family: sans-serif;">-</span><span style="font-family: sans-serif;">i</span><span style="font-family: sans-serif;"> </span><span style="font-family: sans-serif;">https</span><span style="font-family: sans-serif;">:</span><span style="font-family: sans-serif;">/</span><span style="font-family: sans-serif;">/</span><span style="font-family: sans-serif;">pypi</span><span style="font-family: sans-serif;">.tuna</span><span style="font-family: sans-serif;">.tsinghua</span><span style="font-family: sans-serif;">.edu</span><span style="font-family: sans-serif;">.cn</span><span style="font-family: sans-serif;">/</span><span style="font-family: sans-serif;">simple </span><span style="font-family: sans-serif;">pip</span><br data-filtered="filtered"></code>
七、升级完Python后ibus输入法报错
升级 Python2.7 后会导致 Ibus 输入法python2.6的gtk无法使用问题
<code>/usr/libexec/ibus-ui-gtk</code>
<code>/usr/</code> <code>bin</code><code>/ibus-setup</code>
<code>/usr/libexec/ibus-engine-table</code>
分别修改以上三个文件中的 “python” 为 “python2.6”
八、配置pip和easy_isntall的镜像源
easy_install的配置文件 ~/.pydistutils.cfg :
<code>[easy_install]</code>
<code>index_url = https:</code><code>//pypi</code><code>.tuna.tsinghua.edu.cn</code><code>/simple</code>
pip的配置文件 ~/.pip/pip.conf :
<code>[global]</code>
<code>index-url = https:</code><code>//pypi</code><code>.tuna.tsinghua.edu.cn</code><code>/simple</code>
至此,升级完毕,后续继续补充
本文仅作一个记录,以备忘记查看方便
<a href="http://down.51cto.com/data/2367351" target="_blank">附件:http://down.51cto.com/data/2367351</a>
本文转自 leyex 51CTO博客,原文链接:http://blog.51cto.com/leyex/1739796