🐍

pyenvとpipenvで、快適Python生活(Windows向け)

2023/01/11に公開

概要

Windowsで、複数バージョンのPython扱う「pyenv」と
フォルダごとに仮想環境を立ててライブラリ等を管理する「pipenv」を導入し
快適なPython生活を手に入れることが目標です。

背景

これまで、Pythonのインストールといえば「Anaconda」をインストールすることが定石でした。

Anacondaには、numpyやpandasといった主要なライブラリや
Jupyter Notebook(今はJupyter Labですね)といったツールがデフォルトで入っており
さらには、フォルダごとに環境を作ったりということもやってくれて便利でした。

しかし、Anacondaは執筆時点で、商用利用では有償となっています。
本来はAnacondaの有償プランも検討すべきですが、事情により出来ない方に向けて、本記事を共有します。

※参考記事
https://qiita.com/tfukumori/items/f8fc2c53077b234384fc


事前作業(pythonエイリアスオフ)

Windowsのバージョンによっては、「python」と打つと
Windows Storeに案内される場合があるので、今回はそれをオフにしておきます。

左下のWindowsボタン→歯車の「設定」

「アプリ」を選ぶ

「アプリ実行エイリアス」を押す

2つのPython「アプリ インストーラー」をオフにする


pyenvの導入

pyenvを導入することで、1台のPCに複数バージョンのPythonをインストールでき
バージョンの切り替えも柔軟に行うことができます!

pyenvのインストール

https://github.com/pyenv-win/pyenv-win#installation
正確には「pyenv-win」というツールを導入します。上記に複数の導入方法が書かれていますが
「Pyenv-win zip」に記載がある、zipで入れる方法が筆者的にはラクでした!

  1. zipファイルを解凍して、指定の場所に置く
  2. 環境変数を設定する

の手順を踏みます。


■ zipファイルを解凍して、指定の場所に置く

Pyenv-win zip」のリンクに飛んで、「Download pyenv-win.zip」のリンクを押すと
pyenv一式のzipが落とせるので、それを解凍し指定のフォルダに置きます。
置き場がちょっと初見だと難しいかもしれません。

「%USERPROFILE%」は、大抵は「C:\Users\XXX」です(XXXにはユーザー名が入る)。
コマンドプロンプトで、設定を表示すれば把握できます。

> echo %USERPROFILE%
C:\Users\XXX

該当のフォルダに、「.pyenv」フォルダを作って…

zipを解凍した中身を入れます!
「bin」フォルダが「C:\Users\XXX.pyenv\pyenv-win」配下にある状態であればOKです。


■ 環境変数を設定する

環境変数という、PC上の事前設定の登録を行います。

手順の「steps to add System Settings」に飛び
「Powershell」というコマンドプロンプトのようなツールを起動し
上記リンクに記載のある、「[System.Environment]::」から始まる4つのコマンドを実行します!
※筆者のPCでは失敗のようなメッセージが出ましたが、問題なさそうなのでスルーしました

コマンドプロンプトで「pyenv」と打って

pyenv --version

バージョンが表示されれば完了です!

pyenv 3.1.1

pyenvを使ってみる

コマンドプロンプトで操作します!

インストールできるPythonのバージョンを確認する

pyenv install --list
:: [Info] ::  Mirror: https://www.python.org/ftp/python
2.4-win32
…
3.11.0rc2

多すぎるので、現状インストールできる最新のバージョンに絞る

pyenv install --list | find "3.10"
3.10.0a1-win32
…
3.10.7

バージョンを指定してインストールする

pyenv install 3.10.7

インストールされているバージョンを確認する
(「*」がついているのが、現在設定されているバージョン)
※筆者は2つバージョンをインストールしています!

pyenv versions
* 3.10.7 (set by C:\Users\XXX\.pyenv\pyenv-win\version)
  3.8.10

デフォルトのバージョンを設定する

pyenv global 3.10.7

指定したフォルダでのバージョンを設定する
(フォルダ内にバージョン番号が書かれた「.python-version」というファイルができる)

※事前にcdでフォルダに移動しておく

cd C:\XXX
pyenv local 3.8.10

これで柔軟にPythonの複数バージョンを管理できるようになりました!


pipenvの導入

pyenvを導入することで、Pythonのバージョンは柔軟に操作できるようになりましたが
このままライブラリ(numpyとかpandasとか)をガンガンインストールしていくと
元のPythonがどんどんカオスになっていきます。

