9
22

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環境構築あれこれ ― 複数バージョン・仮想環境・モジュール管理を整理する

9
Posted at

はじめに

Pythonは、新しいバージョンをインストールしても古いバージョンが上書きされず、複数バージョンが共存します。これはPythonの便利な仕組みですが、慣れないうちは混乱のもとです。

  • 今、どのバージョンのPythonで開発しているのか?
  • pip install したモジュールは、どのバージョン環境に入ったのか?
  • プロジェクトごとにモジュールを分けたいけど、どうすればいい?

この記事では、Windows環境でのPython環境に関する操作を 初心者でもわかるように 一つずつ整理します。

この記事ではWindows環境を対象としています。

全体像 ― Pythonの環境構造

まず、Pythonの環境がどのような構造になっているかを図で確認しましょう。

python_env_structure.png

Windowsに複数バージョンのPythonをインストールすると、それぞれ独立した環境として存在します。さらに各バージョンから 仮想環境(venv) を作成でき、プロジェクトごとにモジュールを分離できます。

PATH環境変数 ― python と打ったとき、どれが動くのか?

PATHとは

コマンドプロンプトで python と入力すると、Windowsは PATH環境変数 に登録されたフォルダを上から順に探し、最初に見つかった python.exe を実行します。

PATH の例:
  C:\Python312\          ← ここに python.exe がある → これが実行される
  C:\Python311\          ← ここにも python.exe があるが、上が優先
  C:\Windows\System32\
  ...

つまり、PATHの 順番 によって、python で呼ばれるバージョンが変わります。

PATHの確認方法

コマンドプロンプトで以下のコマンドを実行すると、python コマンドがどの実行ファイルを指しているか確認できます。

where python

出力例:

C:\Python312\python.exe
C:\Python311\python.exe
C:\Users\user\AppData\Local\Microsoft\WindowsApps\python.exe

一番上に表示されるものが、python と打ったときに実行されるバージョンです。

Pythonインストール時に「Add Python to PATH」にチェックを入れると、PATHにそのバージョンのパスが追加されます。複数バージョンをインストールすると、PATHの順序で優先バージョンが決まります。

pyランチャー ― バージョンを明示的に指定する

pypython の違い

Windowsでは pypython の2つのコマンドでPythonを起動できますが、仕組みが異なります。

コマンド 正体 バージョン指定 動作の仕組み
python python.exe できない PATHを上から探して最初に見つかった python.exe を実行
py pyランチャー(py.exe できる(py -3.12 など) インストール済みの全バージョンを把握し、指定したバージョンを実行
【python コマンドの場合】
  python script.py
  → PATHの順番で決まる → どのバージョンが動くかは環境依存

【py コマンドの場合】
  py -3.12 script.py
  → pyランチャーがPython 3.12を直接起動 → PATHに関係なく確実

つまり python はPATHの設定に左右されますが、py はPATHに依存せずバージョンを指定できます。

pyランチャーとは

pyランチャーpy コマンド)は、Windowsに複数バージョンのPythonがインストールされている場合に、バージョンを明示的に指定して実行できるツールです。Python 3.3以降のWindows版インストーラーに同梱されています。

PATHの順番に依存せず、確実に目的のバージョンを呼び出せるため、複数バージョンを使い分けるWindows環境では 必須ツール です。

インストール済みバージョンの一覧

py --list

出力例:

 -V:3.12 *        Python 3.12 (64-bit)
 -V:3.11          Python 3.11 (64-bit)
 -V:3.10          Python 3.10 (64-bit)

* が付いているバージョンがデフォルトで使われるバージョンです。

バージョンを指定してPythonを実行

# デフォルトバージョンで実行
py script.py

# Python 3.11 を指定して実行
py -3.11 script.py

# Python 3.10 を指定して実行
py -3.10 script.py

バージョンを指定してpipを実行

# Python 3.12 の pip を使ってインストール
py -3.12 -m pip install numpy

# Python 3.11 の pip を使ってインストール
py -3.11 -m pip install numpy

