Pythonライブラリ

この講座では、Pythonのモジュールやパッケージの仕組みと標準ライブラリの活用方法について学びます。

  • モジュールとパッケージの利用
  • importの書き方(import, from...import, import as)
  • 標準ライブラリの使用(OS操作、日付・時刻、JSON)
  • 外部ライブラリのインストール(pip)

1. 事前準備

この講座のハンズオンでは、以下のツールやアカウントが必要です。まだ準備できていない場合は、リンク先の手順に沿って準備をお願いします。

2. モジュールの利用

2.1 ファイルの分割

プログラムが大きくなると、すべてのコードを1つのファイルに書き続けるのは現実的ではありません。Pythonでは、コードを複数のファイルに分割して管理できます。Pythonのコードが記述されたファイル(.py ファイル)のことをモジュールと呼びます。機能ごとにファイルを分けることで、コードの見通しがよくなり、一度書いた機能を複数のプログラムから再利用できるようになります。

2.2 import文

別のファイルに書かれたコードを読み込むにはimport文を使います。import文の書き方にはいくつかの種類がありますが、まずは基本となる import から学んでいきます。

📝 モジュール名について
import で指定するモジュール名は、ファイル名から .py を除いたものです。たとえば person.py というファイルを読み込む場合、モジュール名は person になります。

import を使うと、モジュール全体を読み込むことができます。

import モジュール名

この書き方で読み込んだ場合、使用時は モジュール名.クラス名()モジュール名.関数名() のようにモジュール名を付けて呼び出します。

実際に試してみましょう。まず、任意の場所にmy_projectフォルダを作成します。

my_project/  ← このフォルダを作成

作成したフォルダをVisual Studio Codeで開きます。Visual Studio Codeのメニューから「ファイル」→「フォルダーを開く」を選択し、作成したフォルダを開いてください。

前の講座Python関数とクラスで作成した人物クラスを別ファイルに切り出します。Visual Studio Codeのエクスプローラーで右クリックし、「新しいファイル」を選択してperson.pyという名前で作成してください。

my_project/
└── person.py  ← このファイルを作成

作成したファイルに以下の内容を記述して保存します。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        return f"こんにちは、{self.name}です"

    def is_adult(self):
        return self.age >= 18

次に、person.pyを読み込んで使用するファイルを作成します。my_projectフォルダ内にmain.pyという名前でファイルを作成します。

my_project/
├── person.py
└── main.py  ← このファイルを作成

作成したファイルに以下の内容を記述して保存します。

import person

p = person.Person("田中太郎", 25)
print(p.greet())
print(f"成人かどうか: {p.is_adult()}")

ターミナルでmain.pyを実行します。

python main.py

実行すると以下のように出力されます。

こんにちは、田中太郎です
成人かどうか: True

import person でモジュール全体を読み込み、person.Person(...) のようにモジュール名を付けてクラスにアクセスしています。

2.3 from...import文

from...import を使うと、モジュールの中から特定のクラスや関数だけを読み込むことができます。

from モジュール名 import クラス名や関数名

この書き方で読み込んだ場合、モジュール名を付けずに直接名前を使えるため、コードが簡潔になります。

先ほどのmain.pyの内容を以下に書き換えて実行してみましょう。

from person import Person

person1 = Person("田中太郎", 25)
print(person1.greet())
print(f"成人かどうか: {person1.is_adult()}")

実行すると以下のように出力されます。

こんにちは、田中太郎です
成人かどうか: True

from person import Person と書くことで、Person を直接使えるようになりました。import person の場合は person.Person(...) とモジュール名を付ける必要がありましたが、from...import では Person(...) だけで済みます。

💡 ポイント
importfrom...import のどちらを使うかは状況によりますが、特定のクラスや関数だけを使う場合は from...import の方がコードが読みやすくなります。

2.4 import as(別名を付ける)

as を使うと、モジュールに別名を付けて読み込むことができます。モジュール名が長い場合や、コード中で何度も使う場合に便利です。

main.py に以下の内容を記述して実行してみましょう。

import person as ps

p = ps.Person("田中太郎", 25)
print(p.greet())

実行すると以下のように出力されます。

こんにちは、田中太郎です

import person as ps と書くことで、person モジュールを ps という短い名前で使えるようになりました。

