Python pyenv + pyenv-virtualによる環境構築

internet technology computer display
目次

pyenv + pyenv-virtualとは

pyenvとは異なるプロジェクトごとに異なるバージョンのPythonを選択することが出来る仕組みです.pyenv-virtualはプロジェクトごとに利用するライブラリを分けて管理する仕組みです.

まずpyenv + pyenv-virtualの説明をするにあたって,pyenvやpyenv-virtualがない場合にどのような問題が生じるのかを説明します.

pyenvがない場合の問題点

pyenvがない状態では一つのマシンで単一のバージョンのPythonしか持つことが出来ません.そのため,Project Aでは3.10.5を使いたいが,Project Bでは古いバージョンの3.6.9を使いたい場合に問題が生じます.

この場合,一度3.10.5をアンインストールして,3.6.9をインストールしてProject Bの開発・保守を行い.Project Aの開発を行う時はまた3.6.9をアンインストールして3.10.5をインストールし直さないといけません.想像するだけで大変な作業です.

pyenvの問題点

pyenvを利用することで,一つのマシンに複数のバージョンのPythonを持てない問題を解消することが出来ます.

一方で,あるバージョンのPythonでは1セットのライブラリしか持てません.そのため,

  • Project AとProject Bは両方ともバージョン3.10.5を利用する.
  • Project Aではpandsとnumpyを使う.
  • Project Bではrequestsとpytorchを使う.

上述のようなケースではライブラリ同士の衝突が生じて想定しない問題が発生するリスクが向上します.

pyenvの問題点を解消するpyenv-virtual

pyenv-virtualを利用することで,Pythonの仮想環境を構築することが可能です.そして,プロジェクトによって利用する仮想環境を選択することが出来ますので,ライブラリ間の衝突の可能性を軽減することが可能です.

pyenvのインストール

端末のプログラミング言語バージョン管理には,Pythonのバージョンを管理するpyenv以外にも,Javaを管理するjenv, rubyのバージョンを管理するrbenv等あります.これらの**envをまとめて管理するanyenvを使用する前提です.

pyenvのインストール

% anyenv update
% anyenv install pyenv
% exec $SHELL -l

pyenvでPythonをインストール

インストール可能なPythonのバージョンを確認する.

% pyenv install -l

pyenv-virtualenvのインストール.Available versions::と出た後にバージョンが一覧されます.バージョン名のみが記載されているものはCPythonです.その他は派生型のPythonのディストリビューションです.

Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
~省略~
  anaconda3-2021.11
  anaconda3-2022.05
  cinder-3.8-dev
  graalpy-22.3.0
  graalpython-20.1.0
  graalpython-20.2.0
~省略~
  stackless-3.4.2
  stackless-3.4.7
  stackless-3.5.4
  stackless-3.7.5

例として2.7.15と3.7.0をインストールします.

% pyenv install 3.11.1
% pyenv install miniforge3-4.10.3-10

以下のコマンドを実行し,現在利用可能なPythonのバージョンを確認します.

% pyenv versions
* system (set by /Users/[username]/.anyenv/envs/pyenv/version)
  3.11.1
  miniforge3-4.10.3-10

システムで使用するデフォルトのバージョンを指定する

% pyenv global 3.11.1
% python --version
Python 3.11.1

今いるディレクトリ配下で使用したいバージョンを指定する

% cd xxx
% pyenv local miniforge3-4.10.3-10
% python --version
Python miniforge3-4.10.3-10

親ディレクトリに移動してPythonのバージョンを確認すると,globalで指定したバージョンになっていることが分かります.

cd ../
pyenv --version
Python 3.11.1

pyenv-virtualenvの導入

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

環境名testに対してPythonのバージョンminiforge3-4.10.3-10を利用する仮想環境を作成します.

pyenv virtualenv miniforge3-4.10.3-10 test

pyenv versionsで利用可能なバージョンを確認します.先程作成したばかりの環境名testと環境testとminiforge3-4.10.3-10の組み合わせminiforge3-4.10.3-10/envs/testが追加されました.

% pyenv versions
* system (set by /Users/[username]/.anyenv/envs/pyenv/version)
  3.10.5
  3.10.7
  3.11.1
  miniforge3-4.10.3-10
  miniforge3-4.10.3-10/envs/test
  test

新しくPythonプロジェクト用のディレクトリを作成します.

% mkdir test
% cd test

testのディレクトリ配下で先程のtest環境名を使用するように指定します.Python 3.11.0となっていますが,これはminiforge3-4.10.3-10に対応するPythonのバージョンということになります.

% pyenv local test
% python --version
Python 3.11.0

pyenv versionsでも確認してみます.仮想環境testが選択されています.

% pyenv versions
  system
  3.11.1
  miniforge3-4.10.3-10
  miniforge3-4.10.3-10/envs/test
* test (set by /Users/[username]/Development/test/.python-version)

virtualenvで作成した環境にpipでパッケージを追加してみます.

% pip install Flask
Package      Version
------------ -------
click        8.1.3
Flask        2.2.2
itsdangerous 2.1.2
Jinja2       3.1.2
MarkupSafe   2.1.1
pip          22.3.1
setuptools   65.6.3
Werkzeug     2.2.2
wheel        0.38.4

もうひとつ仮想環境を作成してみます.

% cd ../

% pyenv virtualenv 3.11.1 test2
% pyenv versions
* system (set by /Users/[username]/Development/test/.python-version)
  3.11.1
  3.11.1/envs/test2
  miniforge3-4.10.3-10
  miniforge3-4.10.3-10/envs/test
  test
  test2

testディレクトリのプロジェクト配下で仮想環境test2を使用するように変更します.

cd test

% pyenv local test2

バージョンを確認します.

% python --version
Python 3.11.1
% pyenv versions
  system
  3.11.1
  3.11.1/envs/test2
  miniforge3-4.10.3-10
  miniforge3-4.10.3-10/envs/test
  test
* test2 (set by /Users/[username]/Development/test/.python-version)

pipでインストール済のライブラリを確認します.pipとsetuptoolsのみがインストールされていることが分かります.

% pip list
Package    Version
---------- -------
pip        22.3.1
setuptools 65.5.0

pyenv-virtualenvでインストールしたバージョン,作成した仮想環境はuninstallで削除できます.

pyenv uninstall miniforge3-4.10.3-10
pyenv uninstall test

参考

よかったらシェアしてね!
目次