とりゅふの森

GCPデータエンジニアとして生きる

【Python入門】Windows10+pyenv+venvで最強のPython開発環境を構築する【2021年版】

f:id:true-fly:20210802001519p:plain

こんにちは、とりゅふです。今回はPythonの開発環境構築についてまとめました。 本日のテーマはこちら!

  • 1つの端末で複数のプロジェクトを独立した開発環境で開発できるようにする
  • 面倒な環境構築を手順化し、チームメンバーに共有できるようになる
  • Pythonのインストール、ライブラリのインストール自体は簡単ですが、プロジェクト毎に使っているPythonのバージョンが違ったり、ライブラリが違ったりと、環境の管理がなかなか面倒だったりします。

    そういったPythonの環境を、

    pyenvとvenvといった仮想環境を作成できる機能を利用し、複数のPython環境を管理する方法についてご紹介します。

    今回はWindowsでUbuntu 20.04を動かし(Windows Subsystem for Linux)、その上にPython仮想環境を構築します。

    pyenvとは

    pyenvとはPythonのバージョンを複数インストールして、簡単に切り替えることができるようにしたツールです。

    Python2.7とPython3.8が自分の端末に同居してしまい、今どっちを使っているのかわからない…とか、このプロジェクトではPython3.6、このプロジェクトではPython3.7といったバージョンの違うプロジェクトがあったとしても、このpyenvを使えばコマンドで簡単に今実行したいバージョンへと切り替えることができます。

    f:id:true-fly:20210802215230p:plain
    pyenvのイメージ

    venvとは

    venvとは、Python3.3から標準で搭載された、pipによるパッケージ管理をプロジェクト毎に独立させることができる機能です。

    venvを用いずにそのままpip installでPYPIパッケージをインストールすると、自分の端末全体の共通の場所にインストールされてしまうため、複数プロジェクトを開発する時のパッケージの管理が非常に大変です。そういった複数環境でもそれぞれ独立した環境を用意し、その環境の中でpip installすることで、異なるバージョンのパッケージを利用することができるようになります。

    f:id:true-fly:20210802215559p:plain
    venvのイメージ

    pyenv、venvを使う環境の構築

    WSL2 Ubuntu 20.04のインストール

    以下を参考にインストール、設定をします。

    https://www.pc-koubou.jp/magazine/40465

    Python3がインストール済みなのを確認する

    WSLのUbuntu 20.04にはすでにPythonがインストール済みなので、コマンドで確認してみます。

    $ python3 --version
    Python 3.8.5
    

    必要なパッケージのインストール

    Pythonの違うバージョンをインストールする際必要になるミドルウェアです。下記コマンドでインストールします。

    $ sudo apt update
    $ sudo apt upgrade
    $ sudo apt install -y python3.8-venv gcc make build-essential libssl-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev libffi-dev
    

    pyenvのインストール

    以下のコマンドでインストールします。

    $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    $ echo -e 'eval "$(pyenv init --path)"' >> ~/.bash_profile
    

    Ubuntuを再起動すると、pyenvが使えるようになります。

    pyenvでPythonの別バージョンをインストールする

    Python3.7.11をインストールしてみます。

    $ pyenv install 3.7.11
    

    インストール後、pyenv versionsでインストールされているPythonのバージョンの一覧を確認できます。 *マークが現在有効となっているPythonのバージョンです。systemとあるのが、元々システムにインストールされていたPythonのバージョンで、その下の3.7.11が、先程pyenv installでインストールしたバージョンです。
    /home/trueflyの部分が自分のユーザのホームディレクトリです。

    $ pyenv versions
    * system (set by /home/truefly/.pyenv/version)
      3.7.11
    

    この時点ではまだpythonのバージョンはシステムにインストールされた状態のままです。

    $ python3 --version
    Python 3.8.10
    $ python --version
    pyenv: python: command not found
    
    The `python' command exists in these Python versions:
      3.7.11
    
    Note: See 'pyenv help global' for tips on allowing both
          python2 and python3 to be found.
    

    pyenv local [version]で、今いるディレクトリ配下のPython環境を切り替えます。.python-versionというファイルが作成されます。

    $ pyenv local 3.7.11
    $ pyenv version
    3.7.11 (set by /[カレントディレクトリ]/.python-version)
    $ cat .python-version
    3.7.11
    

    python --versionで、pythonコマンドが使えるようになっていること、バージョンが3.7.11になっていることを確認します。
    また、1階層上のディレクトリに移動すると、pythonコマンドが使えないことも確認します。

    $ python --version
    Python 3.7.11
    $ cd ..
    $ python --version
    pyenv: python: command not found
    
    The `python' command exists in these Python versions:
      3.7.11
    
    Note: See 'pyenv help global' for tips on allowing both
          python2 and python3 to be found.
    

    ディレクトリ配下ではなく、Ubuntu全体でバージョンを変更したいときは、pyenv global [バージョン]を実行します。
    元に戻す場合は、pyenv global systemを実行します。

    venvの仮想環境を実行する

    .python_versionのあるディレクトリで、以下のコマンドを実行し、venv仮想環境を作成します。
    .venvというディレクトリが作成されます。

    $ python -m venv .venv
    

    以下のコマンドで、venv仮想環境に入ることができます。

    $ source .venv/bin/activate
    

    venv仮想環境の中で、pip install [ライブラリ]を実行することで、仮想環境内にライブラリをインストールできます。

    $ pip install requests
    

    これで開発環境の準備は完了です!

    まとめ

    myprojectという新規のPythonプロジェクトを作成するときの手順です。
    以下のコマンドを上から順に実行してあげればOKです。

    $ # 新規ディレクトリ作成
    $ mkdir myproject
    $ cd myproject/
    $ # Gitリポジトリ初期化
    $ git init
    Initialized empty Git repository in /mnt/c/git/works/myproject/.git/
    $ # pyenv環境切り替え(インストール指定ないバージョンがあればインストールする)
    $ pyenv local 3.7.11
    $ python --version
    Python 3.7.11
    $ # venv環境作成
    $ python -m venv .venv
    $ # .venvディレクトリを.gitignoreに追加
    $ echo ".venv" >> .gitignore
    $ # venv環境切り替え
    $ source .venv/bin/activate
    

    これで必要に応じてPythonのバージョンを切り替えたり、パッケージの管理を独立させて管理することができるようになりました。
    開発環境構築って毎回プログラミングを始める時、あるいは新しい職場でプロジェクトに参加する時、苦戦しがちではありますが、今回ご紹介した記事が自分や自分のチームの環境構築手順作成の一助になれば幸いです。