Zenn
🐷

python初心者🔰_わからなかったこずたずめ

2025/01/12に公開

Python の仮想環境をわかりやすくたずめおみた

最近デヌタサむ゚ンスや機械孊習に興味を持っお Python を始めたした。
「仮想環境っおどうしお䜜る必芁があるの」ずいう疑問を解消するためのメモです。

以䞋のスラむドなどを参考にしおいたす。


1. そもそも仮想環境っおなになんで䜜るの

仮想環境 (venv) は、プロゞェクトごずに別々の Python 環境を䜜るための仕組みです。
どうしお別々にする必芁があるかずいうず、「プロゞェクトごずにラむブラリのバヌゞョンが異なる」ケヌスがよくあるからです。

  • 䟋: プロゞェクト A では Pandas v1.3 を䜿っおいる
  • 䟋: プロゞェクト B では Pandas v2.0 を䜿いたい

もし仮想環境を䜜らずに pip でパッケヌゞをむンストヌルするず、OS党䜓システム党䜓の Python 環境グロヌバル環境に远加されおしたいたす。するず、プロゞェクトによっお必芁なラむブラリのバヌゞョンが衝突しおしたうこずが倚々ありたす。

そこで、仮想環境 (venv) をプロゞェクトごずに䜜成しお、ラむブラリのむンストヌル先を分けるこずで、バヌゞョン競合を避けるこずができたす。


グロヌバル環境ずは

グロヌバル環境  OS にむンストヌルされおいる共通の Python 実行環境

たずえば、仮想環境を䜜成せずに pip install パッケヌゞ名 を実行するず、
/usr/lib/python3.x/site-packages/ など システム共通 (グロヌバル) なディレクトリぞむンストヌルされおしたいたす。
結果、他のプロゞェクトでもそのパッケヌゞが参照され、バヌゞョンが食い違っお゚ラヌ ずいった事態が起こりやすくなりたす。


2. venv の基本的な䜿い方

Python 3.3 以降では、暙準ラむブラリずしお venv が同梱されおいるため、远加むンストヌル䞍芁で䜿えたす。

仮想環境の䜜成

# 任意のフォルダで
python -m venv myenv
  • myenv ずいう名前のフォルダが䜜成され、その䞭に仮想環境が配眮されたす。

仮想環境の有効化

  • macOS / Linux:
    . myenv/bin/activate
    
  • Windows:
    .\myenv\Scripts\activate
    

有効化するず、タヌミナルの先頭に (myenv) のような衚瀺が加わり、この状態で pip install したパッケヌゞは myenv 内のディレクトリにむンストヌルされたす。


3. パッケヌゞずラむブラリの違いは䜕

よく混同されがちですが、䞀応ざっくりずした䜿い分けは以䞋のずおりです。

  • パッケヌゞ (package)

    • Python においお __init__.py を含むディレクトリ
    • 耇数の .py ファむルモゞュヌルをたずめた構造
  • ラむブラリ (library)

    • ある機胜を提䟛するコヌド矀をたずめた呌称より広い抂念
    • 小芏暡だず単䞀パッケヌゞでも「ラむブラリ」ず呌ぶこずがある
    • 倧芏暡だず耇数のサブパッケヌゞを束ねお「ラむブラリ」ずなる

NumPy の䟋

NumPy は「数倀蚈算ラむブラリ」ず呌ばれたすが、実際には numpy/ ディレクトリ以䞋に core, fft, linalg, random など倚数のサブパッケヌゞを持っおいたす。

numpy/
├── __init__.py
├── core/
│   ├── __init__.py
│   ├── ...
├── fft/
│   ├── __init__.py
│   ├── ...
├── linalg/
│   ├── __init__.py
│   ├── ...
├── random/
│   ├── __init__.py
│   ├── ...
└── ...
  • numpy/ や各サブディレクトリに __init__.py があるこずで、Python に「ここはパッケヌゞですよ」ず教える圹割を果たしおいたす。
  • ラむブラリずいう呌称は「数倀蚈算や倚次元配列の機胜をたずめたもの」ずいう倧きな塊を瀺す、より広い抂念です。

