python3.6へバージョンアップする
Ubuntu16.04でphthon3系のバージョンを使用することにしました。現状の環境の確認と、python3系の最新版へアップグレードを行います。
現状確認
まず、バージョンの確認をします。これからデフォルトのバージョンが2.7.12であることがわかりました。
$ python --version
Python 2.7.12
実はpython3系もインストールされていることがあるそうです。python3系のバージョン確認方法は下記のとおりです。結果から、python 3.5.2をインストールされていることがわかりました。
$ python3 --version
Python 3.5.2
python3.6のインストール
Ubuntu16.04では、pythonのインストールはそのままapt-getするとversion3.5までのようです。下記の手順で3.6のインストールが可能です。では順番にやってみます。なお、こちらのpython Japanさんのサイトを参考にしました。まず、python3.6のあるサーバーを登録します。コマンドを打って、メッセージが出たらENTERを押して続行してください。
$ sudo add-apt-repository ppa:jonathonf/python-3.6
A plain backport of *just* Python 3.6. System extensions/Python libraries may or may not work.
Don't remove Python 3.5 from your system - it will break.
詳しい情報: https://launchpad.net/~jonathonf/+archive/ubuntu/python-3.6
[ENTER] を押すと続行します。ctrl-c で追加をキャンセルできます
次にapt-get updateを実行するとjonathonfさんのサイトからも、パッケージ情報を読み込んでいることが分かります。
$ sudo apt-get update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
取得:4 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
取得:5 http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial InRelease [18.0 kB]
取得:6 http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial/main i386 Packages [4,492 B]
取得:7 http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial/main Translation-en [2,028 B]
細かいログは省略しますが下記のコマンドを順番に実行すれば、python3.6のインストールが完了します。
$ sudo apt-get install python3.6 python3.6-dev
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3.6 get-pip.py
念のため、インストールできたことの確認
$ $ python3.6 --version
Python 3.6.3
pythonのデフォルトバージョンを変更する
このままでは”python”コマンドを実行した時はデフォルトの”2.7″のままです。そこでpythonとpython3の実体を調べてみます。
$ which python
/usr/bin/python
$ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 12月 10 2015 /usr/bin/python -> python2.7
which python3
/usr/bin/python3
$ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 3月 23 2016 /usr/bin/python3 -> python3.5
実体は各バージョンのシンボリックリンクのようです。pythonとpython3のリンクを変えてデフォルトのバージョンを3.6にしてみます。
最初の記事ではシステム側のリンクを書き換えていたのですが、Kogia_simaさまからもっと良い方法を教えていただいたので、記事を修正してそちらを紹介します。方法は、ユーザー側でリンクを張る方法です。下記の方法で書き換えられます。
mkdir -p $HOME/bin
ln -s /usr/bin/python3.6 $HOME/bin/python
こちらは以前の内容です。リスクがあるので上記の方法をお勧めします。
実行する前の注意点ですが、この設定を行うとpython2.7を使用するソフトが動かなくなる可能性があります。変更は自己責任でおねがいします。
$ sudo rm /usr/bin/python
taka@taka-pc3:~$ sudo ln -s /usr/bin/python3 /usr/bin/python
$ sudo rm /usr/bin/python3
$ sudo ln -s /usr/bin/python3.6 /usr/bin/python3
下記のように確認してみると無事に変わっています。
$ python --version
Python 3.6.3
taka@taka-pc3:~$ python
Python 3.6.3 (default, Oct 6 2017, 08:44:35)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
追記
できるだけシステム側の変更は避けた方が無難ですよね。より安全に変更できる方法があればそちらの方が良いです。今後気を付けたいと思います。
コメント
systemに入っているpython3を上書きしてシンボリックリンクを張るのは大変危険です。systemのpython3を利用しているアプリケーションが正常に動作しなくなる可能性がある上、シンボリックリンクの張り方を間違えればOSの起動にも影響を及ぼす危険があります。
シンボリックリンクを張るなら、ホームディレクトリ内に以下のように張るほうがかなり安全ですし、他のユーザにも影響を与えません。
mkdir -p $HOME/bin
ln -s /usr/bin/python3.6 $HOME/bin/python3
Kogia_simaさま
コメントありがとうございます。確かにそうですね。ご指摘のとおり、システム側を書き換えるよりもユーザー側でシンボリックリンクを張る方が安全です。記事の方も修正したいと思います。ご指摘ありがとうございました。
横から失礼します。
root@******:~# ln -s /usr/bin/python3.6 $HOME/bin/python
ln: failed to create symbolic link ‘/root/bin/python’: File exists
と入力すると、File exists というエラーがでてしまいます。
root@*****:~# python –version
Python 2.7.12
バージョンも2.7のままです・・・困りました・・。
こんにちは。お返事遅くなりました。
まず、ログを見るとrootユーザーで作業を行っているようですが、作業時のミスの影響が深刻になる可能性があるので避けたほうが無難です。
一般ユーザーのアカウントに変更して作業を行うことをお勧めします。
エラーの内容的には、「‘/root/bin/python’にファイルがあって、シンボリックリンクが作れないよ。」というエラーです。
一般ユーザーで実行しても同じような内容であれば、既に存在するファイルの名前を変えるか削除すれば実行できるようになると思います。
[…] ■Ubuntu16.04でPythonのバージョンを2.7から3.6にバージョンアップする https://tetechi.com/python3-6/ […]
[…] ④python3.6をインストール […]
[…] (参考ページ) Ubuntu16.04でPythonのバージョンを2.7から3.6にバージョンアップする […]
[…] (参考ページ) Ubuntu16.04でPythonのバージョンを2.7から3.6にバージョンアップする […]
[…] Ubuntu16.04でPythonのバージョンを2.7から3.6にバージョンアップする […]