記事の要約

pyenv + poetry を使用した仮想環境構築を Windows と Mac で行ったのでその時の内容を纏めます。


導入 : 仮想環境とは

Python における仮想環境とは、PCマシン自体にインストールされた Python 実行環境 (実環境)の他に、同一マシン内に構築された (実環境とは切り離された) 別の Python 実行環境のことを指します。

仮想環境の特徴は、同一マシン内で異なるバージョンの Python や パッケージを利用することができることです。この特徴により、「使いたいパッケージがあるが自マシンの環境では利用できない。でも下手に Python のバージョン変えると他のパッケージの依存関係が壊れて使えなくなるかも…」といった悩みを解決することができます。
また、Python の仮想環境は一つのフォルダ内に全てが構築される為、構築した仮想環境の廃棄も簡単にできます。
マシン内の実環境と仮想環境のイメージ
Fig1. マシン内の実環境と仮想環境のイメージ

Python の仮想環境構築・管理ツールには、Python に元々備わっている物も含め複数存在します。今回は、仮想環境構築・パッケージの依存関係管理ツールの poetry と Pythonのバージョン管理ツールの pyenv を使用した仮想環境を構築します。


pyenv と poetry のインストール

Windows と Mac でインストールする方法が異なる為に分けて書きます。

pyenv のインストール と Path の設定

Windows

  1. Powershell を立ち上げて、以下のコードを実行することで、ユーザーフォルダ (USERPROFILE) に pyenv をインストールします

     pip install --target $env:USERPROFILE 
    • git がある場合は git で入れることも可能です。
      git clone https://github.com/pyenv-win/pyenv-win.git "$env:USERPROFILE/.pyenv"
  2. /.pyenv に環境変数を作成し、更に Path の一番上に /.pyenv/pyenv-win/shims/.pyenv/pyenv-win/binを追加します。
    以下のコードは Powershell での環境変数設定するコードです。

    [System.Environment]::SetEnvironmentVariable(>[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + '¥.pyenv¥pyenv-win¥','User')
    [System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + '¥.pyenv¥pyenv-win¥','User')
    [System.Environment]::SetEnvironmentVariable([System.Environment]::SetEnvironmentVariable('Path',$env:USERPROFILE + '¥.pyenv¥pyenv-win¥bin;'+ $env:USERPROFILE + '¥.pyenv¥pyenv-win¥shims;'+[System.Environment]::GetEnvironmentVariable('Path','User'),'User')
  3. pyenv とPathが通っているか、pyenvのバージョンから、確認します。

    pyenv --version

    ここで Error が生じなければ pyenv のインストールは成功です。

Mac

  1. ターミナルを立ち上げて、 gitpyenv をインストールします。

    git clone git://github.com/yyuu/pyenv.git ~/.pyenv
    
    • Homebrew からもインストールも可能です。
      brew install pyenv
      
  2. デフォルトのシェルの確認を行います。

    echo $SHELL
    

    /bin/zsh と出れば zshell が、/bin/bash と出ればbash がデフォルトで開くシェルです。
    それぞれ設定ファイルは、.zshrc 及び .bash_profileです。

  3. デフォルトの方のシェルの設定ファイルに pyenv のPATHを追加します。
    vim などで設定ファイル編集を編集し、以下の記述 (pyenvのPath) を追記します。

    ### 以下の Path を .zshrc or .bash_profile に付け加える
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv init -)"
    export PATH="$HOME/.local/bin:$PATH"
    
  4. pyenv とPathが通っているか、pyenvのバージョンから、確認します。

    pyenv --version

    ここで Error が生じなければ pyenv のインストールは成功です。

poetry のインストール + Path の設定

Windows

  1. Powershell で、以下のコードを実行することで poetry をインストールします

    (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -
  2. \.poetry\bin をPath に追加する

    [System.Environment]::SetEnvironmentVariable([System.Environment]::SetEnvironmentVariable('Path',$env:USERPROFILE + '¥.poetry¥bin;'+[System.Environment]::GetEnvironmentVariable('Path','User'),'User')
  3. poetry とPathが通っているか、poetryのバージョンから、確認します。

    poetry --version

Mac

  1. ターミナルで以下のコードを実行することで poetry をインストールします

    curl -sSL https://install.python-poetry.org | python3 -
  2. デフォルトの方のシェルの設定ファイルに poetry のPATHを追加します

    export PATH="$HOME/.local/bin:$PATH"
  3. poetry とPathが通っているか、poetryのバージョンから、確認します。

    poetry --version

仮想環境の構築

pyenvで特定のバージョンの python をインストール

  1. 自身のマシンにインストール可能な python のバージョンを確認します

    pyenv install --list
  2. 使用可能な python のバージョンの中から、バージョンを選び、インストールします (例 : Python 3.8.3)

    pyenv install 3.8.3

フォルダの仮想環境化

1. 仮想環境にするフォルダを作成し、そこへ移動します

(例 : /Users/username/env というフォルダを仮想環境にする)
以下コマンドでフォルダへの移動します

cd /Users/username/env

2. poetry の設定を変更する

仮想環境のPythonやパッケージが置かれるフォルダ (venv) が仮想環境内部 (例の場合、/Users/username/envの下) に生成される様に設定します

poetry config virtualenvs.inproject true

3. フォルダを仮想環境化します

以下のコマンドを実行します

poetry init

この時、Python のバージョンやライセンス、著者等の情報を求められるので、適当に埋めるもしくはスキップして下さい

また、コマンド実行後仮想環境にしたフォルダ内に pyproject.toml ファイルがあることを確認ください

  • pyproject.toml は仮想環境の情報、 3 で埋めたPythonバージョンや著者の情報などが入っています。

4. 仮想環境にインストールした python を適用します

  1. pyenv local で仮想環境内でのみ別のバージョンの python を適応させます。 (例: Python 3.8.3)

    pyenv local 3.8.3
  2. pyproject.toml の Python のバージョンの欄を、 pyenv local で設定したバージョンに書き換えます

  3. poetry env コマンドで toml を参照して venv ファイルを作成します。

    poetry env use python

6. 仮想環境で使用したい python パッケージを導入します

パッケージは poetry add コマンドでインストールすることができます。(例 : numpy を入れたいとする)

poetry add numpy

仮想環境内においた requirements.txt などを使用して一気にパッケージを導入する場合は、

poetry add $(cat requirements.txt)

とすると一気にインストールできます。
しかし、パッケージ同士の依存関係によりインストールの失敗が生じる可能性もあるので、依存関係がきついパッケージから順々にいれていくことをお勧めします。


仮想環境で実行する

1. py ファイルの実行

仮想環境のフォルダ内部に、 pyファイルを入れてください。(例: test.py)
その後、以下のコマンドを打ち込むとファイルの実行ができます。

poetry run python test.py

2. jupyter notebook の起動・実行

jupyter notebook を起動するためには、python の jupyter パッケージが必要なので、これをインストールします。

poetry add jupyter

その後、以下のコマンドを打ち込むと jupyter nootebook が起動します

poetry run jupyter notebook