さくらのVPSでCentOS6のPythonを2.7にアップデートする

Python2.6から2.7へ

CentOS6系のPython

SakuraインターネットのVPSでCentOS6系を選択している場合、サーバーにはPython2.6がデフォルトでインストールされています。もちろんこのままでも何の問題もなく使用できますが、以前投稿した無料SSLプロジェクトのLet’s Encryptを使用する場合、Python2.7のインストールが必須となってきます。

SSLが無料で使えるLet’s EncryptをNginxに投入した

公式からダウンロードしてビルドする

Python公式サイトから2.7系のソースコードをダウンロードします。(最新版Python2.7.13 – 2017.1.3現在)
以下はルート権限でおこないます。

# cd /usr/local/src
# curl -O https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
# tar xzf Python-2.7.13.tgz
# cd Python-2.7.13
# ./configure
# make
# make altinstall

make altinstallは、以前のPythonを上書きしてしまわないための措置です。Python公式で推奨されているので、こちらに従いましょう。
Pythonのビルド

ビルドしたPython2.7を移しかえる

ビルドが無事終了したら、/usr/binディレクトリを見てみます。pythonの他にpython2.6というバイナリファイルが存在していると思います。もしなければ、pythonをそっくりそのままコピーして作成しておきましょう。

# cp /usr/bin/python /usr/bin/python2.6

この段階ではどちらもPython2.6が内包されています。バージョンを確認してみます。

# python --version
Python 2.6.6
# python2.6 --version
Python 2.6.6

では、先程ビルドしたPython(2.7.13)を/usr/bin/pythonに移します。この時コピーは注意です!

python2.6ディレクトリが元から存在していた場合、このディレクトリには/usr/bin/pythonへシンボリックリンクが貼られているはずです。したがって、コピーすると/usr/bin/python2.6の中身もPython2.7に書き換えられてしまい、後々困ることになります!!

# mv /usr/local/src/Python-2.7.13/python /usr/bin/python

これでpythonコマンドを打つとPython2.7が使えるようになります。以前のPython2.6はpython2.6コマンドで使用することができます。

# python --version
Python 2.7.13
# python2.6 --version
Python 2.6.6

これでPython2.7が使用できるようになりました。

yumのパスを変えることをお忘れなく

Python2.7が無事使えるようになりましたが、yumでインストールしたパッケージリストを見ると、いままでインストールしてきたものが一切表示されなくなっています。これは、yumを動かしているPythonが2.7になったためです。

前バージョンのPythonを残す必要があったのはこのためです。

yumのなかで指定されているパスを元のPython(2.6)へのパスに変更してあげれば、すぐに修復できます。

# vi /usr/bin/yum
#!/usr/bin/python → #!/usr/bin/python2.6

これで問題はなくなったはずです。ちなみに、yum本体がアップデートされるたびにパスが/usr/bin/pythonに書き換えられるので、アップデートでyum本体がバージョンアップされたらその都度、パスの書き換えを行いましょう。

Pythonパッケージマネジャーのpipをインストール

すでにインストールされている場合

PythonのパッケージマネジャーpipはPython2系であれば2.7.9まで、Python3系は3.4までは自動でインストールされているようです。
pip –version
で、バージョン情報が確認できれば問題なくインストールされています。
バージョン情報が表示された場合も念のため、pip自体を更新しておきます。

# pip install -U pip

pipを取得

バージョン情報が表示されなかった場合、新たにインストールする必要があります。

yumでインストールする方法もあるようですが、get-pip.pyを使用する方法が圧倒的に簡単です。また、yum自体はPython2.6で動いていますので(上述)、この方法でインストールします。

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

確認します。

# pip --version
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)

これでpipがインストールされ、Python2.7へのアップデートも完了です。

pipでpythonパッケージをインストールする時にエラーが出る

正直ちょいめんどい

アップデート完了後、pipでモジュールをインストールしようとすると、エラーが起こりました。モジュール書き込み時にパーミッションエラーが起こっている模様。ならば、root権限で。と、sudoコマンドを付けてみると、今度はまた違ったエラーが起こります。

どうやら、sudoコマンド時のpipのPATHが別のところを見ているらしい(/usr/bin/pipを見ていない)。どうしたもんかと色々と調べた結果、こうなりました。

$ sudo `which pip` install パッケージ名
or
$ sudo /usr/bin/pip install パッケージ名

バイナリのフルパスを指定する。と、いう。解決策になっているのかどうかは内緒。

ちなみにcertbotを使ってSSLを導入する時にPython2.7及びvirtualenvというPythonパッケージが必要になったのでした。

SSLが無料で使えるLet’s EncryptをNginxに投入した

(Visited 984 times, 1 visits today)

“さくらのVPSでCentOS6のPythonを2.7にアップデートする” への1件の返信

コメントは受け付けていません。