Container安裝 python 透過Dockerfile 使用pyenv進行安裝

Container安裝 python 透過Dockerfile 使用pyenv進行安裝

在 Docker 容器中管理 Python 環境時,我們常常需要安裝特定版本的 Python,而不是使用容器預設的版本。這種需求源於確保開發、測試和生產環境的一致性,以及滿足特定項目的 Python 版本要求。pyenv 作為一個強大的 Python 版本管理工具,為我們提供了在容器中靈活控制 Python 環境的解決方案。這個過程的核心在於編寫一個自定義的 Dockerfile,其中包含安裝和配置 pyenv 的步驟,以及使用 pyenv 安裝所需的 Python 版本。

Container Image : 8.2-fpm

要使用多環境在同一個容器時 盡量不要選擇 alpine 精簡版Linux 會在安裝過程中 有許多問題,但同時也建議在規劃時 盡量讓環境都分開 才不會讓環境混雜。

#  
FROM php:8.2-fpm 
# 定義了python版本的環境變量  
# 不用打子版本 會由pyenv 去自動安裝 
ENV PYTHON_VERSION 3.10  
 
RUN set -eux; \ 
apt-get update && \ 
apt-get install -y --no-install-recommends \ 
    git \ 
    default-mysql-client \ 
    default-libmysqlclient-dev \ 
    vim \ 
    zlib1g-dev \ 
    libbz2-dev \ 
    libzip-dev \ 
    libreadline-dev \ 
    libsqlite3-dev \ 
    libncurses5-dev \ 
    libncursesw5-dev \ 
    xz-utils \ 
    zip \ 
    imagemagick \ 
    unzip \ 
    libssl-dev \ 
    wget \ 
    telnet \ 
    iproute2 \ 
    libfreetype6-dev \ 
    libjpeg62-turbo-dev \ 
    libpng-dev \ 
    iputils-ping \ 
    libxslt1-dev \ 
    procps \ 
    libmagickwand-dev \ 
    build-essential  
     
    # pyenv 
 
    RUN curl https://pyenv.run | bash 
    RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \ 
        echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \ 
        echo 'eval "$(pyenv init -)"' >> ~/.bashrc 
    SHELL ["/bin/bash", "--login", "-c"] 
    RUN pyenv install ${PYTHON_VERSION} && \ 
        pyenv global ${PYTHON_VERSION}

而 pyenv 也可以做到隨時切換版本

# 假設要切換到 python 3.11.x 
# 只需要輸入 3.11 即可 
# 就會將 python python3 pip pip3 切換到相對應版本 
pyenv install 3.11 
pyenv global 3.11