ここで使っている -m オプションは、Pythonのモジュールをスクリプトとして実行する という意味です。

py -3.12 -m pip install numpy
│  │      │  │
│  │      │  └── 実行するモジュール名(pip)
│  │      └───── -m: モジュールとして実行するオプション
│  └──────────── 使用するPythonバージョン
└─────────────── pyランチャー

-m pip と書くことで、指定したバージョンのPythonに紐づいた pip が確実に呼ばれます。単に pip install と打つと、PATHの設定次第で意図しないバージョンの pip が実行される可能性がありますが、py -3.12 -m pip ならその心配がありません。

-m はpip以外にも使えます。例えば py -3.12 -m venv .venv(仮想環境の作成)や py -3.12 -m http.server(簡易HTTPサーバーの起動)なども同じ仕組みです。

今、どの環境で開発しているか確認する

コマンドラインで確認

バージョンの確認方法はいくつかありますが、使うコマンドによって確認対象が異なります

# ① python --version(PATHで優先されるPythonのバージョン)
python --version

# ② py --version(pyランチャーのデフォルトバージョン)
py --version

# ③ py -3.11 --version(指定したバージョン)
py -3.11 --version
コマンド 確認対象
python --version PATHで最初に見つかるPython のバージョン
py --version pyランチャーのデフォルトpy --list* が付いているもの)のバージョン
py -3.11 --version 指定したバージョン のPython

python --versionpy --version の結果が異なることがあります。これは、PATHの優先順位とpyランチャーのデフォルトが別々に管理されているためです。

# 例:結果が異なるケース
C:\> python --version
Python 3.11.7           ← PATHの先頭に Python 3.11 があるため

C:\> py --version
Python 3.12.1           ← pyランチャーのデフォルトは Python 3.12

今使っているPythonの実体を確認する(最も確実な方法)

バージョン番号だけでなく、どの場所のPythonが実行されているか をフルパスで確認できます。

# python コマンドが指すPythonの場所
python -c "import sys; print(sys.executable)"

# py コマンドが指すPythonの場所
py -c "import sys; print(sys.executable)"

出力例:

C:\> python -c "import sys; print(sys.executable)"
C:\Python311\python.exe          ← PATHで優先される Python 3.11

C:\> py -c "import sys; print(sys.executable)"
C:\Python312\python.exe          ← pyランチャーのデフォルト Python 3.12

仮想環境がアクティブな場合は、どちらも仮想環境内のパスが表示されます。

(.venv) C:\Projects\myproject> python -c "import sys; print(sys.executable)"
C:\Projects\myproject\.venv\Scripts\python.exe

「今どのPythonを使っているか分からなくなった」ときは、sys.executable でフルパスを確認するのが最も確実です。

VS Codeで確認

VS Codeでは、画面右下のステータスバーにPythonのバージョンが表示されています。

  1. ステータスバーを確認:画面右下に Python 3.12.x のように表示される
  2. クリックすると:使用可能なPython環境の一覧が表示される

vscode_python_version.png

開発環境の切り替え

コマンドラインでの切り替え

コマンドラインでは、pyランチャーを使ってバージョンを切り替えます。

# Python 3.12 で対話モードを起動
py -3.12

# Python 3.11 で対話モードを起動
py -3.11

常に py -X.Y を付けることで、意図したバージョンで作業できます。

VS Codeでの切り替え

VS Codeでは、インタープリターの選択でPython環境を切り替えます。

  1. Ctrl + Shift + P でコマンドパレットを開く
  2. Python: Select Interpreter と入力して選択
  3. 使いたいPythonバージョン(または仮想環境)を選択

vscode_select_interpreter.png

選択した環境は、そのワークスペース(フォルダ)単位で記憶されます。別のフォルダを開くと、別の環境が適用されます。

現在の環境にモジュールをインストールする

pip install

# 現在のPython環境にモジュールをインストール
pip install numpy

# バージョンを指定してインストール
pip install numpy==1.26.0

# アップグレード
pip install --upgrade numpy

pip installpy -m pip install の違い

