pyenv+venvによるpython実行環境の設定

はじめに

pyenv はサーバ内のディレクトリ単位で python のバージョンを切り替えるしくみです。
venv は(シェルの)セッション単位で python へのバイナリパスを切り替える仕組みです。
今となっては両方必要となってしまったので、設定方法を完結に記載します。

環境

AlmaLinux-8.x / AlmaLinux-9.x

開発ツールのインストール

$ sudo dnf -y groupinstall "Development Tools"
# (日本語環境の場合はこれでもOK →: sudo dnf -y groupinstall 開発ツール)

Python が依存するパッケージの導入(AlmaLinux8)

MariaDB関連をインストールしていない場合

$ sudo dnf -y install bzip2-devel libffi-devel openssl-devel readline-devel libsqlite3x-devel mysql-devel xz-devel python3-devel

MariaDB関連をインストールしている場合

mysql-devel が MariaDB-devel に変わります。

$ sudo dnf -y install bzip2-devel libffi-devel openssl-devel readline-devel libsqlite3x-devel MariaDB-devel xz-devel python3-devel

Python が依存するパッケージの導入(AlmaLinux9)

$ sudo dnf -y --enablerepo=crb install bzip2-devel libffi-devel openssl-devel readline-devel libsqlite3x-devel mysql-devel xz-devel python3-devel

pyenv のインストール

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

pyenv の有効化

$ cat >> ~/.bash_profile <<EOS
export PYENV_ROOT="\$HOME/.pyenv"
export PATH="\$PYENV_ROOT/bin:\$PATH"
eval "\$(pyenv init -)"
EOS
$ . ~/.bash_profile

pyenv の使い方

pyenv でインストール可能なバージョン一覧

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
(以下略)

特定バージョンの python のインストール

ここでは 3.9.6 を入れてみます。

$ pyenv install 3.9.16
$ pyenv versions              # 導入済みバージョンの表示
* system (set by /home/vagrant/.pyenv/version)
  3.9.16

現時点では system == rpm で導入したもの、を向いています。

利用バージョンを 3.9.16 に変更

ホームディレクトリ配下について、3.9.16 を使うように変更してみます。

$ cd
$ pyenv local                       # このディレクトリ配下の状態
pyenv: no local version configured for this directory
$ pyenv local 3.9.16                # このディレクトリ配下は 3.9.16 に切り替える
$ pyenv local
3.9.16
$ cat .python-version               # バージョン管理の実体
3.9.16
$ which python3
~/.pyenv/shims/python3
$ python3 -V
Python 3.9.16

(実験)~/temp は別扱いにしてみる

$ cd temp
$ pyenv local
3.9.16                # ~/.python-version の設定を引き継いでいる
$ pyenv local system
$ pyenv local
system                # ~/temp 配下は system に変わった
$ cat .python-version # このファイルが新規に作られた
system
$ cd                  # 一つ上(ホームディレクトリ)に戻ってみると、
$ pyenv local
3.9.16                # 事前に設定した 3.9.16 のままになっている

venv による仮想環境の作成

$ cd                      # ホームディレクトリ上に仮想環境を作成する
$ python3 -V
Python 3.9.16
$ python3 -m venv venv    # "venv" というディレクトリ名で仮想環境を作成する
$ . ./venv/bin/activate   # 仮想環境に入る
(venv) ~$ which python3   # (プロンプトが仮想環境のものに変わる)
~/venv/bin/python3
(venv) ~$ which pip3
~/venv/bin/pip3
(venv) ~$ pip3 list
Package    Version
---------- -------
pip        22.0.4
setuptools 58.1.0
(venv) ~$ deactivate      # 仮想環境から抜ける
$                         # (プロンプトが元に戻る)

VSCodeで仮想環境を指定する

python 拡張機能が入っていることが前提です。venv をホームディレクトリ直下以外にインストールした場合、適宜パスを読み替えてください。

  1. 左下の「管理(歯車)」>コマンドパレット>Python:インタープリタを選択
  2. /home/USERNAME/venv/bin/python を入力して Enter
  3. 念のため VSCode を再起動
  4. ステータスバーの右側で環境を確認する

VSCodeで仮想環境が正しく選択できない?

手元の環境では、3.9.16 を入れる前に venv で設定してあったのですが、3.9.16 を入れた後も VSCode の表示は「3.6.8(‘venv’:venv)」のままで変わりませんでした。

この場合、以下の手順を試してみてください。

  1. VSCode の選択で別の Python を選択
  2. venv 環境( ~/venv ディレクトリ)を消す
  3. その後いったん VSCode を終わらせてから再度起動。ステータスバーの表示が “インタープリターの選択” に変わります。
  4. venv 環境を再構築
  5. 「Python:インタープリタを選択」>「+インタープリターパスを入力」>「検索」
  6. 初期値が「/home/USERNAME/選択したフォルダ」になっています。そこから venv ディレクトリを(手入力でなく)一覧から選択し、その後マウスで bin>python を選択してください。
タイトルとURLをコピーしました