【Python】仮想環境 ~ pyenv ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/02/11/141852

より分冊。

昨今、色々なプロジェクトに首を突っ込んでいる関係で
Pythonのバージョンを切り替えたり大変だ。
そこで、pyenv について扱う。

目次

【1】環境設定
 1)Linux の場合
 2)Windows の場合
【2】仮想環境として別バージョンのPythonを入れる
【3】Pythonのバージョンを切り替える
 0)切り替えられるpythonバージョンの確認
 1)ローカルの一部のパスでのみ使用したい場合
 2)環境全体で使用したい場合
【4】トラブル
 1)Linux環境でpyenv install時にエラー「zipimort.ZipImoportError」
 2)Linux環境でpyenv install時にエラー「Missing the OpneSSL lib?」
 3)Linux環境でpyenvでPythonバージョンが切り替わらない

【1】環境設定

1)Linux の場合

https://www.python-izm.com/tips/pyenv/
https://note.com/npaka/n/n597d1cea0432

# pyenvインストール
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

# 環境編の設定
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

# bash_profile を適用
source ~/.bash_profile

# pyenvへのPythonのインストール
pyenv install 3.6.10

# 全ディレクトリのPythonの切り替え
pyenv global 3.6.10
# ローカルの一部のパスでのみ使用したい場合
# pyenv local 3.6.10

# pyenv version確認
pyenv versions

# Python version確認 (v3.6.10 になっているはず)
python --version

2)Windows の場合

https://www.3ryu-engineer.work/windows-pyenv/

# pip でインストール
pip install pyenv-win --target %USERPROFILE%\.pyenv
# => C:\Users\{ユーザ名}配下に .pyenv ディレクトリ作成

# 環境変数を追加
# 後述「※ 環境変数の設定 by Powershell」を参照

# 確認
pyenv --version

環境変数の設定 by Powershell
https://github.com/pyenv-win/pyenv-win#finish-the-installation

[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

【2】仮想環境として別バージョンのPythonを入れる

# インストールされているバージョンを確認
pyenv --version

# インストール可能なバージョンを表示
pyenv install --list

# 指定したバージョンをインストール
# pyenv install <python-version>
pyenv install 3.7.9

【3】Pythonのバージョンを切り替える

0)切り替えられるpythonバージョンの確認

pyenv versions

1)ローカルの一部のパスでのみ使用したい場合

pyenv local 3.7.9

# 確認
python -V

2)環境全体で使用したい場合

# グローバルなデフォルトを指定したバージョンに変更
# pyenv global <python-version>
pyenv global 3.7.9

# 確認
python -V

【4】トラブル

1)Linux環境でpyenv install時にエラー「zipimort.ZipImoportError」

 Linux環境で「pyenv install 3.6.15」した際に
以下「エラー内容」が表示された

エラー内容

zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [Makefile:1102: install]: Error 1

解決案

# 以下を行う

sudo apt-get install zlib1g-dev

参考文献
https://qiita.com/banaoh/items/00aea13fe045fab7e8ba

2)Linux環境でpyenv install時にエラー「Missing the OpneSSL lib?」

上記1)の後に、再度、「pyenv install 3.6.15」した際に
以下「エラー内容」が表示された

解決案

# 以下を行う

$ sudo apt-get update
$ sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

参考文献
https://zenn.dev/moru3_48/articles/94d01b0ed2a91e

3)Linux環境でpyenvでPythonバージョンが切り替わらない

上記2)の後に、再度、「pyenv install 3.6.155 」し、
「python lo

コマンド例

pyenv install 3.6.15

pyenv local 3.6.15

# 確認したが、バージョン「v3.6.15」にならない
python -V

解決案
https://hitori-sekai.com/python/error-pyenv/

# を参考に、以下を行い、再度バージョン確認
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

# bash_profile を適用
source ~/.bash_profile

python -V

参考文献
https://hitori-sekai.com/python/error-pyenv/

参考文献

https://qiita.com/twipg/items/75fc9428e4c33ed429c0

関連記事

仮想環境 ~ virtualenv / venv / pipenv ~
https://dk521123.hatenablog.com/entry/2020/02/11/141852
パッケージ管理 ~ pip / wheel, egg ~
https://dk521123.hatenablog.com/entry/2019/11/09/001342
パッケージ管理 ~ pip ~
https://dk521123.hatenablog.com/entry/2021/07/02/000000
パッケージ管理 ~ conda ~
https://dk521123.hatenablog.com/entry/2022/02/11/000000
パッケージ管理 ~ Poetry ~
https://dk521123.hatenablog.com/entry/2021/11/09/155903