はじめに
仮想環境の構築のための手順については多くの記事やサイトを見たことはあると思いますが、そもそも「環境」とは何でしょうか?
また、仮想環境がパッケージの衝突を避けるために重要と言われて、それが何を意味するか理解できているでしょうか?
私ははじめ、仮想環境の構築について、公式ドキュメントや解説サイトを基に実装しようとしたとき、そもそもどういう仕組みで何がどう動いているのか全く理解できませんでした。
Pythonでの開発において「環境構築」は非常に重要なテーマです。
プロジェクトごとに異なるライブラリやそのバージョンを適切に管理しないと、バージョンの競合や動作不良、再現性の欠如といった問題が発生します。
本記事では、Pythonを使ううえで混同しやすい「環境」という言葉について整理し、以下のような観点から解説します
- 実行環境:Pythonコードがどのように動くのかという基礎的な仕組み
- グローバル環境:実行環境がどこに属しているのかというスコープの違い
- ローカル環境/仮想環境:プロジェクトごとに環境を切り分けて依存関係を管理する方法
特に重要な仮想環境について理解するためには、「Pythonプログラムが実行されるまでの流れ」と「環境とはプログラムを実行するためのディレクトリのことである」ということを理解する必要があります。
順番に見ていきましょう!
記事の目的
Pythonを学び始めたばかりの方にとって、「環境構築」や「仮想環境」といった言葉はとっつきにくく、混乱しやすいテーマです。
本記事では、Pythonがどのように実行されるのかという基本的な仕組みを踏まえつつ、グローバル環境・ローカル環境・仮想環境の違いについて体系的に整理します。
特にMacユーザー向けに、実際のパス構造やHomebrew環境に即した説明を行ない、後続の仮想環境構築の理解をスムーズにすることを目的としています。
対象読者
- MacでPythonの学習や開発を始めたばかりの初学者
- 仮想環境(venvなど)を使う理由や仕組みを基礎から理解したい方
- グローバル環境/ローカル環境/仮想環境の違いに疑問を感じている方
- 複数のPythonプロジェクトを安全に管理したいと考えている方
1. Python実行環境の基礎
実行環境とは、プログラムを実際に動かすために必要な仕組みの一式のことを指します。
Pythonの場合、Python本体・ライブラリ・設定ファイルなどが揃っている構成を指し、これらは通常、ストレージ上にディレクトリとしてまとめられた1つのファイル群として存在します。
なお、「実行」という言葉からメモリ上にある状態を想像しがちですが、ここで言う実行環境は、あくまで実行に必要なファイル群(構成一式)が物理的に存在している場所のことを表します。
1-1. Python実行環境の構成要素
- Python本体(インタプリタ)
- 標準ライブラリ(Pythonインストール時に標準装備されているライブラリ)
- 外部ライブラリ(パッケージ管理ツールによって外部からインストールして使うライブラリ)
- パッケージ管理ツール(pipなど)
- 仮想環境(オプション)
※ 仮想環境は、開発をより安全かつ管理しやすくするための補助的な仕組みです。Python本体の構成には含まれませんが、現代の開発現場ではほぼ必須とされています。
これらの構成要素はファイルとしてそれぞれ存在し、一つのディレクトリとしてまとまることで、初めて「実行環境が構築された」と言うことができます。
つまり、実行環境とは、Pythonプログラムをメモリ上で実行できるようにするための準備セットのことを指します。
なお、Macでは使用しているチップによって、以下のようなパスの違いがあります。
構成要素 | パス例(Intel Mac) | パス例(Apple Silicon) | 説明 |
---|---|---|---|
Python実行ファイル | /usr/local/opt/python@3.x/bin/python3 |
/opt/homebrew/opt/python@3.x/bin/python3 |
Pythonの実行バイナリ |
標準ライブラリ | /usr/local/Cellar/python@3.x/3.x.x/Lib |
/opt/homebrew/Cellar/python@3.x/3.x.x/Lib |
Python標準ライブラリの場所 |
Site-packages | /usr/local/lib/python3.x/site-packages |
/opt/homebrew/lib/python3.x/site-packages |
pipでインストールしたパッケージの場所 |
以下のコマンドをターミナルで実行することでファイルパスを確認することができます。
$ which python3
※ pipとは
pipとは、Pythonの外部ライブラリ(標準ライブラリに含まれていないライブラリ)をインストール・管理するための公式のパッケージマネージャです(Python 3.4以降では標準で含まれています)。
例えば、Aというライブラリを使用したい場合、そのライブラリをインストールする必要があります。さらに、Aの動作に別のライブラリ(依存ライブラリ)が必要な場合もあります。
pipは、これらの依存関係を自動的に解決し、一緒にインストールしてくれるため、手動インストールによるミスを防ぐことができます。
インストールされたライブラリは、通常 site-packages
ディレクトリに保存され、以下のようなパスに配置されます
-
/usr/local/lib/python3.x/site-packages
(Intel Mac) -
/opt/homebrew/lib/python3.x/site-packages
(Apple Silicon)
Pythonインタプリタはこの site-packages
を検索対象としているため、インストールしたライブラリは import
文でそのまま利用できるようになります。
1-2. インタープリタの仕組み
Pythonはインタープリタ型のプログラミング言語です。
これは、コードを1行ずつ解釈しながら実行する方式で、C言語のようにコンパイルしてから実行するスタイルとは異なります。
ただし、Pythonの実行過程では、完全な逐次解釈というわけではなく、一度「バイトコード」と呼ばれる中間表現に変換されます。
この変換を行なうのがPythonインタープリタであり、実行環境の中心的な役割を担っています。
1-3. バイトコードコンパイル
Pythonファイル(.py)が実行されると、インタープリタはそのソースコードをパースして構文チェックを行ない、バイトコード(.pycファイル)へと変換します。
このバイトコードは、Python仮想マシン(PVM)によって解釈され、実際に動作します。
1-4. ストレージにあるファイルがメモリにロードされて実行されるまでのイメージ
- ストレージの.pyファイルをインタプリタが読み込み
- バイトコードに変換
- メモリ上でPVMが実行
2. 実行環境の種類
Pythonで開発を行う際、「どの環境でプログラムを動かすか」はとても重要です。
ここでは、Pythonの実行環境について、スコープ(影響範囲)の違いによって大きく3つに分けて解説します。
2-1. グローバル環境(global environment)
グローバル環境とは、OS全体にインストールされたPython環境のことを指します。
この環境は、すべてのユーザー・すべてのプロジェクトで共通して使用されます。
例えば、ターミナルで python3
や pip3
と入力したときに実行されるPythonは、グローバル環境にあるPythonです。
MacでHomebrewを使ってインストールした場合、グローバル環境のPython本体は次のような場所に配置されます
Macの種類 | Pythonのパス例 |
---|---|
Intel Mac | /usr/local/opt/python@3.x/bin/python3 |
Apple Silicon | /opt/homebrew/opt/python@3.x/bin/python3 |
※ 注意点
グローバル環境は「すべてのプロジェクトで共通」なため、あるプロジェクトのためにライブラリをアップグレードすると、他のプロジェクトでの動作に影響が出る可能性があります。
そのため、大規模な開発では仮想環境を使って、プロジェクトごとにPython環境を分離するのが一般的です。
※https://www.tutorialspoint.com/python/python_virtual_environment.htm より画像引用
2-2. ローカル環境(local environment)
ローカル環境とは、特定のプロジェクト専用で使うPython環境のことです。
Pythonには、こうしたローカルな環境を手軽に作るための仕組みとして「仮想環境」が用意されています。
つまり、仮想環境とはローカル環境を実現するための仕組みのひとつであり、通常「ローカル環境」と言えば仮想環境を指すことが多いです。
2-3. 仮想環境(virtual environment)
※https://www.tutorialspoint.com/python/python_virtual_environment.htm より画像引用
仮想環境は、1つのプロジェクトだけで使う専用のPython環境を作るための仕組みです。
仮想環境では、Pythonの実行ファイル(python や pip)やライブラリ群をそのプロジェクト専用に切り分けて管理します。
実際には、Python本体を丸ごとコピーするわけではなく、シンボリックリンク(別名)と設定ファイルの組み合わせによって「独立した環境」を実現しています。
これにより、例えば次のように複数のプロジェクトで異なるライブラリ構成を共存させることができます
(例)
- プロジェクトA:Django 3.x 系を使用
- プロジェクトB:Django 4.x 系を使用
仮想環境のディレクトリ構造例(venv の場合)
project/
├── venv/ # 仮想環境本体(ここでPythonが独立する)
│ ├── bin/ # Python実行ファイルやpipなどが格納される
│ ├── lib/ # ライブラリ群(site-packages を含む)
│ └── pyvenv.cfg # 仮想環境の設定ファイル(親Pythonへのリンクなど)
├── main.py # プロジェクトのPythonファイル
└── requirements.txt # 必要な外部ライブラリをまとめたリスト
まとめ
本記事では、Pythonの開発における「環境構築」の基本を理解するために、実行環境・グローバル環境・ローカル環境・仮想環境の違いを体系的に整理しました。
- 実行環境: Pythonコードを動かすために必要な仕組みのセット
- グローバル環境: OS全体に共有されるPython環境
- ローカル環境/仮想環境: プロジェクトごとに独立してPython環境を管理する方法
これらを正しく理解し使い分けることで、ライブラリの競合や予期しない動作を避け、より再現性の高い安定した開発が可能になります。
仮想環境を使うことで、複数プロジェクト間で異なるライブラリやバージョンを安全に共存させることができるため、Python開発では必須の知識です。
次回の記事では、実際に仮想環境(venv)を作成・操作する手順についてまとめていきたいと思います。
最後までお読みいただき、ありがとうございました。
参考・画像引用元URL
https://docs.python.org/ja/3/library/venv.html#how-venvs-work
https://www.tutorialspoint.com/python/python_virtual_environment.htm
https://medium.com/devops-techable/start-using-the-multi-virtual-environment-in-python-with-pyenv-84617efa8523
https://qiita.com/mabo23/items/c9c22f271dd9db56024a