2.5 importの使い分け

ここまで学んだ3つのimportの書き方をまとめます。

書き方 用途
import モジュール名 モジュール全体を読み込む import person
from モジュール名 import 名前 特定の機能だけを読み込む from person import Person
import モジュール名 as 別名 別名を付けて読み込む import person as ps
💡 ポイント
from モジュール import * のようにワイルドカードで全てを読み込む書き方は推奨されません。名前の衝突が起きやすく、コードの可読性が下がります。必要な機能だけを明示的に読み込むようにしましょう。

2.6 if __name__ == "__main__" とは

モジュールを import で読み込むと、そのファイル内のコードが上から順番に実行されます。関数やクラスの定義だけであれば問題ありませんが、print() などの実行コードが書かれていると、読み込んだだけで意図せず実行されてしまいます。

if __name__ == "__main__":
    # このファイルが直接実行されたときだけ動く処理

if __name__ == "__main__": は、そのファイルが直接実行されたときだけ処理を実行し、import されたときは実行しないようにするための記述です。Pythonでは、直接実行されたファイルの __name__ 変数には自動的に "__main__" という値が設定され、import された場合はモジュール名が設定されます。

実際に試してみましょう。person.py を以下の内容に書き換えて保存します。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        return f"こんにちは、{self.name}です"

if __name__ == "__main__":
    p = Person("田中太郎", 25)
    print(p.greet())

ターミナルで person.py を直接実行します。

python person.py

実行すると以下のように出力されます。

こんにちは、田中太郎です

person.py を直接実行しているため __name__"__main__" となり、if ブロック内の処理が実行されています。一方、main.py から import person で読み込んだ場合は、Person クラスの定義だけが読み込まれ、if ブロック内の print() は実行されません。

💡 ポイント
if __name__ == "__main__": は、関数やクラスの定義と実行部分を分離するために使われます。これにより、ファイルを「直接実行するスクリプト」としても「他のファイルから読み込むモジュール」としても使えるようになります。

3. パッケージの利用

モジュールを使ってファイルを分割できるようになりましたが、プロジェクトが成長するにつれてモジュールの数も増えていきます。たとえば、人物に関するモジュール、チームに関するモジュール、データベースに関するモジュールなど、さまざまなファイルが1つのフォルダに並ぶことになります。ファイルが10個、20個と増えてくると、目的のモジュールを探すだけでも手間がかかり、プロジェクト全体の見通しが悪くなります。

この問題を解決するために、Pythonでは関連するモジュールをディレクトリ(フォルダ)でまとめて管理できます。このように複数のモジュールをディレクトリでまとめたものをパッケージと呼びます。パッケージを使えば、機能ごとにモジュールを整理でき、大規模なプロジェクトでもコードの管理がしやすくなります。

3.1 パッケージの作成

パッケージを作成するには、ディレクトリの中に __init__.py ファイルを配置します。先ほどのプロジェクトをパッケージ構成に変更してみましょう。

Visual Studio Codeのエクスプローラーで右クリックし、「新しいフォルダー」を選択してmodelsフォルダを作成します。

my_project/
├── person.py
├── main.py
└── models/  ← このフォルダを作成

パッケージの初期化ファイルを作成します。modelsフォルダを右クリックし、「新しいファイル」を選択して__init__.pyという名前で作成してください。内容は空のままで保存します。

my_project/
├── person.py
├── main.py
└── models/
    └── __init__.py  ← このファイルを作成(空ファイル)
📝 init.py について
__init__.py は、そのディレクトリがPythonパッケージであることを示すファイルです。空ファイルでも構いませんが、パッケージの初期化コードやインポート設定を記述することもできます。Python 3.3以降では __init__.py がなくてもパッケージとして認識されますが、明示的に配置することが推奨されます。

先ほど作成したperson.pymodelsフォルダ内に移動します。Visual Studio Codeのエクスプローラーでperson.pyをドラッグし、modelsフォルダにドロップしてください。

my_project/
├── main.py
└── models/
    ├── __init__.py
    └── person.py  ← ここに移動

チームクラスを定義するファイルを作成します。modelsフォルダ内にteam.pyという名前でファイルを作成します。

