0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python仮想環境ツールの使い分け:venv・pyenv・Docker

0
Posted at

Pythonの開発環境を整えるうえで、venv・pyenv・Dockerは目的が似ているようで、それぞれ異なる問題を解決するツールです。この記事では各ツールの役割と基本的な使い方、そして「どのケースで何を使うべきか」を整理します。


各ツールの役割

ツール 管理対象 分離の粒度
venv Pythonライブラリ(pip) プロジェクト単位
pyenv Pythonインタープリタ本体 ディレクトリ単位
Docker OS・Python・ライブラリすべて コンテナ単位

venv:ライブラリの分離

概要

venvはPython標準ライブラリに含まれており、インストール不要で使えます。プロジェクトごとにPythonのパッケージを分離し、依存関係の衝突を防ぐことができます。

基本的な使い方

# 仮想環境の作成(.venv という名前が一般的)
python -m venv .venv

# 有効化(Mac / Linux)
source .venv/bin/activate

# 有効化(Windows PowerShell)
.venv\Scripts\Activate.ps1

# パッケージのインストール
pip install requests numpy

# 依存関係の記録
pip freeze > requirements.txt

# 別環境での復元
pip install -r requirements.txt

# 無効化
deactivate

ポイント

  • activateを忘れると、システム全体のPythonにインストールしてしまうので注意が必要です
  • VSCodeは.venvという名前を自動検出してくれる場合が多いです
  • 仮想環境フォルダはGitに含めないようにしましょう(.gitignoreに追加します)
# .gitignore
.venv/

pyenv:Pythonバージョンの管理

概要

pyenvはPythonインタープリタ本体のバージョンを管理するツールです。複数のバージョンをインストールし、グローバルまたはディレクトリ単位で切り替えることができます。

インストール

# Mac(Homebrew)
brew install pyenv

# Linux
curl https://pyenv.run | bash

シェルの設定ファイル(.zshrc.bashrc)への追記も必要になります。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

基本的な使い方

# インストール可能なバージョン一覧
pyenv install --list

# 特定バージョンのインストール
pyenv install 3.10.14
pyenv install 3.12.3

# インストール済みバージョンの確認
pyenv versions

# システム全体のデフォルトを変更
pyenv global 3.12.3

# カレントディレクトリだけ別バージョンを使う
pyenv local 3.10.14
# → .python-version ファイルが生成されます

# 現在のバージョン確認
python --version

venvと組み合わせる

pyenvでバージョンを固定してから、その上でvenvを作るのが定番のパターンです。

cd myproject
pyenv local 3.10.14        # このプロジェクトはPython 3.10を使う
python -m venv .venv       # 3.10ベースの仮想環境を作成
source .venv/bin/activate
pip install -r requirements.txt

Docker:環境ごと分離する

概要

DockerはOS・Python・ライブラリ・設定ファイルすべてを含めてコンテナとして分離します。「自分のPCでは動いたのに本番では動かない」という問題を根本的に解決できます。

基本的なPython用Dockerfile

FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "main.py"]

docker-compose.ymlの例(DBと組み合わせるケース)

services:
  app:
    build: .
    volumes:
      - .:/app
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: password

ビルドと実行

# イメージのビルド
docker build -t myapp .

# コンテナの実行
docker run myapp

# docker-composeで起動
docker compose up

使い分けの判断基準

Pythonだけで完結する個人プロジェクト・スクリプト
  └→ venv のみで十分です

チームでPythonバージョンをそろえたい
  └→ pyenv + venv

本番デプロイ・DBや他サービスとの連携・OS環境の再現が必要
  └→ Docker(+ 内部でvenvは不要なことも多いです)

Dockerの中でvenvは必要か?

コンテナ内では環境がすでに分離されているため、基本的にはvenvは不要です。ただし、マルチステージビルドや特殊な依存関係の管理でvenvを使うケースもあります。


まとめ

  • venv:最初に覚えるべき基本ツールです。ライブラリの分離はほぼ必須といえます
  • pyenv:チームや複数プロジェクトでPythonバージョンが混在する場合に導入を検討しましょう
  • Docker:本番運用・チーム開発・他サービスとの連携が絡む場合に採用を検討しましょう

三者は競合ではなく補完関係にあります。プロジェクトの規模と要件に応じて組み合わせて使うのが現実的なアプローチです。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?