はじめに
Python3.6 から追加された文法機能の記事を見かけ、
使ってみようと思った時、とりあえずちょろっと使うだけだからDocker(Ubuntu)で試そうとしました。
しかし、apt-get
でpython3.6を入れるには、
- Ubuntu 14.04/16.04: repositoryを追加しなければなない。
- Ubuntu 16.10: repositoryを追加しなくても入れられるが、versionが
3.6.0-b2-1
- pipは別途入れなければならない
など微妙に痒いところがあったので、ソースからmake
してinstallする最低限のDockerfileをメモとして書いておきたいと思います。
※追記(2017/03/10): マルチバイト文字を使うとエラーを吐いたのでENV PYTHONIOENCODING
を追加しました。
Dockerfile
FROM ubuntu:16.10
MAINTAINER kekedadamama
RUN apt-get update -y && apt-get install -yq wget build-essential gcc zlib1g-dev
WORKDIR /root/
RUN wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz \
&& tar zxf Python-3.6.0.tgz \
&& cd Python-3.6.0 \
&& ./configure \
&& make altinstall
ENV PYTHONIOENCODING "utf-8"
WORKDIR /
ここではubuntu:16.10
としていますが、ubuntu:16.04
でも普通に使えることは確認できました。
※追記(2017/03/10): ENV PYTHONIOENCODING
を設定していない状態でマルチバイト文字を使用すると、以下のようなエラーを吐きます。
>>>
File "<stdin>", line 0
^
SyntaxError: 'ascii' codec can't decode byte 0xe3 in position 7: ordinal not in range(128)
使ってみる
上記Dockerfileを実行したコンテナでpythonの3.6.0
が入っていることを確認しておきます。
root@7787ab554c9f:/# python3.6 -V
Python 3.6.0
root@7787ab554c9f:/# python3.6
Python 3.6.0 (default, Feb 28 2017, 08:21:29)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> greet : str = "Hello"
>>> f"{greet}, guest"
'Hello, guest'
3.6で導入された書式化済み文字列リテラル
や変数のタイプヒンティングシンタックス
も問題なく使えていそうです。
もちろんpipも一緒に入ります。
おわりに
apt-get
でpython3.6が普通にinstallできるようになるまでの命なこのDockerfileですが、
初めてソースから入れたにしてはすんなり入ってくれていい子ですね。