my_project/
├── main.py
└── models/
    ├── __init__.py
    ├── person.py
    └── team.py  ← このファイルを作成

作成したファイルに以下の内容を記述して保存します。

class Team:
    def __init__(self, team_name, leader, member_count):
        self.team_name = team_name
        self.leader = leader
        self.member_count = member_count

    def show_detail(self):
        return f"チーム「{self.team_name}」 リーダー: {self.leader.name}{self.leader.age}歳) メンバー: {self.member_count}人"

3.2 パッケージの読み込み

パッケージ内のモジュールを読み込むには、パッケージ名.モジュール名 の形式で指定します。main.pyの内容を以下に書き換えます。

from models.person import Person
from models.team import Team

person = Person("田中太郎", 25)
team = Team("開発チーム", person, 5)
print(team.show_detail())

from models.person import Person は、models パッケージの中にある person モジュールから Person クラスを読み込むという意味です。パッケージを使わない場合は from person import Person でしたが、パッケージ内のモジュールを指定するときは models.person のようにドット(.)でつなげて書きます。

実行すると以下のように出力されます。

チーム「開発チーム」 リーダー: 田中太郎(25歳) メンバー: 5人

from models.person import Personfrom models.team import Team でパッケージ内の各モジュールからクラスを読み込み、Team のコンストラクタに Person オブジェクトを渡した結果、チーム情報が正しく表示されています。

4. 標準ライブラリの使用

ここまでは自分で作成したファイルを読み込む方法を学びました。Pythonには、日付操作やJSON処理など、すぐに使える豊富な標準ライブラリが用意されています。標準ライブラリは自分でインストールする必要がなく、同じ import 文で読み込んですぐに使うことができます。たとえば import os と書くだけで、OS情報の取得やファイルパスの操作などの機能が利用できるようになります。

ここからは、実務でよく使われる代表的な標準ライブラリのモジュールを紹介します。

4.1 OS操作(osモジュール)

osは、OS(オペレーティングシステム)の機能にアクセスするための標準ライブラリのモジュールです。ファイルやディレクトリの操作、パスの処理、環境変数の取得など、システム管理やインフラ運用で頻繁に使用します。import os で読み込んで使います。

os.getcwd()(カレントディレクトリの取得)

os.getcwd()

os.getcwd() は引数を取らず、現在の作業ディレクトリ(カレントディレクトリ)のパスを文字列(str)で返します。

main.py に以下の内容を記述して実行してみましょう。

import os

current_dir = os.getcwd()
print(f"カレントディレクトリ: {current_dir}")

実行すると以下のように出力されます(パスは実行環境によって異なります)。

カレントディレクトリ: /Users/username/my_project

os.getcwd() が現在の作業ディレクトリのパスを返し、f-stringで整形して表示しています。パスの値は実行環境によって異なります。

os.listdir()(ディレクトリ内の一覧取得)

os.listdir(パス)

os.listdir() は引数にディレクトリのパス(str)を1つ受け取り、そのディレクトリ内のファイル名とフォルダ名をリスト(list)で返します。引数を省略するとカレントディレクトリの一覧を返します。

import os

files = os.listdir(".")
print(f"ファイル一覧: {files}")

実行すると以下のように出力されます(内容は実行環境によって異なります)。

ファイル一覧: ['main.py', 'models', 'data.json']

os.listdir(".") がカレントディレクトリ内のファイル名とフォルダ名をリストで返しています。main.py(ファイル)、models(フォルダ)、data.json(ファイル)がリストの要素として表示されています。

📝 . とは
"." はカレントディレクトリ(現在の作業ディレクトリ)を意味します。".." は1つ上の親ディレクトリを意味します。これらはPythonに限らず、OS全般で使われる表記です。

os.path.join()(パスの結合)

os.path.join(パス1, パス2, ...)

os.path.join() は引数に複数のパス文字列を受け取り、OSに適した区切り文字(Linuxでは /、Windowsでは \)で結合した文字列(str)を返します。文字列の + で直接パスを結合するとOSごとの違いが問題になりますが、os.path.join() を使えばどのOSでも正しいパスを生成できます。

import os

path = os.path.join("models", "person.py")
print(f"結合したパス: {path}")

data_path = os.path.join("/Users", "username", "my_project", "data.json")
print(f"絶対パス: {data_path}")