pip installpy -m pip install は、どちらもモジュールをインストールするコマンドですが、どのPython環境にインストールされるか が異なる場合があります。

# ① pip install(PATHに依存)
pip install numpy

# ② py -m pip install(pyランチャーのデフォルトバージョン)
py -m pip install numpy

# ③ py -3.12 -m pip install(バージョンを明示)
py -3.12 -m pip install numpy

3つの違いを表にまとめます。

コマンド どのPythonで実行されるか 安全性
pip install numpy PATHで最初に見つかるpipの環境 PATHの設定次第で意図しない環境に入る可能性あり
py -m pip install numpy pyランチャーのデフォルトバージョン(py --list* が付いているもの) pip 単体よりは安全だが、デフォルトバージョンが変わると影響を受ける
py -3.12 -m pip install numpy 確実にPython 3.12の環境 バージョンを明示するので最も安全

例えば、Python 3.12 と 3.11 の両方がインストールされている場合を考えてみましょう。

【① pip install の場合】
  PATHの順序: C:\Python311\ → C:\Python312\ → ...

  pip install numpy
  → PATHを上から探して C:\Python311\ の pip が見つかる
  → Python 3.11 にインストールされる(3.12 に入れたかったのに!)

【② py -m pip install の場合】
  pyランチャーのデフォルト: Python 3.12(*が付いている)

  py -m pip install numpy
  → デフォルトの Python 3.12 の pip が実行される
  → Python 3.12 にインストールされる
  ※ ただし、新しいバージョンをインストールするとデフォルトが変わることがある

【③ py -3.12 -m pip install の場合】
  py -3.12 -m pip install numpy
  → Python 3.12 の pip が確実に実行される
  → Python 3.12 にインストールされる(常に意図通り!)

複数バージョンのPythonがインストールされている環境では、py -X.Y -m pip install のようにバージョンを明示するのが最も確実です。py -m pip install でも多くの場合は問題ありませんが、デフォルトバージョンが意図通りかを py --list で確認しておくと安心です。

仮想環境がアクティブな場合

仮想環境をアクティベートしている状態では、pip install でも仮想環境内にインストールされるので安全です。

# 仮想環境をアクティベート
.venv\Scripts\activate

# この状態なら pip install でOK(仮想環境内にインストールされる)
(.venv) > pip install numpy
状況 pip install のインストール先
仮想環境なし PATHで最優先のPython環境(意図しない環境の可能性あり)
仮想環境あり(アクティブ) その仮想環境内(安全)

モジュールのアンインストール

pip uninstall numpy

インストール済みモジュールの一覧

# 現在の環境にインストール済みのモジュール一覧
pip list

# 出力例:
# Package    Version
# ---------- -------
# numpy      1.26.0
# pip        23.3.1
# setuptools 69.0.2

特定のモジュールの詳細情報を確認するには:

pip show numpy

出力例:

Name: numpy
Version: 1.26.0
Summary: Fundamental package for array computing in Python
Home-page: https://numpy.org
Location: c:\python312\lib\site-packages

Location を見ると、どの環境にインストールされているか が分かります。

仮想環境とは

仮想環境の概念

仮想環境とは、プロジェクトごとに独立したPython環境を作る仕組みです。

システムにインストールされたPython(例:Python 3.12)をベースに、プロジェクト専用のモジュール管理空間を作成します。

venv_concept.png

仮想環境がないとどうなるか

仮想環境を使わない場合、すべてのプロジェクトが 同じシステムPython環境を共有 します。

【仮想環境なし】
システム Python 3.12
  └── site-packages/
        ├── numpy 1.26.0   ← プロジェクトAが必要
        ├── numpy 2.0.0    ← プロジェクトBが必要(競合!)
        ├── pandas 2.1.0
        └── ...
  • プロジェクトAでは numpy 1.26.0 が必要
  • プロジェクトBでは numpy 2.0.0 が必要

→ 同じ環境には 一つのバージョンしかインストールできない ため、どちらかが壊れます。

仮想環境を使うとどうなるか