これを防ぐために、フォルダごとに仮想環境を立てて
それごとにライブラリのバージョンも管理できるpipenvを導入します!

pipenvのインストール

こちらも、コマンドプロンプトで操作します。

■ インストール方法

インストール自体は、「pip」という元からPythonに入っている
ライブラリを管理するツールでインストールできます!

pip install pipenv

pipのバージョンが古いと、インストールできないことがあるので
その場合は、下記コマンドでバージョンアップします。
(「python -m」をいれないと失敗するようです)

python -m pip install --upgrade pip

listでインストールされているものを表示したときにpipenvがあればOKです!
(付随するライブラリもインストールされていると思います)

pip list
Package          Version
---------------- ---------
pipenv           2022.9.24

■ 環境変数の設定

デフォルトだと、pipenvを利用した仮想環境は、pipenv専用のフォルダに入りますが
それだと、PyCharmという開発ツールを使うときに、うまく環境を認識しないので
仮想環境は、該当のフォルダに作成するように、環境変数を設定します。

左下の虫メガネで「環境変数」を検索し、「システム環境変数の編集」を選択

「環境変数」を押す

「ユーザー環境変数」に、「新規」から下記の変数を登録する

  • 変数名: PIPENV_VENV_IN_PROJECT
  • 変数値: true

pipenvを使ってみる

事前にcdで操作したいフォルダに移動しておきます。

cd C:\XXX

仮想環境を作る
(Pipfile/Pipfile.lock の2ファイル、「.venv」のフォルダができている)

pipenv install

※Pythonのバージョンを指定して、仮想環境を作成することもできる

pipenv install --python 3.8.10

仮想環境にライブラリを入れる
(Pipfile.lockに入れたライブラリの情報が記録される)

pipenv install scikit-learn

※バージョンを指定してのインストールもできる

pipenv install scikit-learn==1.2.0

ライブラリがちゃんと動くか確認してみましょう!

事前にテストプログラム(test.py)を作る

test.py
from sklearn.datasets import load_iris
iris = load_iris()
print(iris.data)

仮想環境でプログラムを実行する

pipenv run python test.py
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
…
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]

仮想環境に入って、プログラムを実行

> pipenv shell
(.venv) >python test.py
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
…
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]

仮想環境から抜ける

> exit

仮想環境の場所を表示する(今いるフォルダだけど)

> pipenv --venv
C:\XXX\.venv

仮想環境を削除する

> pipenv --rm

これで、仮想環境の作成・ライブラリのインストールができるようになったと思います!


クレバーな環境管理(案)

最後に、今のところクレバー?であろう環境管理のアイディアを共有します!

あらかじめ対象フォルダのPythonバージョンを設定しておく

> pyenv local 3.8.10
C:\XXX\.venv

Pythonのバージョンを指定して、仮想環境を作成
(上の設定と連動させる方法が見つからず、ちょいダサ…)

> pipenv install --python 3.8.10

入れたいライブラリがある程度定まっている場合は
「requirements.txt」を作成しておくと、一括で簡単にインストールできるようになります!
(バージョン指定もできる)

requirements.txt
scikit-learn == 1.2.0
pandas == 1.5.0

requirements.txtを参照して、ライブラリをインストール

> pipenv install -r requirements.txt
インストール確認
> pipenv run pip list
Package         Version
--------------- -------
pandas          1.5.0
scikit-learn    1.2.0

ここでも、ライブラリがちゃんと動くか確認してみましょう!

事前にテストプログラム(test02.py)を作って、実行する

test.py
import pandas as pd
from sklearn import datasets

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.head())
> pipenv run python test02.py
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2

ライブラリもバッチリ使えていますね!
PyCharmでも、フォルダを読み込ませるだけで、開発ができるようになります!

もしPCの移管等で、仮想環境を作り直したい場合も
「Pipfile.lock」にPythonのバージョンと入れているライブラリの記録があるので
そのファイルさえあれば、下記コマンドで復帰することもできます!

> pipenv sync

今回は、Windowsでpyenvとpipenvを使って、Pythonのバージョンや
ライブラリの管理を柔軟に行えるようにする方法を共有しました。

もし、WindowsでのPython利用に迷われている方がいらっしゃいましたら
ぜひ、お試しください!

Discussion