はじめに
この記事では 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 での手順を紹介します。
- 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))"
- pyenv をインストールする
pyenv をインストールします。
brew install pyenv
- Poetry をインストールする
Poetry は公式でインストーラーが用意されているため、それを利用します。
curl -sSL https://install.python-poetry.org | python3 -
Poetry の基本的な使い方
- プロジェクトを作成
Poetry を用いて新しいプロジェクトを作成します。プロジェクトのディレクトリが作成され、pyproject.toml などのファイルがその中に生成されます。
poetry new [プロジェクト名]
Poetry new コマンドによってこのようなファイル・ディレクトリが作成されます。
すでに存在するプロジェクトを Poetry で管理したい場合は、代わりに以下のコマンドを実行してください。
cd [プロジェクトのディレクトリ]
poetry init
- Python のバージョンを固定
pyenv を用いて Python のバージョンを固定します。
cd [プロジェクトのディレクトリ]
pyenv local [Python のバージョン]
- パッケージとその依存関係の追加とインストール
プロジェクトに必要なパッケージを追加します。以下のコマンドを実行すると指定したパッケージが pyproject.toml に追加され、依存関係と正確なバージョンが poetry.lock に追加されます。また、同時にパッケージとその依存関係がインストールされます。
poetry add [パッケージ名]
- スクリプトの実行
Poetry は仮想環境を自動的に作成します。そのため、以下のコマンドで Python スクリプトを実行できます。また、pytest や black のようなコマンドラインツールをインストールした場合も同様に実行できます。
poetry run [スクリプト名]
poetry run [コマンド]
仮想環境を起動した状態にするには以下のコマンドを実行します。
poetry shell
exit
- 依存関係のインストール
プロジェクトの依存関係をインストールするには以下のコマンドを実行します。poetry.lock が存在しない場合は pyproject.toml に基づいてパッケージとその依存関係を最新のバージョンでインストールします。poetry.lock が存在する場合はそれに基づいて正確なバージョンのパッケージと依存関係がインストールされます。
poetry install
- パッケージの公開
プロジェクトをパッケージとして公開する前に、パッケージ化する必要があります。
poetry build
そのパッケージを公開します。デフォルトでは PyPI に公開されます。
poetry publish
まとめ
Poetry はパッケージとその依存関係を正確に一元管理し、仮想環境を管理し、プラットフォーム間で互換性を持たせることができます。そのため、Python プロジェクトの管理をより効率的で正確にし、再現性を高めることができます。
参考文献
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.14
仮想環境とパッケージ管理をまとめて解決! pipenvの基本
チームメンバーと開発環境を共有しようとしたら、環境の不一致でトラブルになったことはありませんか?Pipenvは、Python開発の効率を大幅に高めるためのツールです。仮想環境の作成とパッケージ管理を一元化することで、プロジェクトの依存関係を明確かつ簡単に管理できるようになります。
- Python
2024.04.29
超初心者向け!プログラミングの基礎を30分で身につける
「副業できたらな」「リモートで仕事したいな」と考えたことはありませんか?スキル次第では実現可能です。とりあえず、プログラミングスキルを身につけると、次のようなメリットがあります。
- Python
- プログラミング