1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pyenv による Python 環境構築ガイド

Last updated at Posted at 2025-03-11

1. 環境

Ubuntu 22.04

2. 必要なパッケージのインストール

Ubuntu 22.04 に pyenv をインストールする前に、必要なパッケージをインストールします。
必要なパッケージに関してはpyenvのwikiに載っています。
https://github.com/pyenv/pyenv/wiki#suggested-build-environment

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

3. pyenv のインストール

今パソコンに入っているPythonのバージョンがなんであれ、直接GitHubからpyenvを取ってきます。
ホームディレクトリ直下の.pyenvの中にインストールします。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

以下のpyenvのREADMEの通り、セットアップしていきます。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

ちなみに3つ目で~/.bashrceval "$(pyenv init - bash)"を追加していますが、これはまずpyenv init - bashが実行され、

PATH="$(bash --norc -ec 'IFS=:; paths=($PATH);
for i in ${!paths[@]}; do
if [[ ${paths[i]} == "''/home/hoge/.pyenv/shims''" ]]; then unset '\''paths[i]'\'';
fi; done;
echo "${paths[*]}"')"
export PATH="/home/hoge/.pyenv/shims:${PATH}"
export PYENV_SHELL=bash
source '/home/hoge/.pyenv/completions/pyenv.bash'
command pyenv rehash 2>/dev/null
pyenv() {
  local command=${1:-}
  [ "$#" -gt 0 ] && shift
  case "$command" in
  activate|deactivate|rehash|shell)
    eval "$(pyenv "sh-$command" "$@")"
    ;;
  *)
    command pyenv "$command" "$@"
    ;;
  esac
}

上記のような出力が得られるのですが、これらを動的に実行するためにevalが用いられます。

次に以下も実行しておきます。これもpyenvのREADMEに載っている手順です。

.profileを使う場合
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init - bash)"' >> ~/.profile
.bash_profileを使う場合
cho 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init - bash)"' >> ~/.bash_profile

.profileや.bash_profileは、システムログイン時に実行されるログインシェルが実行する設定ファイルなので、例えばデスクトップからターミナルを開いて使う場合は.bashrcしか実行されず、.profileや.bash_profileへのコマンドの追加は不要です。
ただし、以下のコマンドでpyenvが実行できるかは確認しておきましょう。

pyenv --version

また、もしPythonのバージョンを切り替えるだけならpyenvだけで十分です。以下のgifで使い方を参照してください。

install_local_python.gif

4. pyenv-virtualenvのインストール

pyenvだけだと様々なPythonのバージョンを切り替えることはできますが、同じバージョンのPythonを複数の仮想環境で実行することができません。そこでpyenv-virtualenvをインストールします。

こちらもpyenv-virtualenvのREADMEにセットアップ方法が記載されていますが、以下でも説明します。

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec "$SHELL"

最後にインストールが成功したか確認してください。

pyenv virtualenvs

5. Python のバージョンと仮想環境のセットアップ

(1) Python のインストール

pyenv を使って Python をインストールします。

pyenv install 3.10.12
pyenv install 3.9.18

どのバージョンがインストール可能かは、次のコマンドで確認してください。pyenv install -l
たくさんバージョンが出てくるので、欲しいメジャーバージョンが決まっているならpyenv install -l | grep " 3.6."のようにすれば絞りやすい。

(2) 仮想環境の作成

Python 3.10.12 を使用してchicken_nuggetという仮想環境を作成します。

pyenv virtualenv 3.10.12 chicken_nugget

作成した仮想環境の確認:

pyenv virtualenvs

(3) 仮想環境の有効化

仮想環境を有効化するには、以下を実行します。

pyenv activate chicken_nugget

特定のプロジェクトフォルダで仮想環境を自動適用するには、次のようにします。

pyenv local chicken_nugget

どちらも特定の仮想環境を有効化するコマンドですが、前者は現在のシェルセッションでのみ有効化するコマンドなので、ターミナルを閉じたりすると仮想環境はそこで終了するのに対して、後者はカレントディレクトリに仮想環境をセットするので、そのディレクトリに戻ってくれば自動で仮想環境が有効化されます。コマンド実行後ディレクトリ内に.python-versionというファイルが生成され、中身を見ると

chicken_nugget

のようにシンプルに仮想環境の名前が書いてあると思います。pyenvはこの情報をもとに指定した仮想環境を有効化します。

6. その他

仮想環境を消したい

pyenv uninstall chicken_nugget

pyenv localを解除したい

pyenv local --unset
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?