実行すると以下のように出力されます。

結合したパス: models/person.py
絶対パス: /Users/username/my_project/data.json

os.path.join() が引数のパス文字列をOSに適した区切り文字 / で結合しています。1つ目は相対パス同士、2つ目は絶対パスの各要素を結合した例です。

os.path.exists()(パスの存在確認)

os.path.exists(パス)

os.path.exists() は引数にファイルまたはディレクトリのパス(str)を1つ受け取り、そのパスが存在するかどうかを True または False で返します。

import os

print(os.path.exists("main.py"))
print(os.path.exists("not_found.txt"))
print(os.path.exists("models"))

実行すると以下のように出力されます。

True
False
True

main.py は存在するため Truenot_found.txt は存在しないため Falsemodels はディレクトリとして存在するため True が返されています。

💡 ポイント
os.path.isfile() はファイルかどうか、os.path.isdir() はディレクトリかどうかを判定します。os.path.exists() はファイルでもディレクトリでも存在すれば True を返します。

os.environ(環境変数の取得)

os.environ[キー名]
os.environ.get(キー名, デフォルト値)

os.environ はOSの環境変数を辞書のように扱えるオブジェクトです。os.environ[キー名] でキーを指定して値を取得できます。キーが存在しない場合はエラー(KeyError)が発生するため、os.environ.get() を使うとデフォルト値を指定できて安全です。

import os

# PATH環境変数を取得
path = os.environ.get("PATH", "未設定")
print(f"PATH: {path}")

# 存在しない環境変数はデフォルト値を返す
db_host = os.environ.get("DB_HOST", "localhost")
print(f"DB_HOST: {db_host}")

実行すると以下のように出力されます(PATH の値は実行環境によって異なります)。

PATH: /usr/local/bin:/usr/bin:/bin
DB_HOST: localhost

PATH 環境変数はOSに設定されているため、その値が表示されています。DB_HOST は環境変数として存在しないため、os.environ.get() の第2引数で指定したデフォルト値 "localhost" が返されています。

📝 環境変数とは
環境変数は、OS上で動作するプログラムに設定値を渡すための仕組みです。データベースの接続先やAPIキーなど、環境ごとに異なる値をコードに直接書かずに管理できます。サーバの運用やアプリケーションのデプロイで頻繁に使われる重要な概念です。

主要なos操作まとめ

関数 説明
os.getcwd() カレントディレクトリを取得 os.getcwd()"/Users/username"
os.listdir() ディレクトリ内の一覧を取得 os.listdir(".")["main.py", ...]
os.path.join() パスを結合 os.path.join("a", "b.py")"a/b.py"
os.path.exists() パスの存在確認 os.path.exists("main.py")True
os.environ.get() 環境変数を取得 os.environ.get("HOME")"/Users/username"

4.2 日付・時刻操作(datetimeモジュール)

datetimeは、日付と時刻を扱うための標準ライブラリのモジュールです。データの記録やスケジュール管理などで使用します。from datetime import datetime で読み込んで使います。

datetime.now()(現在日時の取得)

datetime.now()

datetime.now() は引数を取らず、現在の日付と時刻を datetime オブジェクトとして返します。datetime オブジェクトには yearmonthdayhourminutesecond などの属性があり、それぞれの値を取り出すことができます。

main.py に以下の内容を記述して実行してみましょう。

from datetime import datetime

now = datetime.now()
print(f"現在日時: {now}")
print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")

実行すると以下のように出力されます(日時は実行時の値になります)。

現在日時: 2025-01-15 14:30:00.123456
年: 2025
月: 1
日: 15

datetime.now() が現在の日時を datetime オブジェクトとして返し、そのまま表示すると 年-月-日 時:分:秒.マイクロ秒 の形式になります。.year.month.day で個々の値を取り出せています。

strftime()(日時を文字列に変換)

datetimeオブジェクト.strftime(フォーマット文字列)

strftime() は引数にフォーマット文字列(str)を1つ受け取り、指定した形式で整形した文字列(str)を返します。フォーマット文字列の中で %Y%m などの指定子を使って、表示形式を指定します。

from datetime import datetime

