Techブログ

Tech blog

Pythonの話

[Python]仮想環境とは

カテゴリ:Pythonの話

2020.09.03

このエントリーをはてなブックマークに追加

こんにちは!今回は、初心者の僕が、Pythonの仮想環境という聞き馴染みの無い言葉でつまづいたため、簡単にどういうものなのか説明して、使い方を紹介したいと思います。Pythonの仮想環境はインストールしたモジュールやパッケージ、またPythonのバージョンごとに分離された環境のことです。

Pythonで開発をしていると、あるパッケージを使うために、また別のパッケージが必要になる、などの依存関係が発生してきます。また、Python2系で動いていたパッケージはPython3系では動かないなど、それぞれのバージョン違いによる問題も出てきます。

このような問題を解決するために、Pythonの仮想環境を作ってソフトウェアごとにバージョンの違うパッケージを用意することで、同じシステム内の環境を汚したり、壊したりすること無く開発することが出来ます。

仮想環境は簡単に作って、簡単に捨てることができるので、試しに動かしてみたいパッケージがある場合にも、Pythonの仮想環境は役立ちます。

Pipenv

Pythonで開発するときに,プロジェクト毎のパッケージ管理や仮想環境の構築を簡単に自動で行ってくれるツールです.
パッケージのインストールならpip,仮想環境の構築ならvirtualenv(venv)を使えば対応できますが,pipenvはそれらをまとめてより簡単に扱えるようにサポートしてくれます.またnpm-scriptsのようにコマンドに名前をつけて登録することもできます.

Pipenvのインストール

Pipenv自体のインストールはpipから行えます.

Pipenvの使い方

初期化

まずは新規のプロジェクトの初期化方法です.
プロジェクトのディレクトリに移動して次のコマンドを実行すると,自動で仮想環境が作成されてPipfileというファイルが生成されます.Pythonのバージョンの指定は3.7など,より詳細に指定もできます.

またpyenvを使用している場合は,環境に入っていないバージョンを指定したときにはpyenvと連動してPythonのインストールが自動的に行われます.

パッケージのインストール

パッケージのインストールは次のように行います.このときも(まだ作っていなければ)仮想環境が自動的に作られて,そこにパッケージがインストールされます.またpipenvからパッケージをインストールするとPipfileにパッケージが追加されます.

Pipfile

またこのときにPipfile.lockが自動で生成され,実際にインストールされたパッケージの詳細なバージョンや依存パッケージの情報などが記録されます.これをもとに他PCで環境を再現することが簡単にできます.

pipenvを使うと,このようにパッケージの管理や仮想環境の生成が自動的に行われて便利です.チームにPythonに不慣れなメンバーがいても,pipを直接使ってrequirements.txtを更新し忘れてしまったり,仮想環境を作らずに関係のないパッケージまで管理されてしまったりを防ぐことができます.

開発用パッケージのインストール

通常のパッケージのインストールの他に--devオプションを使うことで,開発環境のみで使うパッケージを別枠(dev-packages)で管理しながらインストールすることができます.これを利用して開発プロジェクト内でコードの整形や静的開発の利用を促すこともできます.

Pipfile

このように開発用のパッケージを切り分けて管理できると,コードの品質向上につなげることができるパッケージをチームに布教しやすいです.(後述するScriptsも活用するとより良いです.)

Pipfile,Pipfile.lockから環境の再現

すでに誰かが環境を作成してPipfileがgitなどで管理されていると,他のメンバーも簡単に環境を作成することができます.
次の方法だと,Pipfileの中で管理されているパッケージがインストールされます.このときにインストールされた内容でPipfile.lockが更新されます.

同様にPipfile.lockが手元にあり,PipfileでなくPipfile.lockから詳細なバージョンなども合わせて環境を作成したい場合は次のようにします.
この場合は,PipfileでなくPipfile.lockを使ってインストールされ,環境を再現することができます.

上記のように既に開発中のプロジェクトに新しいメンバーが追加になっても,開発環境をコマンド一つで準備することができます.

lock

Pipfileの内容からPipfile.lockファイルを更新する際はlockコマンドを使います。

特に pipenv install 時にバージョンを指定しない場合、パッケージのバージョンアップの際にこのコマンドを使うことになります。

sync

syncコマンドはPipfile.lockの内容を仮想環境に適用するために利用します。

このコマンドはlockコマンドとセットで利用することが多いと思います。

update

updateコマンドはlockとsyncを一度に行うものです。

--dry-runオブションをつけると、バージョンのアップデートができる(古くなった)パッケージがわかります。

なお、pipenv install時にバージョンを指定している場合、--dry-runオプションが無くても新しいバージョンのインストールはスキップされます。その場合はpipenv installで任意のバージョンを指定して上書きインストールをします。

run

仮想環境内でコマンドを実行する場合はrunコマンドを使います。試しにインストールされたパッケージ一覧を表示してみます。

shell

仮想環境の中に入る時にはshellコマンドを使います。

clean

仮想環境にはあるがPipfile.lockで定義されていないパッケージがある場合、cleanコマンドでそれらのパッケージを仮想環境から削除できます。

以上で、簡単なPipenvの使い方の紹介を終わります!

一覧へ戻る

記事をカテゴリから探す