メインコンテンツへスキップ

pyproject.tomlからpip installコマンドでPythonのライブラリをインストールする

·1918 文字·4 分
目次

はじめに
#

Pythonのプロジェクト設定ファイルpyproject.tomlに記載されたPythonのライブラリを、パッケージ管理システムpipでインストールする方法を解説します。

pyproject.tomlは、Pythonプロジェクトのメタ情報を保存するためのTOML形式の設定ファイルです。pyproject.tomlが導入された経緯についてはPEP 518に、基本的な仕様についてはPEP 621にそれぞれ記載されています。

pyproject.tomlには以下のような情報を記載できます。

  1. 使用するサードパーティ製ライブラリや、そのバージョン情報
  2. 作成したPythonパッケージの名称・バージョン情報
  3. 2.のパッケージの実行に必要なPythonのバージョン

1.を記述できるPythonの設定ファイルとしてrequirements.txtがありますが、このファイルは2.や3.を記述できる仕様になっていません(コメントとしては記述できます)。特に複数人でPythonパッケージを開発する場合、pyproject.tomlを使用して開発環境を共有できると便利です。

また、pyproject.tomlに対応したPythonパッケージ管理ツールとしてPoetryがありますが、Poetryを導入できない場合もあります。そこで本記事では、Python標準のパッケージ管理システムpipを使って、pyproject.tomlに記載されたPythonのサードパーティ製ライブラリをインストールする方法を解説します。

この記事が想定する読者

  • pipコマンドが使用できる
  • pyproject.tomlを使用して、ライブラリ情報を管理・共有したい

この記事で述べないこと

  • pyproject.tomlの詳細な仕様

検証環境

  • Python v3.11.6
  • pip v24.0
  • Windows 10 Home Ver. 22H2

パッケージのフォルダ構成
#

この記事では、開発するPythonパッケージが以下のフォルダ構成であるとします。

(root_directory)/
├── pyproject.toml
└── mypackage/
    ├── __init__.py
    ├── ...
    └── mymodule.py

パッケージの一番上の階層にpyproject.tomlを置きます。また、パッケージのソースコードはmypackage/フォルダ以下に置くものとします。

pyproject.tomlの記述例
#

pyproject.tomlの記述例を以下に示します。

[project]
name = "mypackage"
version = "0.1.0"
dependencies = [
    "numpy==1.26.2",
    "scikit-learn>=1.3.2",
]

[project.optional-dependencies]
dev = [
    "ipython~=8.17.2",
    "pylint",
]
test = [
    "pytest==7.4.3",
    "pytest-html==4.1.1",
]

[project]テーブルのname, versionには、開発するパッケージの名前とバージョン情報をそれぞれ記載します。pipでパッケージをインストールするにあたって、この2つは必須です。

さらに、dependenciesにパッケージの実行に必要なサードパーティ製ライブラリを記述します。ここでは、NumPyとScikit-learnを記載しています。バージョンを指定することも可能です。

また、[project.optional-dependencies]テーブルには、パッケージの実行に必要でないサードパーティ製ライブラリを記述できます(もちろん省略可能です)。一般的にこのテーブルに記載するライブラリは、開発者のみ使用し、パッケージのユーザは使用しないライブラリとなります。

[project.optional-dependencies]テーブルのライブラリは、dev, testなど、任意の名前の複数のキーに分けて記述できます。1つのキーに記載されたライブラリは、まとめてインストール可能です。上記の例では、以下の意図で2つのキーに分けています。

  • dev: 一般的な開発者が使用するライブラリ
  • test: テスト担当者のみ使用するライブラリ

ライブラリのインストール方法
#

最後に、pyproject.tomlからpipでライブラリをインストールする方法を述べます。Pythonの環境を汚したくない場合、必要に応じてvenvなどの仮想環境を作成して下さい。

まず、コマンドプロンプトまたはPowerShellを起動し、pyproject.tomlがある階層に移動します。

[project]テーブルのdependenciesに記載されたライブラリをインストールする場合、以下のコマンドを実行します。

pip install .

最後の.が必要なことに注意します。このコマンドを実行すると、pipがpyproject.tomlを自動的に探してライブラリをインストールしてくれます。

一方、[project.optional-dependencies]テーブルに記載されたライブラリをインストールする場合、以下のようなコマンドを実行します。

pip install .[dev]
pip install .[test]

.の後の角括弧の中にキーを指定します。

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

PythonのR1721(不要な内包表記)を抑制する
·630 文字·2 分
PythonでPylintを使用したときに表示されるリファクタリングメッセージR1721(不要な内包表記)を抑制する方法を解説します。
Pythonの統合開発環境Spyderの起動を高速化する
·426 文字·1 分
Pythonの統合開発環境Spyderのプラグインを無効化して、起動を高速化する方法を説明します。
Scikit-learnのDecisionTreeClassifierクラスによる分類木
·3865 文字·8 分
分類木 (classification tree) は、分析したデータが属するカテゴリー(クラス)を予測する分類アルゴリズムの1つです。分類木では、Yes/Noによる分岐を何度か繰り返して、分類の予測を返します。
Cloudflare Pages上でSphinxサイトを自動デプロイする
·2235 文字·5 分
静的サイトホスティングサービスのCloudflare Pages上でドキュメント生成ツールSphinxを自動デプロイする手順を備忘録としてまとめました。
Sphinxでサイトマップを作る
·812 文字·2 分
Sphinxでサイト構造を示すサイトマップ (sitemap.xml) を作成する方法をまとめました。
Pythonのclassmethodとstaticmethodの使い分け
·1611 文字·4 分
Pythonのクラスにおいて、インスタンスメソッドとクラスメソッド (classmethod), スタティックメソッド (staticmethod) を使い分ける方法をまとめました。