Featured image of post Ubuntu + 任意バージョンのPython3環境をDockerで構築する

Ubuntu + 任意バージョンのPython3環境をDockerで構築する

これはなに Link to this heading

Ubuntu 18.04 + Python 3.7の環境を作らなければならなかったときに、Dockerで環境を構築したときの備忘録。

最終的なDockerfile Link to this heading

先に結論を示す。以下のDockerfileをビルドすれば、Ubuntu 18.04 + Python 3.7の環境を構築できる。Ubuntuのバージョンを変えたい場合は、FROM ubuntu:18.04Ubuntu Official Image にある任意のバージョンのタグに変更する。Pythonのバージョンを変えたい場合は、ARG python_version="3.7.16"を、Pythonのソースコード置き場 にある任意のバージョンに変更する。

Dockerfile
FROM ubuntu:18.04

ARG python_version="3.7.16"

# Set locale
RUN apt update -y \
    && apt install -y --no-install-recommends \
    language-pack-en
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN ln -snf /usr/share/zoneinfo/America/New_York /etc/localtime
RUN apt update -y \
    && apt install -y --no-install-recommends \
    tzdata

# Install packages
# Ref: https://github.com/pyenv/pyenv/wiki#suggested-build-environment
RUN apt update -y \
    && apt install -y --no-install-recommends \
    git \
    wget \
    xz-utils \
    build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev curl \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
    libgdbm-dev libdb-dev uuid-dev

# Install Python
RUN cd /usr/local/src \
    && wget --no-check-certificate https://www.python.org/ftp/python/${python_version}/Python-${python_version}.tar.xz \
    && tar -Jxvf Python-${python_version}.tar.xz \
    && cd Python-${python_version} \
    && ./configure --with-ensurepip \
    && make \
    && make install

# Set alias
RUN echo 'alias python=python3' >> ~/.bashrc
RUN echo 'alias pip=pip3' >> ~/.bashrc
RUN . ~/.bashrc

RUN apt autoremove -y

Dockerfileの説明 Link to this heading

Dockerfileでやっていることを説明する。

localeとタイムゾーンを設定する Link to this heading

最初にlocaleとタイムゾーンを設定している。この設定は任意だが、設定しておかないと後々面倒になる(と個人的に思っている)ので設定している。

# Set locale
RUN apt update -y \
    && apt install -y --no-install-recommends \
    language-pack-en
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN ln -snf /usr/share/zoneinfo/America/New_York /etc/localtime
RUN apt update -y \
    && apt install -y --no-install-recommends \
    tzdata

タイムゾーンを設定

日本語かつ日本時間に設定する場合は、以下のようになる。

# Set locale
RUN apt update -y \
    && apt install -y --no-install-recommends \
    language-pack-ja-base
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
RUN ln -snf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt update -y \
    && apt install -y --no-install-recommends \
    tzdata

ちなみに、localeだけ設定してタイムゾーンを設定しないと、docker buildがタイムゾーンの入力で止まってしまうので注意。

Dockerfileのビルドがタイムゾーンの入力で止まってしまう問題を回避する方法's image

Dockerfileのビルドがタイムゾーンの入力で止まってしまう問題を回避する方法

notes.nakurei.com

Ubuntuに任意のバージョンのPythonをインストールする Link to this heading

apt upgradeapt install python3だと、任意バージョンのPythonや最新バージョンのPythonをインストールできない。よって、今回はPythonのソースコードをビルドしてインストールしている。

ソースコードのビルドに必要なパッケージをインストールする Link to this heading

Pythonのソースコードをビルドするのに必要なパッケージをインストールする。 今回は、pyenvが推奨するビルド環境 を参考にパッケージをインストールしている。

# Install packages
# Ref: https://github.com/pyenv/pyenv/wiki#suggested-build-environment
RUN apt update -y \
    && apt install -y --no-install-recommends \
    git \
    wget \
    build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev curl \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
    libgdbm-dev libdb-dev uuid-dev

ソースコードをダウンロードする Link to this heading

以下の部分でPythonのソースコードをダウンロードしている。

# Install Python
RUN cd /usr/local/src \
    && wget --no-check-certificate https://www.python.org/ftp/python/${python_version}/Python-${python_version}.tar.xz \
    && tar -Jxvf Python-${python_version}.tar.xz \
    && cd Python-${python_version} \
    && ./configure --with-ensurepip \
    && make \
    && make install

特定のバージョンのPythonのソースコードは、https://www.python.org/ftp/python/から入手できる。

Index of /ftp/python/'s image

Index of /ftp/python/

www.python.org

たとえば、Python 3.7.16なら、https://www.python.org/ftp/python/3.7.16/からダウンロードできる。今回はPython-3.7.16.tar.xzをダウンロードしている。

wget --no-check-certificate https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tar.xz

ダウンロードしたらtarコマンドで解凍する。

tar -Jxvf Python-3.7.16.tar.xz

ソースコードをビルドする Link to this heading

以下の部分で、ダウンロードしたPythonのソースコードをビルドしている。

# Install Python
RUN cd /usr/local/src \
    && wget --no-check-certificate https://www.python.org/ftp/python/${python_version}/Python-${python_version}.tar.xz \
    && tar -Jxvf Python-${python_version}.tar.xz \
    && cd Python-${python_version} \
    && ./configure --with-ensurepip \
    && make \
    && make install

まず、configureを実行する。これにより、設定に応じたMakefileが生成される。

configureを実行する際にはオプションを指定できる。 オプションは以下のコマンドで確認できる。

./configure --help

今回は--with-ensurepipというオプションを指定している。これによりビルド時にpipを有効化できる。

Makefileができたら、makeコマンドでソースコードをビルドし、make installコマンドでコンパイルする。

エイリアスを設定する Link to this heading

この設定は任意。pythonコマンドでpython3を実行するように指定している。また、pipコマンドでpip3を実行するように指定している。

# Set alias
RUN echo 'alias python=python3' >> ~/.bashrc
RUN echo 'alias pip=pip3' >> ~/.bashrc
RUN . ~/.bashrc

参考文献・URL Link to this heading

Ubuntu環境のPython - python.jp's image

Ubuntu環境のPython - python.jp

Ubuntu には最初からPythonがインストールされており、そのまま利用可能です。 しかし、このPython は、 OS がさまざまな機能を提供するために使用しています。ユーザが勝手にパッケージを導入したりすると、 OS の安定性を損なうことも考えられますので、別途

www.python.jp
Ubuntuに最新バージョンのPythonをインストールする's image

Ubuntuに最新バージョンのPythonをインストールする

Ubuntu(Linuxすべて)にデフォルトでインストールされているPythonをそのまま使っていませんか?それは、ヤバイことだと知っていましたか?この記事では、デフォルトのPythonを使うことのリスクを説明して、新しいPythonをインストールする方法を解説しています。

self-development.info
UbuntuでPythonをソースからインストール - Qiita's image

UbuntuでPythonをソースからインストール - Qiita

Python 3.8 が公開されました。Ubuntu 18.04 の場合、Python 3.8 のパッケージが用意されることはないので、Ubuntu の LTS で Python 3.8 を使おうと…

qiita.com
Licensed under CC BY-NC-SA 4.0
最終更新 5月 21, 2023
Hugo で構築されています。
テーマ StackJimmy によって設計されています。