now = datetime.now()
print(f"日付: {now.strftime('%Y-%m-%d')}")
print(f"時刻: {now.strftime('%H:%M:%S')}")
print(f"整形: {now.strftime('%Y/%m/%d %H:%M:%S')}")

実行すると以下のように出力されます(日時は実行時の値になります)。

日付: 2025-01-15
時刻: 14:30:00
整形: 2025/01/15 14:30:00

strftime() がフォーマット文字列に従って日時を文字列に変換しています。%Y-%m-%d で「年-月-日」、%H:%M:%S で「時:分:秒」、%Y/%m/%d %H:%M:%S で「年/月/日 時:分:秒」の形式にそれぞれ整形されています。

主要なフォーマット指定子の一覧です。

指定子 意味
%Y 西暦4桁 2025
%m 月(ゼロ埋め) 01
%d 日(ゼロ埋め) 15
%H 時(24時間) 14
%M 30
%S 00

strptime()(文字列を日時に変換)

datetime.strptime(日付文字列, フォーマット文字列)

strptime() は第1引数に日付を表す文字列、第2引数にその文字列の形式を指定するフォーマット文字列を受け取り、datetime オブジェクトを返します。外部から取得した日付データを扱う際に使います。

from datetime import datetime

date_str = "2025-01-15 10:30:00"
date_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")

print(f"年: {date_obj.year}")
print(f"月: {date_obj.month}")
print(f"日: {date_obj.day}")

実行すると以下のように出力されます。

年: 2025
月: 1
日: 15

strptime() が文字列 "2025-01-15 10:30:00" をフォーマット "%Y-%m-%d %H:%M:%S" に従って解析し、datetime オブジェクトに変換しています。変換後のオブジェクトから .year.month.day でそれぞれの値を取り出せています。

📝 strftime と strptime の違い
strftime() は日時オブジェクトを文字列に変換します(format の f)。strptime() は文字列を日時オブジェクトに変換します(parse の p)。データの出力時に strftime() を使い、データの読み込み時に strptime() を使う場面が多いです。

timedelta(日付の計算)

timedelta(days=日数, hours=時間数)

timedeltafrom datetime import timedelta で読み込みます。引数に days(日数)や hours(時間数)などを指定して、時間の差分を表すオブジェクトを作成します。datetime オブジェクトに +- で加減算することで、未来や過去の日時を求められます。

from datetime import datetime, timedelta

now = datetime.now()

one_day_later = now + timedelta(days=1)
print(f"1日後: {one_day_later.strftime('%Y-%m-%d')}")

three_days_ago = now - timedelta(days=3)
print(f"3日前: {three_days_ago.strftime('%Y-%m-%d')}")

two_hours_later = now + timedelta(hours=2)
print(f"2時間後: {two_hours_later.strftime('%Y-%m-%d %H:%M:%S')}")

実行すると以下のように出力されます(日時は実行時の値になります)。

1日後: 2025-01-16
3日前: 2025-01-12
2時間後: 2025-01-15 16:30:00

timedelta(days=1) を加算して翌日の日付、timedelta(days=3) を減算して3日前の日付、timedelta(hours=2) を加算して2時間後の日時がそれぞれ計算されています。strftime() で見やすい形式に整形して表示しています。

4.3 JSONの扱い(jsonモジュール)

JSON(JavaScript Object Notation)は、データを交換するための軽量なテキストフォーマットです。APIの応答や設定ファイルなど、さまざまな場面で使われています。JSONの構造はPythonの辞書やリストとよく似ており、Pythonでは標準ライブラリの json モジュールを使って簡単に変換できます。import json で読み込んで使います。

json.loads()(JSON文字列 → Python辞書)

json.loads(JSON文字列)

json.loads() は引数にJSON形式の文字列(str)を1つ受け取り、Pythonの辞書(dict)やリスト(list)に変換して返します。

main.py に以下の内容を記述して実行してみましょう。

import json

json_string = '{"name": "田中太郎", "age": 18, "grade": 3}'

student = json.loads(json_string)

print(student)
print(student["name"])

実行すると以下のように出力されます。

{'name': '田中太郎', 'age': 18, 'grade': 3}
田中太郎

json.loads() によってJSON文字列がPythonの辞書に変換され、通常の辞書と同じようにキーを指定して値にアクセスできます。

json.dumps()(Python辞書 → JSON文字列)

