1. はじめに
Pythonの仮想環境管理するために複数の選択ありますよね。conda, Virtualenv, venv, pipenv, poetry…
なぜ使うかと言うと、
- 依存関係の衝突回避:異なるプロジェクト間でのライブラリの衝突を防ぐ
- クリーンな開発環境の確保:必要なパッケージのみをインストールし、環境を整理する
- プロジェクトの再現性向上:他の開発者が同じ環境を簡単にセットアップできる
- デプロイメントの簡素化:開発環境と本番環境の違いを最小限に抑える
- 開発者がプロジェクトの依存関係をより簡単に管理し、コードの品質とプロジェクトの安定性を向上させる
よくわからない方へ:小難しいことを書きましたが、ローカル環境にいろんなアプリ・プロジェクト作るとライブラリのバージョンとか、よくわからない競合があって予想しないようなエラーにあって大変になることあります。1つ1つのアプリを新品のPCに入れる感覚で作れたら、そんなエラーないよねってことで、擬似的に綺麗な新品の環境作るのが仮想環境だと思えばいいと思います。
2. 仮想環境ツールの比較
Pythonのプロジェクト管理において、仮想環境は開発効率とコードの品質を保つ上で欠かせない要素です。ここでは、Pythonの仮想環境を管理するための主要なツールを比較します。
Conda
- 適用分野: Condaは、特にデータサイエンスや機械学習プロジェクトに。Python以外の言語のパッケージも管理できるため、複雑なデータ分析環境のセットアップに強み
- 特徴: 複数のプラットフォームに対応し、非Pythonの依存関係も扱えます。ただし、他のツールに比べるとやや重たいから私は嫌い
- 商用は有料らしい。個人は無料
Virtualenvとvenv
-
Virtualenv
- 概要: サードパーティ製のツールで、Python 2を含む古いバージョンのPythonにも対応
- 特徴: 複数のプロジェクト間で依存関係を隔離し、独立した開発環境を作れる
-
venv
- 概要: Python 3.3以降に標準で組み込まれた仮想環境ツール
- 特徴: 標準機能であるため、Python 3を使用するプロジェクトにおいては最も基本的な選択肢
Pipenv
- 目的: 仮想環境の管理と依存関係の解決を一元化し、シンプルで使いやすい。私は好き
-
利点:
Pipfile
とPipfile.lock
を使用して依存関係を明確にし、プロジェクトごとの環境を簡単にセットアップできます。また、セキュリティの脆弱性をチェックする機能もある
昔記事書いたので使い方は良ければ見てください。
Poetry
- 機能: 依存関係の管理だけでなく、パッケージの作成と公開もある
- 比較: Pipenvと比較して、Poetryはより複雑な依存関係を扱うことができ、パッケージングと公開のプロセスが統合されてる。これにより、ライブラリの開発者にとってはいいらしい
PipenvとPoetry
PipenvとPoetryの違いがわからん!となりそうですね。
Pipenv
主に開発ワークフローの簡素化を目指しており、特にアプリケーション開発者向け
-
依存関係の管理:依存関係の管理には
Pipfile
とPipfile.lock
を使用し、これは従来のpip
のrequirements.txt
ファイルを置き換えてるかんじ - 仮想環境の管理:プロジェクトのための仮想環境を自動的に作成し管理
-
パッケージのインストール:パッケージをインストールし、自動的に
Pipfile
に追加される - ワークフロー:アプリケーション開発のためのシンプルで明確なワークフローを重視し、依存関係と環境を管理するための簡単なコマンド使える
Poetry
アプリケーションとライブラリの開発者の両方使える。パッケージングと配布に重点を置いています。
-
依存関係の管理:依存関係の管理には
pyproject.toml
を使用し、これはPEP 518で指定されたファイル形式で、ロジェクトのパッケージングとビルドに関する包括的なツールを目指している - 仮想環境の管理:Pipenvと同様に仮想環境を管理。依存関係の解決をより洗練された方法になってる
- パッケージのインストールとビルド:依存関係の管理だけでなく、ライブラリとアプリケーションのビルド、パッケージング、公開を容易かつ一貫性のあるものにできる
- 依存関係の解決:Pipenvと比べてより強力な依存関係リゾルバーを持ち、複雑な依存関係のツリーをより良く扱うことができる
- ワークフロー:プロジェクトの作成から依存関係の管理、パッケージング、公開に至るまで、プロジェクト管理のより全体的なアプローチ
主要な違い
はっきり言って使い勝手は似てます。Poetryの方が多機能というべきでしょうか。
-
設定ファイル:Pipenvは
Pipfile
とPipfile.lock
を使用し、Poetryはpyproject.toml
とpoetry.lock
を使用。pyproject.toml
はプロジェクト設定の統一を目指す新しいアプローチ - 依存関係の解決:Poetryはより進んだ依存関係リゾルバーを持ってる
- パッケージングと公開:PoetryはライブラリのパッケージングとPyPIへの公開のための組み込みサポートを提供し、ライブラリ開発者にとってより適した選択肢
- シンプルさと包括性:Pipenvは基本的なアプリケーション開発においてよりシンプルで直接的と見なされることが多い一方で、Poetryはアプリケーションとライブラリの両方のライフサイクルをカバーするより包括的なソリューションを提供
どれつかえばいい?
丸投げ感ありますがプロジェクトの要件や個人の好みによって適切なものを選択したらいいです。
Condaは複雑なデータサイエンスプロジェクトに、PipenvとPoetryはより一般的なPython開発に適しており、venvは最近のプロジェクトならまずどこでもデフォルトで入ってるからその点で結構利点あり。
PoetryとPipenvどっちつかう?
ライブラリの管理が重要!って場合やライブラリ開発したいって言うならPoetry
普通のアプリ作るならPipenvって感じでいいのではないでしょうか。Pipenvの方がシンプルで、アプリ作る上ではそれほど問題ないので。
私は、勉強や趣味で簡単なアプリ作ったりする時はPipenv
使います。一番新しいのはPoetryなのでそっちでもいいと思います。