📘

pyenvとvenvを利用したPython環境の構築(Windows、macOS対応)

2023/09/14に公開

はじめに

Pythonを始める上で最初につまずくのは実行環境の構築だと思います。私もずいぶん苦労した思い出があります。

さらに頭を悩ませるのがバージョン管理です。ライブラリのバージョンはもちろん、Python自体のバージョンも管理の必要が出てきます。自分でライブラリを作るようになるとこの必要性を強く感じます。

そこで今回はpyenvとvenvを併用して、Pythonとライブラリのバージョンを管理しつつ環境を構築する方法について解説します。

本記事の想定はPythonはある程度使ったことがあって、バージョン管理をきちんとやりたくなってきた人です。また、GitHubの操作がたびたび出てくるので慣れていた方が分かりやすいです。

前提

本記事ではコマンドプロンプトを使いますが、PowerShellでも可能です。

ユーザー名はriuとして説明していきます。皆様のユーザー名で読み替えてください。

pyenvを使ったPythonバージョンの管理

pyenvはPythonのバージョン管理をするための外部ツールです。pyenv自体が複数のPythonを保持しており、呼び出しに応じて必要なPythonを提供してくれる感じです。

pyenvを使うときはPythonを公式からインストールする必要はありません。既にインストールしてあっても問題は起きませんが、混ざってしまうので消しておいた方が無難だと思います。

macOSでの注意点

macOSでpyenvをインストールするときに私が引っかかった注意点を二つ紹介します。

xzのインストール

xzとはファイルの圧縮形式で、これを解凍するツールを事前に入れておく必要があります。Homebrew経由で簡単に入れられるので入れておきましょう。Homebrewを使わずに済む方法がないか探しましたが、あまり見つかりませんでした。
これをしておかないとpyenvでPythonをインストールするときにエラーが出ます。

$ brew install xz

gitのcore.autocrlfをfalseにする

pyenvにはいくつかインストール方法があり、GitHubリポジトリからクローンしてくる方法があります。この時autoclrfをtrueにすると改行コードの問題が発生して、以下のエラーが出ます。

Usr/bin/env: 'bashr': No such file or directory pyenv

なお、core.autocrlfの設定は以下で行います。--localにすることで.pyenvフォルダ(pyenvのインストール先)にのみこの設定を効かせることができます。

$ cd /Users/riu/.pyenv
$ git config --local core.autocrlf false

pyenvのインストール

ユーザーディレクトリである/Users/riuにインストールする想定で解説を進めていきます。

  • macOS
    pyenv公式のREADMEにインストール手順が書いてありますので、それに従いましょう。いくつかインストール方法があります。私はWindowsと操作を揃えたかったのでGitHubからクローンしてくる方法を行いました。

  • Windows
    pyenvはWindowsに対応していませんので、pyenv-winを使用します。同じくREADMEにインストール方法が解説されているので従ってください。

最終的には/Users/riu/.pyenvというディレクトリが作成されます。

任意のバージョンのPythonを取得

それではpyenvを使ってPythonを取得します。まずは以下のコマンドで取得できるバージョンを見てみましょう。実行するとインストールできるPythonのバージョンが表示されます。

$ pyenv install --list

今回は執筆時点で最新の3.11.4を入れていきます。ついでにpyenvでインストールしたPythonのバージョンを確認しておきましょう。

$ pyenv install 3.11.4

$ pyenv versions
3.11.4

pyenvにおけるバージョン管理の仕組み

pyenvによるバージョン管理にはlocalとglobalがあります。

  • global
    .pyenv以下のディレクトリ全てにデフォルトで適用されるバージョンで/Users/riu/.pyenv/pyenv-win/versionに情報が入っています。

  • local
    特定のディレクトリにのみ適用されるバージョンで、設定するとそのディレクトリ内に.python-versionというファイルが作成され、そこに情報が入っています。

venvを使った仮想環境の構築(ライブラリのバージョン管理)

venvはPython自体に入っている仮想環境を立てるための機能(モジュール)です。仮想環境ごとにライブラリをインストールできるので結果としてライブラリのバージョン管理になります。

仮想環境の置き場の作成(任意)

私はユーザーディレクトリ直下に/Users/riu/venvというディレクトリを作成し、その中に仮想環境を作成しています。仮想環境は複数作るので、ユーザーディレクトリ直下に作るとごちゃごちゃして分かりにくくなります。

私の場合、コードをクラウドに上げるためユーザーディレクトリ下で仮想環境を用意しています。仮想環境はファイルが大量になるので、通信に負荷がかかりすぎるためです。
もしクラウドを使わずにローカルで進めるならプロジェクトディレクトリ下に仮想環境を用意してもいいかもしれません。

pyenvによるPythonのバージョン設定

先ほどインストールしたpyenvを使ってPythonのバージョンを設定します。今回はlocalで設定するので、まず設定したいディレクトリに移動します。

$ cd /Users/riu/venv

次にpyenvの状態を確認しましょう。pyenvをインストールした直後なら以下のメッセージが出てくるはずです。

$ pyenv version
No global/local python version has been set yet. Please set the global/local version by typing:
pyenv global 3.7.4
pyenv local 3.7.4

ではバージョンを設定します。ついでにPythonのバージョンが正しく設定されていることを確認しておきましょう。

$ pyenv local 3.11.4

$ pyenv version
3.11.4 (set by C:\Users\riu\venv\.python-version)

$ python -V
3.11.4

これで仮想環境を立てる準備ができました。

仮想環境の作成

それでは仮想環境を作成します。pyenvで選択されているPythonバージョンで仮想環境が立てられます。仮想環境のPythonバージョンは立てた時点で決まるので、この後pyenvのlocalを変えても仮想環境のバージョンは変わりません。tmp_venvは仮想環境の名前なので、お好みで付けてください。

$ python -m venv tmp_venv

仮想環境を立てたら以下のコマンドで仮想環境に入ります。

# コマンドプロンプト
$ /Users/riu/venv/tmp_venv/Scripts/activate.bat

# PowerShell
$ /Users/riu/venv/tmp_venv/Scripts/Activate.ps1

# macOS (ターミナル)
$ source /Users/riu/venv/tmp_venv/bin/activate

仮想環境に入ることができたら(tmp_venv) C:\Users\riu\venv>のように先頭に環境名が表示されます。

これで仮想環境に入ることができました。追加のライブラリをインストールしてください。ライブラリのインストールには主にpipとcondaがありますが、基本的にデフォルトで使えるpipで進めた方がいいと私は考えています。
仮想環境を利用するときはWindowsなら/Users/riu/venv/tmp_venv/Scripts/python.exe、macOSなら/Users/riu/venv/tmp_venv/Scripts/pythonにインタープリターがあるので適宜IDEに渡してください。

最後に

pyenvとvenvを使ってPython環境の作成する方法を解説しました。
最終的にはPythonとライブラリのバージョン管理をした方がいいと思いますが、慣れていないと手間がかかりすぎるのも事実です。まずはvenvだけやってみるなども良いと思います。何度も環境を作り直すことになりますが、そうすることで慣れますし理解も深まります。

Discussion