はじめに
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 をホームディレクトリ直下以外にインストールした場合、適宜パスを読み替えてください。
- 左下の「管理(歯車)」>コマンドパレット>Python:インタープリタを選択
- /home/USERNAME/venv/bin/python を入力して Enter
- 念のため VSCode を再起動
- ステータスバーの右側で環境を確認する
VSCodeで仮想環境が正しく選択できない?
手元の環境では、3.9.16 を入れる前に venv で設定してあったのですが、3.9.16 を入れた後も VSCode の表示は「3.6.8(‘venv’:venv)」のままで変わりませんでした。
この場合、以下の手順を試してみてください。
- VSCode の選択で別の Python を選択
- venv 環境( ~/venv ディレクトリ)を消す
- その後いったん VSCode を終わらせてから再度起動。ステータスバーの表示が “インタープリターの選択” に変わります。
- venv 環境を再構築
- 「Python:インタープリタを選択」>「+インタープリターパスを入力」>「検索」
- 初期値が「/home/USERNAME/選択したフォルダ」になっています。そこから venv ディレクトリを(手入力でなく)一覧から選択し、その後マウスで bin>python を選択してください。