1. ホーム
  2. 記事一覧
  3. Pythonのライブラリを簡単に管理するpoetryとは?

2024.03.18

Pythonのライブラリを簡単に管理するpoetryとは?

はじめに

この記事では Python を用いてプログラミングを行う際にプロジェクトを便利に管理するパッケージマネージャー及び仮想環境管理ツールである Poetry について解説します。また、Poetry は Python のバージョンを指定できないため、この記事では Python のバージョン管理に Pyenv を用います。

Pythonのバージョン管理について詳しくは次の記事を御覧ください。

https://envader.plus/course/8/scenario/1076

パッケージマネージャーとは

まず、パッケージとはプログラムやファイルをひとまとめにしたものです。オープンソースソフトウェアやフリーソフトウェアとして提供されているパッケージはインターネット上のリポジトリで配布されています。

パッケージマネージャーはどのパッケージがインストールされたか記録し、新しいパッケージのインストールやアップデート、アンインストールを管理します。また、パッケージの依存関係を自動的に解決するため、複数のパッケージを同時にインストールすることも容易に行えます。

パッケージマネージャーには主に以下のような機能があります。

リポジトリの購読

リポジトリに接続してパッケージの一覧を取得し、必要なパッケージを検索できます。

パッケージのインストール・アップデート・アンインストール

パッケージを指定して、ダウンロードやインストールを行う事ができます。また、ローカルにあるソースコードや設定ファイルを元にパッケージ化してインストールすることができます。また、インストールしたパッケージのバージョンを管理できます。

依存関係の解決

あるパッケージが別のパッケージを必要とする場合、これを調べて自動的にインストールしたり、適切なバージョンになるよう管理したりできます。

パッケージの設定の管理

パッケージの設定スクリプトを利用して、自動的に設定を行えます。

パッケージマネージャーの使い方と種類

パッケージマネージャーは基本的にコマンドラインツールとして操作を行います。パッケージマネージャーは OS やディストリビューションによって異なります。また、プログラミング言語によってプログラムのソースコードを管理する場合にも用いられます。主要なパッケージマネージャーはこちらです。

OS別

Linux

  • APT
  • YUM

macOS

  • Homebrew

Windows

  • Winget

プログラミング言語別

Python

  • pip
  • Conda
  • Poetry

JavaScript

  • npm
  • Yarn

Ruby

  • RubyGems

PHP

  • Composer

Java

  • Maven
  • Gradle

Python には公式のパッケージインストーラーである pip や、データサイエンスや機械学習の分野でよく用いられる Conda の他に、今回取り上げる Poetry があります。

仮想環境とは

Python では各プログラムごとに使用したいパッケージが異なり、そのままインストールすると競合を起こしてしまいプログラムが正常に作動しないことがあります。そのため、各プログラムごとにパッケージを個別に管理する仕組みが必要となることがあります。これを仮想環境と呼びます。Python には標準で venv というツールが搭載されています。

Poetry とは

Poetry はパッケージマネージャーと仮想環境の両方の機能を兼ね備えたサードパーティ製のツールです。そのため、パッケージのインストールとアップデート、アンインストール、プロジェクトごとの環境構築を一つのツールで行うことができます。

Poetry のメリット

依存関係の一元管理とバージョン指定

Poetry では Python が公式に策定したバージョン管理用の設定ファイルである pyproject.toml を利用してプロジェクトの依存関係を一元管理することができ、またパッケージのインストール時に明示的にバージョンを指定することができます。

仮想環境の自動管理

Poetry はプロジェクトごとに自動的に仮想環境を作成します。そのため、システム全体の Python の環境に左右されることなく、依存関係を隔離できます。

ロックファイルによる再現性

Poetry でパッケージを最初にインストールすると、pyproject.toml に記録されたパッケージの依存関係を解決し、最新バージョンのパッケージをインストールします。インストールを完了するとインストールしたパッケージの正確なバージョンを poetry.lock ファイルに記録します。この poetry.lock ファイルが存在している場合にパッケージのインストールを行うと poetry.lock ファイルのバージョンを元にインストールを行うため、正確に環境を再現することができます。また、この poetry.lock ファイルを git などのバージョン管理システムで管理することで複数の異なる環境で正確にプロジェクトを再現することができます。

パッケージの公開

自分が作成したプログラムをパッケージとして公開することもサポートしています。デフォルトでは PyPI に公開されるようになっています。

クロスプラットフォーム

Poetry は Python 3.8 以上で動作させることができ、Windows・macOS・Linux で等しく動作することを目標に開発されています。

Poetry のインストール

Poetry は Python それ自体のバージョンを管理することは出来ないため、pyenv を利用します。また、今回は macOS での手順を紹介します。

  1. Homebrew をインストールする

pyenv はパッケージマネージャーの Homebrew でのインストールが推奨されているため、それをまずインストールします。

/bin/bash -c "$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh](https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh))"
  1. pyenv をインストールする

pyenv をインストールします。

brew install pyenv
  1. Poetry をインストールする

Poetry は公式でインストーラーが用意されているため、それを利用します。

curl -sSL https://install.python-poetry.org | python3 -

Poetry の基本的な使い方

  1. プロジェクトを作成

Poetry を用いて新しいプロジェクトを作成します。プロジェクトのディレクトリが作成され、pyproject.toml などのファイルがその中に生成されます。

poetry new [プロジェクト名]

Poetry new コマンドによってこのようなファイル・ディレクトリが作成されます。

すでに存在するプロジェクトを Poetry で管理したい場合は、代わりに以下のコマンドを実行してください。

cd [プロジェクトのディレクトリ]
poetry init
  1. Python のバージョンを固定

pyenv を用いて Python のバージョンを固定します。

cd [プロジェクトのディレクトリ]
pyenv local [Python のバージョン]
  1. パッケージとその依存関係の追加とインストール

プロジェクトに必要なパッケージを追加します。以下のコマンドを実行すると指定したパッケージが pyproject.toml に追加され、依存関係と正確なバージョンが poetry.lock に追加されます。また、同時にパッケージとその依存関係がインストールされます。

poetry add [パッケージ名]
  1. スクリプトの実行

Poetry は仮想環境を自動的に作成します。そのため、以下のコマンドで Python スクリプトを実行できます。また、pytest や black のようなコマンドラインツールをインストールした場合も同様に実行できます。

poetry run [スクリプト名]
poetry run [コマンド]

仮想環境を起動した状態にするには以下のコマンドを実行します。

poetry shell
exit
  1. 依存関係のインストール

プロジェクトの依存関係をインストールするには以下のコマンドを実行します。poetry.lock が存在しない場合は pyproject.toml に基づいてパッケージとその依存関係を最新のバージョンでインストールします。poetry.lock が存在する場合はそれに基づいて正確なバージョンのパッケージと依存関係がインストールされます。

poetry install
  1. パッケージの公開

プロジェクトをパッケージとして公開する前に、パッケージ化する必要があります。

poetry build

そのパッケージを公開します。デフォルトでは PyPI に公開されます。

poetry publish

まとめ

Poetry はパッケージとその依存関係を正確に一元管理し、仮想環境を管理し、プラットフォーム間で互換性を持たせることができます。そのため、Python プロジェクトの管理をより効率的で正確にし、再現性を高めることができます。

参考文献

https://python-poetry.org/docs/

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事