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