Pythonの仮想環境(venv)とパッケージ管理(pip)の基本


1. 仮想環境(venv)とは

仮想環境は、プロジェクトごとに独立したPython環境を作成するためのツールです。これにより、異なるプロジェクトで異なるバージョンのパッケージを使用することができます。

2. 仮想環境の作成と使用

仮想環境の作成

# プロジェクトディレクトリに移動
cd my_project

# 仮想環境の作成
python3 -m venv venv

仮想環境の有効化

# Unix/macOS
source venv/bin/activate

# Windows
venv\Scripts\activate

仮想環境の無効化

deactivate

3. パッケージ管理(pip)

pipの基本

pipはPythonのパッケージ管理ツールで、パッケージのインストール、アップグレード、アンインストールを行います。

パッケージのインストール

pip install package_name

パッケージのアップグレード

pip install --upgrade package_name

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

pip uninstall package_name

インストール済みパッケージの一覧表示

pip list

パッケージの詳細情報

pip show package_name

4. requirements.txtの使用

requirements.txtの作成

プロジェクトで使用しているパッケージを一覧にして、他の開発者が同じ環境を再現できるようにします。

pip freeze > requirements.txt

requirements.txtからパッケージをインストール

pip install -r requirements.txt

5. パッケージの作成と配布

パッケージの構成

以下では従来の方法を説明します。強く推奨されているpyproject.tomlについては1別の機会に説明します。

パッケージを作成するためには、以下のようなディレクトリ構造が必要です:

my_package/
├── my_package/
│   ├── __init__.py
│   └── module.py
├── setup.py
└── README.md

setup.pyの例

通常、ソフトウェアの開発はパッケージのビルドを前提としているファイルとパスの構成になっていますので、GitHub等で参考となるプロジェクトの書き方を手本とするのが早道です。参考になるかどうかはわかりませんが、私の管理するプロジェクトのレポジトリはこちらです。

console_scriptsは、例えばLinuxならばシェルコマンドとして動作します。仮想環境が~/.venv3.12ならば、~/.venv3.12/bin/以下にインストールされます。コマンドとして呼び出したい関数を指定します2

from setuptools import setup, find_packages

setup(
    name='my_package',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        'requests',
    ],
    entry_points={
        'console_scripts': [
            'my_command=my_package.module:main',
        ],
    },
)

パッケージのビルドと配布

Pythonパッケージユーザーガイド(Python Packaging User Guide)をまず読みましょう。以下のコマンドでは非推奨となった方法も併記します3

# パッケージのビルド(非推奨となった。旧式)
python setup.py sdist bdist_wheel

# 推奨
python -m build

# PyPIにアップロードするためのツールをインストール
pip install twine

# パッケージのアップロード
twine upload dist/*

6. Gitと仮想環境の管理

.gitignoreの設定

仮想環境のディレクトリをGitの管理対象から除外するために、.gitignoreファイルに以下を追加します。GitHubからコピーしてくると良いでしょう4

venv/

まとめ

この記事では、Pythonの仮想環境(venv)とパッケージ管理(pip)の基本的な使用方法について説明しました。仮想環境を使用することで、プロジェクトごとに独立した環境を作成し、依存関係の管理が容易になります。また、pipを使用してパッケージのインストールや管理を行うことで、開発効率を向上させることができます。さらに、requirements.txtを使用して環境を再現可能にし、setup.pyを使用してパッケージを作成・配布する方法も紹介しました。

  1. どうすれば setup.py ベースのプロジェクトを近代化できるでしょうか? ↩︎
  2. 9.2. Python のスコープと名前空間 ↩︎
  3. setup.py は非推奨になりましたか? ↩︎
  4. Python.gitignore ↩︎