Edited at

Pythonアップデート(2.6 -> 2.7)

More than 3 years have passed since last update.

前置き

基本的には、システムのPythonバージョンアップはNGです。
別のバージョンが必要な場合、都度PATH指定しましょう。
ただ、同じようなエラーが出てしまった場合の解消につながればと投稿は残しておきます。

(knoguchiさん、コメントありがとうございました!)

subprocess.check_callを使うため、boto3を使うサーバのpythonをアップデートした際に、想定以上にすることが多かったので忘備録。

やったことは以下。

・pythonアップデート(2.6 -> 2.7)

・↑によりインポートできなくなったため、boto3の再インストール

・↑に必要になるpipインストール


環境

以下のような感じ

# python -V

Python 2.6.6
# uname -a
Linux hoge 2.6.32-573.12.1.el6.x86_64 #1 SMP Tue Dec 15 21:19:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux


アップデート

ソースコードからアップデートする。


必要モジュールのインストール

事前に必要なモジュールをインストールしておく。

# yum install zlib-devel openssl-devel

これをしておかないと、後々のpipインストールで失敗する。

エラー例)

# curl -kL https://bootstrap.pypa.io/get-pip.py | python

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1379k 100 1379k 0 0 11.7M 0 --:--:-- --:--:-- --:--:-- 24.0M
Traceback (most recent call last):
File "<stdin>", line 17759, in <module>
File "<stdin>", line 162, in main
File "<stdin>", line 82, in bootstrap
zipimport.ZipImportError: can't decompress data; zlib not available

# curl -kL https://bootstrap.pypa.io/get-pip.py | python

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1379k 100 1379k 0 0 10.5M 0 --:--:-- --:--:-- --:--:-- 21.3M
Traceback (most recent call last):
File "<stdin>", line 17759, in <module>
File "<stdin>", line 162, in main
File "<stdin>", line 82, in bootstrap
File "/tmp/tmpd34pU2/pip.zip/pip/__init__.py", line 15, in <module>
File "/tmp/tmpd34pU2/pip.zip/pip/vcs/subversion.py", line 9, in <module>
File "/tmp/tmpd34pU2/pip.zip/pip/index.py", line 30, in <module>
File "/tmp/tmpd34pU2/pip.zip/pip/wheel.py", line 35, in <module>
File "/tmp/tmpd34pU2/pip.zip/pip/_vendor/distlib/scripts.py", line 14, in <module>
File "/tmp/tmpd34pU2/pip.zip/pip/_vendor/distlib/compat.py", line 31, in <module>
ImportError: cannot import name HTTPSHandler


python2.7のダウンロード〜インストール

# cd /usr/local/src

# curl -O https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
# tar zxf Python-2.7.11.tgz
# cd Python-2.7.11
# ./configure
# make && make altinstall
# mv /usr/bin/python /usr/bin/python.26
# cp /usr/local/src/Python-2.7.11/python /usr/bin/python
# python -V
Python 2.7.11

アップデート完!


弊害対応

上記でアップデートできたものの、もろもろ後片付け。


yum復旧

yumが使えなくなっていると思われる。

# yum list installed

There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.11 (default, Jan 14 2016, 11:42:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)]

If you cannot solve this problem yourself, please go to
the yum faq at:
http://yum.baseurl.org/wiki/Faq

yumで使うpythonを古い版に向けることで対応する。

vi /usr/bin/yum

× : #!/usr/bin/python
○ : #!/usr/bin/python.26


pip&boto3インストール

boto3のimportに失敗するようになると思われる。(2.7向けは入っていないため)

再インストールで対応。

# curl -kL https://bootstrap.pypa.io/get-pip.py | python

# pip install boto3


まとめ

以上で対応完了と思われる。

とくにyumが使えなくなるところは、yumがpythonで動いていることが頭に入っていないと見落としがち。

アップデートには気をつけねば。