json.dumps(辞書またはリスト, ensure_ascii=False)

json.dumps() は第1引数にPythonの辞書やリストを受け取り、JSON形式の文字列(str)に変換して返します。ensure_ascii=False を指定すると日本語がそのまま出力されます。指定しない場合、日本語は \uXXXX のようなエスケープ文字に変換されます。

import json

student = {
    "name": "田中太郎",
    "age": 18,
    "grade": 3
}

json_string = json.dumps(student, ensure_ascii=False)
print(json_string)

実行すると以下のように出力されます。

{"name": "田中太郎", "age": 18, "grade": 3}

json.dumps() がPythonの辞書をJSON形式の文字列に変換しています。ensure_ascii=False を指定しているため、日本語がそのまま表示されています。

json.load()(JSONファイル → Python辞書)

json.load(ファイルオブジェクト)

json.load() は引数に open() で開いたファイルオブジェクトを1つ受け取り、JSONファイルの内容をPythonの辞書やリストに変換して返します。

まず、読み込み用のJSONファイルを作成します。my_projectフォルダ内にdata.jsonという名前でファイルを作成してください。

my_project/
├── main.py
└── data.json  ← このファイルを作成

作成したファイルに以下の内容を記述して保存します。

{
    "name": "田中太郎",
    "age": 18,
    "grade": 3,
    "subjects": ["数学", "英語", "国語"]
}

次に、main.py に以下の内容を記述して実行してみましょう。

import json

with open("data.json", "r", encoding="utf-8") as f:
    student = json.load(f)

print(student["name"])
print(student["subjects"])

実行すると以下のように出力されます。

田中太郎
['数学', '英語', '国語']

json.load() がJSONファイルの内容をPythonの辞書に変換しています。変換後は通常の辞書と同じようにキーを指定して値にアクセスでき、student["name"] で文字列、student["subjects"] でリストが取得できています。

json.dump()(Python辞書 → JSONファイル)

json.dump(辞書またはリスト, ファイルオブジェクト, ensure_ascii=False, indent=4)

json.dump() は第1引数にPythonの辞書やリスト、第2引数に書き込み先のファイルオブジェクトを受け取り、JSON形式でファイルに書き出します。indent を指定すると、読みやすいようにインデント付きで整形されます。戻り値はありません。

import json

student = {
    "name": "田中太郎",
    "age": 18,
    "grade": 3,
    "subjects": ["数学", "英語", "国語"]
}

with open("output.json", "w", encoding="utf-8") as f:
    json.dump(student, f, ensure_ascii=False, indent=4)

print("output.json に保存しました")

実行すると output.json が作成されます。ファイルを開くと以下のような内容が書き込まれています。

{
    "name": "田中太郎",
    "age": 18,
    "grade": 3,
    "subjects": [
        "数学",
        "英語",
        "国語"
    ]
}

json.dump() がPythonの辞書をJSON形式でファイルに書き出しています。indent=4 を指定しているため、4スペースのインデント付きで読みやすく整形されています。ensure_ascii=False により日本語もそのまま出力されています。

💡 ポイント
json.loads() / json.dumps()文字列との変換、json.load() / json.dump()ファイルとの変換です。末尾に s が付くかどうかで区別できます(s は string の略です)。

5. 外部ライブラリとpip

ここまでは、Pythonに標準で含まれている標準ライブラリを紹介しました。標準ライブラリだけでも多くのことができますが、世界中の開発者が作成・公開している外部ライブラリ(サードパーティライブラリ)を利用することで、さらに幅広い機能を簡単に使うことができます。

5.1 PyPIとは

外部ライブラリは、PyPI(Python Package Index)というリポジトリに公開されています。PyPIには数十万以上のパッケージが登録されており、HTTP通信、データベース操作、Webフレームワークなど、さまざまな用途のライブラリを見つけることができます。

5.2 pipによるインストール

外部ライブラリをインストールするには、pipというパッケージ管理ツールを使用します。pipはPythonに同梱されているため、別途インストールする必要はありません。

基本的な構文

Windowsの場合:

pip install パッケージ名

Macの場合:

