【M2 Mac】Pyenv/PoetryによるPython環境構築

新しく購入したまっさらなM2 MacにPython環境を構築した際の手順です.

  1. PyenvとPoetryのインストール
  2. PoetryでのPython環境構築
  3. VSCode連携

仮想環境を使ってシンプルに環境を作ることができます.

Pyenvのインストール

まずはPyenvのインストールを行います.

前提条件

MacのパッケージマネジャーであるHomebrewを使うため,インストールしていない場合は先にHomebrewをインストールしましょう.

以下のサイトが大変わかりやすいです.


① Pyenvのインストール

以下のコマンドをターミナルに入力してPyenvをインストールします.


brew install pyenv

② pathの設定

Pyenvにpathを通すため,以下のコマンドを実行します.
なお,最近のMacであればシェルがzshなのでzsh用のコマンドを記載しています.1


echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

上記で設定した内容を反映させるために以下のコマンドを実行します.


source ~/.zshrc

Pyenvのインストールを確認します.
以下のようにPyenvのバージョンが表示されればOKです.


pyenv --version

pyenv 2.3.2
③ Pythonを任意のバージョンでインストール

続いてPyenvを使用してPythonをインストールしていきます.
今回は例としてPythonのバージョン3.10.5をインストールします.
インストールするコマンドは以下のとおりです.


pyenv install 3.10.5

参考

インストール可能なPythonのバージョンは以下のコマンドで確認できます.


pyenv install -l

④ 使用するPythonの指定

先ほどインストールしたPythonのバージョンをグローバルで使用するために以下のコマンドを実行します.


pyenv global 3.10.5

Pythonのpathを以下のコマンドで確認します.
pathが.pyenv以下のPythonになっていればOKです.


which python

/Users/xxx/.pyenv/shims/python

Poetryのインストール

ここからはPoetryをインストールしていきましょう.

① Poetryのインストール

Poetryを以下コマンドでインストール.


curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

Poetryのインストールを確認します.
Poetryのバージョンが表示されればOKです.


poetry --version

Poetry version 1.1.14

仮想環境の作成

本記事ではMac全体で動かす2ための仮想環境を作成していきます.

参考

Poetryでは仮想環境のことをプロジェクトと呼んでいますが,本記事では仮想環境で統一しています.

① 仮想環境を作成する場所を決める

場所に決まりはないので,管理しやすい場所に作成します.
本記事ではホームディレクトリに仮想環境用のディレクトリを作成します. 以下のコマンドでホームディレクトリにglobal_envというディレクトリを作成し,そのディレクトリに移動できます.3


cd && mkdir global_env && cd global_env

コマンドの内容が知りたい方はこちらをクリック

上記のコマンドは以下の一連の操作を行なっています.

  1. cdコマンドでホームディレクトリに移動
  2. mkdir global_envで「global_env」という名前のディレクトリ作成
  3. cd global_envでglobal_envディレクトリ内に移動

上記で作成したディレクトリの下に仮想環境の実体となるディレクトリ4を配置するため,以下のコマンドで設定を変更します.


poetry config virtualenvs.in-project true 

設定の反映を確認します.
出力結果の下から2番目virtualenvs.in-projecttrueになっていればOKです.


poetry config --list

cache-dir = "/Users/xxx/Library/Caches/pypoetry"
experimental.new-installer = true
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/xxx/Library/Caches/pypoetry/virtualenvs

参考

この設定は一度すればOKです.

② 仮想環境の作成

Poetryを使って仮想環境を作成していきましょう.
まずは以下のコマンドでglobal_env_pjという名前の仮想環境を作る準備を行います.


poetry new global_env_pj

Created package global_env_pj in global_env_pj

上記のコマンドでglobal_env_pjというディレクトリが作成され,その配下にファイルなどが作成されます.

.
└── global_env_pj
    ├── README.rst
    ├── global_env_pj
    ├── pyproject.toml
    └── tests

cdコマンドで新しく作成されたglobal_env_pjディレクトリに移動しておきます.


cd global_env_pj

続いて,以下のコマンドを実行して仮想環境を使用できるようにします.


poetry install

上記のコマンドで.venvpoetry.lockが追加で作成されます.
これで仮想環境を構築することができました.

.
└── global_env_pj
    ├── .venv
    ├── README.rst
    ├── global_env_pj
    ├── poetry.lock
    ├── pyproject.toml
    └── tests
③ 仮想環境内へのライブラリインストール

上記の手順で仮想環境を構築した後は仮想環境内に必要なPythonのライブラリをインストールしていきます.
poetry.lockpyproject.tomlがある階層5で以下のようなコマンドを実行します.

  • poetry add [ライブラリの名称]

Pythonのライブラリであるpandasをインストールする場合は以下のコマンドです. 実行すると関連するライブラリなども合わせてインストールされます.


poetry add pandas

参考

インストールされたライブラリを確認したい場合は以下のコマンドです.


poetry show

仮想環境内におけるPythonの使い方

仮想環境内で構築したPythonを使うには,一時的か持続的かの2パターンがあります.
それぞれ確認していきましょう.