【仮想環境あり】
プロジェクトA/
  └── .venv/
        └── site-packages/
              ├── numpy 1.26.0   ← プロジェクトA専用
              └── pandas 2.1.0

プロジェクトB/
  └── .venv/
        └── site-packages/
              ├── numpy 2.0.0    ← プロジェクトB専用
              └── requests 2.31.0

プロジェクトごとに独立しているため、バージョンの競合が起きません

仮想環境のメリットまとめ

メリット 説明
モジュールの競合を防止 プロジェクトごとに異なるバージョンを使える
環境の再現性 requirements.txt で同じ環境を再構築できる
システム環境を汚さない 不要になったら仮想環境フォルダを削除するだけ
チーム開発に便利 メンバー全員が同じモジュール構成で開発できる

仮想環境の作成

Pythonには標準で venv モジュールが付属しており、追加インストールなしで使えます。

# プロジェクトフォルダに移動
cd C:\Projects\myproject

# 仮想環境を作成(.venv という名前が慣例)
python -m venv .venv

# バージョンを指定して作成する場合
py -3.11 -m venv .venv

実行すると、プロジェクトフォルダ内に .venv フォルダが作成されます。

myproject/
  ├── .venv/               ← 仮想環境(自動生成される)
  │     ├── Include/
  │     ├── Lib/
  │     │     └── site-packages/   ← モジュールはここに入る
  │     ├── Scripts/
  │     │     ├── activate         ← 有効化スクリプト
  │     │     ├── pip.exe
  │     │     └── python.exe       ← 仮想環境用のPython
  │     └── pyvenv.cfg
  ├── main.py
  └── ...

仮想環境のフォルダ名は .venv が一般的です。ドット始まりのため隠しフォルダとなり、プロジェクトのソースコードと区別しやすくなります。

仮想環境の有効化・無効化

有効化(アクティベート)

仮想環境を作成しただけでは、まだ使える状態になっていません。有効化(アクティベート) する必要があります。

# コマンドプロンプトの場合
.venv\Scripts\activate

# PowerShellの場合
.venv\Scripts\Activate.ps1

# Git Bashの場合
source .venv/Scripts/activate

アクティベートすると、プロンプトの先頭に (.venv) が表示されます。

C:\Projects\myproject> .venv\Scripts\activate
(.venv) C:\Projects\myproject>

この (.venv) が表示されている間は、仮想環境が有効な状態です。

  • python → 仮想環境内の python.exe が実行される
  • pip install → 仮想環境内にモジュールがインストールされる
# 確認:仮想環境のPythonが使われていることが分かる
(.venv) > python -c "import sys; print(sys.executable)"
C:\Projects\myproject\.venv\Scripts\python.exe

無効化(ディアクティベート)

仮想環境から抜けるには deactivate コマンドを実行します。

(.venv) C:\Projects\myproject> deactivate
C:\Projects\myproject>

プロンプトから (.venv) が消え、システムのPython環境に戻ります。

コマンドプロンプトやPowerShellのウィンドウを閉じた場合も、仮想環境は自動的に無効化されます。次回作業するときは、再度アクティベートが必要です。

仮想環境の削除

仮想環境はただのフォルダなので、フォルダを削除するだけです。特別なアンインストール手順は不要です。

# コマンドプロンプト
rmdir /s /q .venv

# PowerShell
Remove-Item -Recurse -Force .venv

削除しても、ベースとなったPython本体(例:Python 3.12)には影響しません。仮想環境内にインストールしたモジュールだけが消えます。

再度必要になったら、同じコマンドで新しい仮想環境を作り直せます。

# 削除後、もう一度作り直すこともできる
py -3.12 -m venv .venv

削除する前に、仮想環境が無効化(deactivate)されていることを確認してください。有効化されたまま削除すると、そのターミナルで pythonpip コマンドがエラーになることがあります。

VS Codeで仮想環境を使う

VS Codeはプロジェクトフォルダ内の .venv自動的に検出します。

  1. プロジェクトフォルダで .venv を作成
  2. VS Codeでそのフォルダを開く
  3. 右下のPythonバージョン表示をクリック
  4. .venv の環境が候補に表示されるので選択