pip3 install パッケージ名
💡 ポイント
macOSではpipの代わりにpip3を使用します。これは、macOSにプリインストールされているPython 2系のpipと区別するためです。本講座では、pipコマンドはWindows版とmacOS版の両方を記載しています。お使いの環境に合わせて実行してください。

requestsライブラリのインストール

実際に試してみましょう。HTTP通信を簡単に行えるライブラリであるrequestsをインストールします。

Windowsの場合:

pip install requests

Macの場合:

pip3 install requests

以下のようなメッセージが表示され、インストールが完了します。

Successfully installed requests-x.x.x

requestsライブラリの使用

インストールしたrequestsを使って、外部のAPIからデータを取得してみます。main.pyに以下の内容を記述して実行してみましょう。

import requests

response = requests.get("https://httpbin.org/json")
data = response.json()
print(data)

実行すると以下のように出力されます。

{'slideshow': {'author': 'Yours Truly', 'date': 'date of publication', 'slides': [{'title': 'Wake up to WonderWidgets!', 'type': 'all'}, {'items': ['Why <em>WonderWidgets</em> are great', 'Who <em>buys</em> WonderWidgets'], 'title': 'Overview', 'type': 'all'}], 'title': 'Sample Slide Show'}}

requests.get()でURLに対してHTTPリクエストを送信し、response.json()でレスポンスのJSONデータをPythonの辞書に変換しています。標準ライブラリだけでは複雑になるHTTP通信が、requestsを使うことでわずか数行で実現できます。

📝 httpbin.orgとは
httpbin.orgは、HTTPリクエストのテスト用に公開されているWebサービスです。/jsonにアクセスするとサンプルのJSONデータが返されるため、HTTPライブラリの動作確認に便利です。

5.3 requirements.txt(依存関係の管理)

プロジェクトで使用している外部ライブラリの一覧をrequirements.txtというファイルに記録しておくことで、他の開発者やサーバ上で同じライブラリを一括インストールできます。

現在インストールされているライブラリの一覧をrequirements.txtに出力するには、以下のコマンドを実行します。

Windowsの場合:

pip freeze > requirements.txt

Macの場合:

pip3 freeze > requirements.txt

実行すると、requirements.txtが作成されます。ファイルを開くと、以下のようにインストール済みのライブラリとそのバージョンが記録されています。

certifi==2024.12.14
charset-normalizer==3.4.1
idna==3.10
requests==2.32.3
urllib3==2.3.0

requestsだけをインストールしましたが、requestsが内部で使用しているライブラリ(certificharset-normalizerなど)も一緒に記録されています。このように、pip freezeはインストールされているすべてのライブラリを出力します。また、このファイルに新しいライブラリ名とバージョンを手動で追加すれば、pip install -r requirements.txtの実行時にそのライブラリもインストール対象に含めることができます。

requirements.txtに記録されたライブラリを一括インストールするには、以下のコマンドを実行します。

Windowsの場合:

pip install -r requirements.txt

Macの場合:

pip3 install -r requirements.txt
💡 ポイント
requirements.txtというファイル名はPythonの公式仕様で決められたものではなく、コミュニティで広く使われている慣習的な名前です。pip install -rはファイル名を自由に指定できるため、別の名前でも動作しますが、多くのPythonプロジェクトでrequirements.txtが使われているため、この名前に従うのが一般的です。チーム開発やサーバへのデプロイでは、requirements.txtを使ってライブラリのバージョンを統一することが重要です。後の講座でも外部ライブラリを使用する際にpip installを使用しますので、このコマンドの使い方を覚えておいてください。

6. まとめ

この講座では、Pythonのモジュールの仕組みとライブラリの活用方法について学びました。

  • ファイルを分割して import文 で読み込むことで、コードを整理・再利用できる
  • from...importimport as で、読み込み方を柔軟に変えられる
  • パッケージを使えば、ディレクトリ単位でモジュールを管理できる
  • 標準ライブラリも同じ import で読み込んで使える
  • osモジュールでディレクトリ操作、パス処理、環境変数の取得ができる
  • datetimeモジュールで日付・時刻の取得、フォーマット、計算ができる
  • jsonモジュールでJSONとPythonの辞書・リストを相互変換できる
  • pip(Windowsではpip、macOSではpip3)を使って外部ライブラリをインストールできる
  • requirements.txtでプロジェクトの依存関係を管理できる