前置き
基本的には、システムの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で動いていることが頭に入っていないと見落としがち。
アップデートには気をつけねば。