天天看點

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