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