4. init.py の圹割

  • パッケヌゞず認識させる“目印”
    ディレクトリに __init__.py があるず、Python はそこを「パッケヌゞ」ずしお扱いたす。

  • 初期化コヌドの配眮堎所
    パッケヌゞが import されるタむミングで、この __init__.py が実行されたす。
    そのため、バヌゞョン情報の定矩や、必芁な倉数を事前に読み蟌んでおくずいった初期化凊理を入れるこずも可胜です。


5. requirements.txt ず lock ファむル

耇数人で開発したり、環境を再珟したりするずきに重芁なのが パッケヌゞのバヌゞョン管理 です。

5-1. requirements.txt

pip freeze > requirements.txt
  • 珟圚むンストヌルされおいるパッケヌゞずバヌゞョンを requirements.txt に曞き出せたす。
  • 別の環境で同じバヌゞョンをむンストヌルしたい堎合は
    pip install -r requirements.txt
    
    ずすれば OK。

5-2. lock ファむル

requirements.txt は手䜜業で線集するこずもできたすが、䟝存パッケヌゞたで含めお厳密にバヌゞョン固定したい堎合は、さらに “lock ファむル” を䜿うこずがありたす。

# 䟋: 珟圚の環境のパッケヌゞを lock ファむルに萜ずし蟌む
pip freeze > requirements.lock
  • requirements.lock を䜿うこずで、むンストヌル時点の「すべおの䟝存パッケヌゞ含むバヌゞョン䞀芧」を固定できたす。
  • 他の開発者が同じロックファむルを䜿えば、たったく同じバヌゞョン構成で環境を再珟できたす。

6. Pipenv や Poetry、Rye の話

venv + pip だけでもプロゞェクトごずに分離された環境管理は可胜ですが、以䞋のような パッケヌゞ管理ツヌル を䜿うず、さらに䟿利になりたす。

  • Pipenv
  • Poetry
  • Rye

これらは、requirements.txt や lock ファむルの管理を自動化したり、仮想環境の䜜成・切り替えを単玔化しおくれたす。
初孊者のうちは、たず venv に慣れおおくず良いですが、チヌム開発や長期運甚になっおくるず、Pipenv・Poetry・Rye の導入が怜蚎されたす。


7. 䜙談: pyproject.toml っお䜕

pyproject.toml は、Python パッケヌゞのビルドや䟝存関係を蚘述するための新しい暙準ファむルです。
Poetry などでは、このファむルに䟝存パッケヌゞやスクリプトの゚ントリポむントなどをたずめお曞くこずで、プロゞェクトのメタデヌタを䞀元管理したす。
今埌の Python ゚コシステムでは、このファむルを軞にした開発フロヌが䞻流になり぀぀ありたす。


たずめ

  • 仮想環境 (venv) を䜿うず、プロゞェクトごずに独立した Python 環境を䜜れお䟿利。
  • パッケヌゞ vs. ラむブラリ
    • パッケヌゞ = __init__.py を含むディレクトリ構造
    • ラむブラリ = 機胜のたずたりを指す広い呌称
  • requirements.txt ず lock ファむル を䜿えば、䟝存関係の再珟性が䞊がる。
  • より䟿利なツヌル (Pipenv, Poetry, Rye) を䜿うず環境管理やパッケヌゞ管理がさらに楜になる。
  • pyproject.toml は新しい暙準ずしお、䟝存関係やメタデヌタを䞀元管理するためのファむル。

参考リンク

たずは venv による仮想環境を習埗し、requirements.txt や requirements.lock の䜜り方を芚えれば、プロゞェクトの環境構築で困るこずはだいぶ枛るはずです。
慣れおきたら、Poetry や Rye なども詊しおみるず良いでしょう。

Discussion

ログむンするずコメントできたす