天天看点

Centos下升级Python

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>&gt;&gt;Python 2.6.6</code>

二、下载欲升级最新Python安装包

三、修改编译文件支持SSL

编译安装的时候并没有把SSL模块编译进去,安装后可能会导致urllib2不支持https链接

<code>Traceback (most recent call last):</code>

<code>  </code><code>File</code> <code>"&lt;stdin&gt;"</code><code>, line </code><code>1</code><code>, </code><code>in</code> <code>&lt;module&gt;</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: &lt;urlopen error unknown url </code><code>type</code><code>: https&gt;</code>

我们需要先安装openssl-devel(已安装可忽略)

<code># rpm -aq|grep openssl</code>

<code>&gt;&gt;openssl-1.0.1e-30.el6.x86_64</code>

<code># yum install openssl-devel -y</code>

<code>&gt;&gt;openssl-devel-1.0.1e-42.el6.x86_64</code>

在编译安装Python之前加上以下这段代码(代码去除注释即可)

<code>&gt;&gt;</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>&amp;&amp; </code><code>make</code> <code>install</code>

<code>#也可以先查看是否有安装gcc再进行编译安装</code>

通过命令查看是否已安装新版本

<code># /usr/local/bin/python2.7 -V</code>

<code>&gt;&gt;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>&gt;&gt; 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>&lt;module&gt;</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>&lt;module&gt;</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>&lt;span style=</code><code>"font-family: sans-serif;"</code><code>&gt;</code><code># &lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;easy_install&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt; &lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;-&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;i&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt; &lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;https&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;:&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;/&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;/&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;pypi&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;.tuna&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;.tsinghua&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;.edu&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;.cn&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;/&lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;simple &lt;/span&gt;&lt;span style="font-family: sans-serif;"&gt;pip&lt;/span&gt;&lt;br data-filtered="filtered"&gt;</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