一時的に仮想環境を使ってPythonを動かす

一時的に仮想環境内のPythonを使ってPythonスクリプトを動かす際などに使用します.
poetry.lockpyproject.tomlがある階層で以下のようなコマンドを実行します.

  • poetry run python [pythonスクリプトのpath]

以下はカレントディレクトリにあるhoge.pyを仮装環境内のPythonで動かすコマンドです.


poetry run python hoge.py

      単価   数量     総額
いか   100  300  30000
えび   300   50  15000
かに  1000   20  20000

hoge.pyの中身は以下のとおりです.


import pandas as pd

df = pd.DataFrame([[100, 300, 30000], [300, 50, 15000], [1000, 20, 20000]],
                  index = ['いか', 'えび', 'かに'], 
                  columns = ['単価', '数量', '総額'])
print(df)

注意

上記のコマンドを動かすにはpoetry run pythonを実行する仮想環境にpandasがインストールされていることが必要です.

仮想環境内のPythonを使ってスクリプトを動かしたい場合は毎回poetry run pythonコマンドを使う必要があります.
仮想環境を持続的に動かしてPythonを実行したい場合は次項を参照してください.

持続的に仮想環境を動かす

仮想環境の持続化ON

仮想環境を持続的に使う6にはpoetry.lockpyproject.tomlがある階層で以下のようなコマンドを実行します.


poetry shell

上記のコマンドを実行すると,プロンプトの行頭に(.venv)という文字が追加されます.
この状態は仮想環境を稼働させた状態であるため,常に仮想環境を使ってスクリプト等を実行できます.
そのため,先ほどはpoetry run pythonで仮想環境内のPythonを実行をしましたが,(.venv)となっていれば以下のコマンドで仮想環境内でのPython実行が可能です.


python hoge.py

なお,ディレクトリを移動してもこの状態は持続し,Python以外のコマンドも通常どおり使うことができます.

仮想環境の持続化OFF

仮想環境の持続化を終了する場合は以下のコマンドです.
コマンドを実行すると行頭についていた(.venv)がなくなります.


exit

再度仮想環境を持続化させるには

使いたい仮想環境のディレクトリ(poetry.lockpyproject.tomlがある階層)に戻ってpoetry shellを実行しましょう.

VSCodeとの連携

仮想環境を使ってPythonを動かす設定をVSCodeに適用します.
この設定を一度行えば,今後は仮想環境内のPythonをVSCodeで実行することができます.

VSCodeのウィンドウの右下にあるインタープリタ枠をクリック

適当なPythonファイル7をVSCodeで開き,VSCodeのウィンドウの右下にあるインタープリタ枠をクリックします.
画像にある文字と実際の表記が多少異なっていてもOKです.

01

Pythonを動かす際に使いたい環境のpathを選択

ウィンドウ上部にインタープリタを選択できるポップアップが出てくるので,使いたいPoetry環境をクリック.
02

選択後,ウィンドウ右下のインタープリタ枠の表示が('.venv': poetry)のようになっていればOKです.
03

動作確認

ウィンドウ右上の実行ボタンを押して確認しましょう.
04

自動でターミナルが起動して仮想環境内でPythonを実行してくれます.
意図した実行結果であればOKです.

Jupyterを使用する場合

PythonをJupyterで動かしたい場合は以下の条件を満たせば可能です.

  • VSCodeのJupyter拡張機能をインストール
  • poetry add jupyter で仮想環境にJupyterをインストール
  • Jupyterがインストールされている仮想環境をVScode側で指定

ひとこと

Pythonの環境構築は色々ありますが,仮想環境を使うとクリーンかつシンプルなのでおすすめです.

余談ですが,久しぶりにMacを新調しました.
M2 Macは円安の影響もあって高値ですが,動作がすごく軽快で素晴らしいです.


  1. ターミナルでecho $SHELLというコマンドを実行するとシェルが確認できます(/bin/zshが表示されたらzshです). 

  2. 本来は開発/プロジェクト単位で仮想環境を作ったりしますが,今回は私用のMacで動作するようなPython環境を作ります. 

  3. ディレクトリの名前を変更するにはmkdir global_envcd global_envの「global_env」部分を好きな名称に変更してください.なおmkdircdの後には半角スペースがあるので,誤って消さないようにご注意ください. 

  4. 仮想環境の実体は.venvというディレクトリです.デフォルトでは~/Library/Caches/pypoetry/virtualenvs/に作成されますが,仮想環境のディレクトリ直下にある方が管理しやすいので設定を変更しています. 

  5. 本ブログの手順に合わせて仮想環境を作成している場合,pwdコマンドを実行して表示される階層が/Users/xxx/global_env/global_env_pjとなっている場所です. 

  6. 持続的に使うとは,明示的に止めるまで仮想環境下のPythonを利用することを指しています. 

  7. 拡張子が.pyのファイルです.なお,可能であればPoetryでインストールしたライブラリを使うようなコードを書いておきましょう(この後の動作確認でエラーなく動くことが確認できればPoetryを使ってPythonを動かしていることがわかるためです)