vscode_venv_select.png

VS Codeのターミナルを開くと、自動的に仮想環境がアクティベートされます。

requirements.txt ― モジュール構成の管理

requirements.txt とは

requirements.txt は、プロジェクトで使用するモジュールとそのバージョンを記録したテキストファイルです。

numpy==1.26.0
pandas==2.1.0
matplotlib==3.8.0

現在の環境からrequirements.txtを作成

pip freeze > requirements.txt

pip freeze は、現在の環境にインストールされているモジュールをバージョン付きで一覧出力します。

requirements.txtからモジュールを一括インストール

pip install -r requirements.txt

活用シーン

【チーム開発での流れ】

  開発者A                              開発者B
  ─────────                           ─────────
  1. 仮想環境を作成
  2. モジュールをインストール
  3. pip freeze > requirements.txt
  4. requirements.txt をGitにコミット   → 5. リポジトリをクローン
                                        6. 仮想環境を作成
                                        7. pip install -r requirements.txt
                                        → 同じ環境が再現される!

.venv フォルダ自体はGitにコミットしません。.gitignore.venv/ を追加し、requirements.txt だけを共有するのが一般的です。

実践:プロジェクトの始め方

ここまでの内容を踏まえて、新しいプロジェクトを始めるときの推奨手順をまとめます。

# 1. プロジェクトフォルダを作成
mkdir C:\Projects\myproject
cd C:\Projects\myproject

# 2. 使いたいPythonバージョンで仮想環境を作成
py -3.12 -m venv .venv

# 3. 仮想環境を有効化
.venv\Scripts\activate

# 4. 必要なモジュールをインストール
pip install numpy pandas matplotlib

# 5. requirements.txt を作成(他の人や将来の自分のために)
pip freeze > requirements.txt

# 6. 開発する
python main.py

# 7. 作業が終わったら無効化
deactivate

よくあるトラブルと対処法

「pip install したのにモジュールが見つからない」

原因: pip install した環境と、スクリプトを実行している環境が異なる。

対処法:

# どの python を使っているか確認
python -c "import sys; print(sys.executable)"

# どの pip を使っているか確認
pip --version

両方が同じ環境を指しているか確認してください。

「PowerShellで activate できない」

原因: PowerShellの実行ポリシーがスクリプト実行を制限している。

対処法:

# 現在のユーザーに対して実行ポリシーを変更
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

「VS Codeのターミナルで仮想環境が自動アクティベートされない」

対処法: VS Codeの設定で以下を確認:

  1. Ctrl + , で設定を開く
  2. python.terminal.activateEnvironment を検索
  3. チェックが入っていることを確認

コマンド早見表

やりたいこと コマンド
Pythonバージョン確認 python --version
使用中のPython実行ファイルのパス python -c "import sys; print(sys.executable)"
インストール済みバージョン一覧 py --list
バージョン指定でPython実行 py -3.12 script.py
バージョン指定でpip実行 py -3.12 -m pip install numpy
モジュールインストール pip install numpy
モジュールアンインストール pip uninstall numpy
インストール済みモジュール一覧 pip list
モジュール詳細情報 pip show numpy
仮想環境作成 python -m venv .venv
仮想環境有効化(cmd) .venv\Scripts\activate
仮想環境有効化(PowerShell) .venv\Scripts\Activate.ps1
仮想環境無効化 deactivate
仮想環境削除 rmdir /s /q .venv
requirements.txt 作成 pip freeze > requirements.txt
requirements.txt から一括インストール pip install -r requirements.txt

まとめ

Pythonの環境管理は、最初は複雑に感じますが、以下の3つのポイントを押さえれば怖くありません。

  1. pyランチャー(pyコマンド) でバージョンを明示的に指定する
  2. 仮想環境(venv でプロジェクトごとにモジュールを分離する
  3. requirements.txt でモジュール構成を記録・共有する

この3つを習慣にすれば、「どの環境にインストールしたっけ?」「なぜかモジュールが見つからない!」といったトラブルを防げます。

9
22
0

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
9
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?