はじめに
pyenv はサーバ内のディレクトリ単位で python のバージョンを切り替えるしくみです。
venv は(シェルの)セッション単位で python へのバイナリパスを切り替える仕組みです。
今となっては両方必要となってしまったので、設定方法を完結に記載します。
環境
AlmaLinux-8.x(CentOS8クローン)
開発ツールのインストール
$ sudo dnf -y groupinstall "Development Tools"
# (日本語環境の場合はこれでもOK →: sudo dnf -y groupinstall 開発ツール)
Python が依存するパッケージの導入
$ sudo dnf -y 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 の有効化
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ . ~/.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:インタープリタを選択
- /home/USERNAME/venv/bin/python3 を入力して Enter
- 念のため VSCode を再起動
- ステータスバーの右側で環境を確認する
VSCodeで仮想環境が正しく選択できない?
手元の環境では、3.9.16 を入れる前に venv で設定してあったのですが、3.9.16 を入れた後も VSCode の表示は「3.6.8(‘venv’:venv)」のままで変わりませんでした。
この場合、以下の手順を試してみてください。
- VSCode の選択で別の Python を選択
- venv 環境( ~/venv ディレクトリ)を消す
- その後いったん VSCode を終わらせてから再度起動。ステータスバーの表示が “Select Interpreter” に変わります。
- venv 環境を再構築
- 「Python:インタープリタを選択」>~/venv/bin/python3[Enter]
- これだと、なぜかうまくいかない代わりに「Browse your filesystem to find a Python interpreter.」が選択肢に出るのでこれを選択。
- 初期値が「/home/USERNAME/選択したフォルダ」になっているので一つ上に上がり、venv を(手入力でなく)一覧から選択し、その後マウスで bin>python3 を選択。
- それでもまだステータスバーの表示が “Select Interpreter” のままなのですが、構わずにいったん VSCode を終了。
- VSCode を起動したら、やっとステータスバーが 3.9.16(‘venv’: venv) に変わりました。
このあたりはキャッシュとの兼ね合いなのでしょうけど、結構混乱しました。
