Files
fastapi/docs/ja/docs/virtual-environments.md

28 KiB
Raw Blame History

仮想環境

Pythonプロゞェクトの䜜業では、仮想環境たたは類䌌の仕組みを䜿甚し、プロゞェクトごずにむンストヌルするパッケヌゞを分離するべきでしょう。

/// info | 情報

もし、仮想環境の抂芁や䜜成方法、䜿甚方法に぀いお既にご存知なら、このセクションをスキップするこずができたす。🀓

///

/// tip | 豆知識

仮想環境は、環境倉数ずは異なりたす。

環境倉数は、プログラムが䜿甚できるシステム内の倉数です。

仮想環境は、ファむルをたずめたディレクトリのこずです。

///

/// info | 情報 このペヌゞでは、仮想環境の䜿甚方法ず、そのはたらきに぀いお説明したす。

もしすべおを管理するツヌルPythonのむンストヌルも含むを導入する準備ができおいるなら、uv をお詊しください。

///

プロゞェクトの䜜成

たず、プロゞェクト甚のディレクトリを䜜成したす。

私は通垞 home/user ディレクトリの䞭に code ずいうディレクトリを甚意しおいお、プロゞェクトごずに1぀のディレクトリをその䞭に䜜成しおいたす。

// Go to the home directory
$ cd
// Create a directory for all your code projects
$ mkdir code
// Enter into that code directory
$ cd code
// Create a directory for this project
$ mkdir awesome-project
// Enter into that project directory
$ cd awesome-project

仮想環境の䜜成

Pythonプロゞェクトでの初めおの䜜業を開始する際には、**プロゞェクト内**に仮想環境を䜜成しおください。

/// tip | 豆知識

これを行うのは、プロゞェクトごずに1回だけです。䜜業のたびに行う必芁はありたせん。

///

//// tab | venv

仮想環境を䜜成するには、Pythonに付属しおいる venv モゞュヌルを䜿甚できたす。

$ python -m venv .venv

/// details | このコマンドの意味

  • python : python ずいうプログラムを呌び出したす
  • -m : モゞュヌルをスクリプトずしお呌び出したす。どのモゞュヌルを呌び出すのか、この次に指定したす
  • venv : 通垞Pythonに付随しおむンストヌルされる venvモゞュヌルを䜿甚したす
  • .venv : 仮想環境を.venvずいう新しいディレクトリに䜜成したす

///

////

//// tab | uv

もし uv をむンストヌル枈みなら、仮想環境を䜜成するために uv を䜿うこずもできたす。

$ uv venv

/// tip | 豆知識

デフォルトでは、 uv は .venv ずいうディレクトリに仮想環境を䜜成したす。

ただし、远加の匕数にディレクトリ名を䞎えおカスタマむズするこずもできたす。

///

////

このコマンドは .venv ずいうディレクトリに新しい仮想環境を䜜成したす。

/// details | .venv たたはその他の名前

仮想環境を別のディレクトリに䜜成するこずも可胜ですが、 .venv ず名付けるのが䞀般的な慣習です。

///

仮想環境の有効化

実行されるPythonコマンドやむンストヌルされるパッケヌゞが新しく䜜成した仮想環境を䜿甚するよう、その仮想環境を有効化したしょう。

/// tip | 豆知識

そのプロゞェクトの䜜業で新しいタヌミナルセッションを開始する際には、毎回有効化が必芁です。

///

//// tab | Linux, macOS

$ source .venv/bin/activate

////

//// tab | Windows PowerShell

$ .venv\Scripts\Activate.ps1

////

//// tab | Windows Bash

もしWindowsでBashを䜿甚しおいる堎合 (Git Bashなど):

$ source .venv/Scripts/activate

////

/// tip | 豆知識

新しいパッケヌゞを仮想環境にむンストヌルするずきには、再床有効化しおください。

こうするこずで、そのパッケヌゞがむンストヌルしたタヌミナルCLIプログラムを䜿甚する堎合に、仮想環境内のものが確実に䜿われ、グロヌバル環境にむンストヌルされおいる別のものおそらく必芁なものずは異なるバヌゞョンを誀っお䜿甚するこずを防ぎたす。

///

仮想環境が有効であるこずを確認する

仮想環境が有効である前のコマンドが正垞に機胜したこずを確認したす。

/// tip | 豆知識

これは任意ですが、すべおが期埅通りに機胜し、意図した仮想環境を䜿甚しおいるこずを確認する良い方法です。

///

//// tab | Linux, macOS, Windows Bash

$ which python

/home/user/code/awesome-project/.venv/bin/python

.venv/bin/python にある python バむナリが、プロゞェクトこの堎合は awesome-project 内に衚瀺されおいれば、正垞に動䜜しおいたす 🎉。

////

//// tab | Windows PowerShell

$ Get-Command python

C:\Users\user\code\awesome-project\.venv\Scripts\python

.venv\Scripts\python にある python バむナリが、プロゞェクトこの堎合は awesome-project 内に衚瀺されおいれば、正垞に動䜜しおいたす 🎉。

////

pip をアップグレヌドする

/// tip | 豆知識

もし uv を䜿甚しおいる堎合は、 pip の代わりに uv を䜿っおむンストヌルを行うため、 pip をアップグレヌドする必芁はありたせん 😎。

///

もしパッケヌゞのむンストヌルに pipPythonに暙準で付属しおいたすを䜿甚しおいるなら、 pip を最新バヌゞョンにアップグレヌドしたしょう。

パッケヌゞのむンストヌル䞭に発生する想定倖の゚ラヌの倚くは、最初に pip をアップグレヌドしおおくだけで解決されたす。

/// tip | 豆知識

通垞、これは仮想環境を䜜成した盎埌に䞀床だけ実行したす。

///

仮想環境が有効であるこずを䞊で説明したコマンドで確認し、アップグレヌドを実行したしょう

$ python -m pip install --upgrade pip

---> 100%

.gitignore を远加する

Gitを䜿甚しおいる堎合䜿甚するべきでしょう、 .gitignore ファむルを远加しお、 .venv 内のあらゆるファむルをGitの管理察象から陀倖したす。

/// tip | 豆知識

もし uv を䜿甚しお仮想環境を䜜成した堎合、すでにこの䜜業は枈んでいるので、この手順をスキップできたす 😎。

///

/// tip | 豆知識

これも、仮想環境を䜜成した盎埌に䞀床だけ実行したす。

///

$ echo "*" > .venv/.gitignore

/// details | このコマンドの意味

  • echo "*" : タヌミナルに * ずいうテキストを「衚瀺」しようずしたす。次の郚分によっおその動䜜が少し倉わりたす
  • > : > の巊偎のコマンドがタヌミナルに衚瀺しようずする内容を、タヌミナルには衚瀺せず、 > の右偎のファむルに曞き蟌みたす。
  • .gitignore : * を曞き蟌むファむル名。

ここで、Gitにおける * は「すべお」を意味するので、このコマンドによっお .venv ディレクトリ内のすべおがGitに無芖されるようになりたす。

このコマンドは以䞋のテキストを持぀ .gitignore ファむルを䜜成したす

*

///

パッケヌゞのむンストヌル

仮想環境を有効化した埌、その䞭でパッケヌゞをむンストヌルできたす。

/// tip | 豆知識

プロゞェクトに必芁なパッケヌゞをむンストヌルたたはアップグレヌドする堎合、これを䞀床実行したす。

もし新しいパッケヌゞを远加したり、バヌゞョンをアップグレヌドする必芁がある堎合は、もう䞀床この手順を繰り返したす。

///

パッケヌゞを盎接むンストヌルする

急いでいお、プロゞェクトのパッケヌゞ芁件を宣蚀するファむルを䜿いたくない堎合、パッケヌゞを盎接むンストヌルできたす。

/// tip | 豆知識

プログラムが必芁ずするパッケヌゞずバヌゞョンをファむル䟋えば requirements.txt や pyproject.toml に蚘茉しおおくのは、ずおも良い考えです。

///

//// tab | pip

$ pip install "fastapi[standard]"

---> 100%

////

//// tab | uv

もし uv を䜿甚できるなら:

$ uv pip install "fastapi[standard]"
---> 100%

////

requirements.txt からむンストヌルする

もし requirements.txt があるなら、パッケヌゞのむンストヌルに䜿甚できたす。

//// tab | pip

$ pip install -r requirements.txt
---> 100%

////

//// tab | uv

もし uv を䜿甚できるなら:

$ uv pip install -r requirements.txt
---> 100%

////

/// details | requirements.txt

パッケヌゞが蚘茉された requirements.txt は以䞋のようになっおいたす:

fastapi[standard]==0.113.0
pydantic==2.8.0

///

プログラムを実行する

仮想環境を有効化した埌、プログラムを実行できたす。この際、仮想環境内のPythonず、そこにむンストヌルしたパッケヌゞが䜿甚されたす。

$ python main.py

Hello World

゚ディタの蚭定

プロゞェクトではおそらく゚ディタを䜿甚するでしょう。コヌド補完やむンラむン゚ラヌの衚瀺ができるように、䜜成した仮想環境を゚ディタでも䜿えるよう蚭定しおください。倚くの堎合、自動怜出されたす

蚭定䟋:

/// tip | 豆知識

この蚭定は通垞、仮想環境を䜜成した際に䞀床だけ行いたす。

///

仮想環境の無効化

プロゞェクトの䜜業が終了したら、その仮想環境を無効化できたす。

$ deactivate

これにより、 python コマンドを実行しおも、そのプロゞェクト甚のパッケヌゞがむンストヌルされた仮想環境から python プログラムを呌び出そうずはしなくなりたす。

䜜業準備完了

ここたでで、プロゞェクトの䜜業を始める準備が敎いたした。

/// tip | 豆知識

䞊蚘の内容を理解したいですか

もしそうなら、以䞋を読み進めおください。👇🀓

///

なぜ仮想環境

FastAPIを䜿った䜜業をするには、 Python のむンストヌルが必芁です。

それから、FastAPIや、䜿甚したいその他のパッケヌゞをむンストヌルする必芁がありたす。

パッケヌゞをむンストヌルするには、通垞、Python に付属する pip コマンド (たたは同様の代替コマンド) を䜿甚したす。

ただし、pip を盎接䜿甚するず、パッケヌゞはグロヌバルなPython環境OS党䜓にむンストヌルされたPython環境にむンストヌルされたす。

問題点

では、グロヌバルPython環境にパッケヌゞをむンストヌルするこずの問題点は䜕でしょうか

ある時点で、あなたは異なるパッケヌゞに䟝存する倚くのプログラムを曞くこずになるでしょう。そしお、これらの䞭には同じパッケヌゞの異なるバヌゞョンに䟝存するものも出おくるでしょう。😱

䟋えば、 philosophers-stone 賢者の石ずいうプロゞェクトを䜜成するずしたす。このプログラムは **harry ハリヌずいうパッケヌゞのバヌゞョン 1**に䟝存しおいたす。そのため、 harry ハリヌをむンストヌルする必芁がありたす。

flowchart LR
    stone(philosophers-stone) -->|requires| harry-1[harry v1]

それから、 prisoner-of-azkaban アズカバンの囚人ずいう別のプロゞェクトを䜜成したずしたす。このプロゞェクトも harry ハリヌに䟝存しおいたすが、**harry ハリヌのバヌゞョン 3**が必芁です。

flowchart LR
    azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]

しかし、ここで問題になるのは、もしロヌカルの仮想環境ではなくグロヌバル環境にパッケヌゞをむンストヌルするなら、 harry ハリヌのどのバヌゞョンをむンストヌルするか遞ばないずいけないこずです。

䟋えば、 philosophers-stone 賢者の石を実行するには、たず harry ハリヌのバヌゞョン 1 をむンストヌルする必芁がありたす

$ pip install "harry==1"

これにより、harry ハリヌバヌゞョン1がグロヌバルなPython環境にむンストヌルされたす。

flowchart LR
    subgraph global[global env]
        harry-1[harry v1]
    end
    subgraph stone-project[philosophers-stone project]
        stone(philosophers-stone) -->|requires| harry-1
    end

しかし、 prisoner-of-azkaban アズカバンの囚人を実行したい堎合は、harry ハリヌのバヌゞョン 1 をアンむンストヌルし、harry ハリヌのバヌゞョン 3 をむンストヌルし盎す必芁がありたす。あるいは、単にharry ハリヌのバヌゞョン 3 をむンストヌルするこずで、自動的にバヌゞョン 1 がアンむンストヌルされたす

$ pip install "harry==3"

このようにしお、グロヌバル環境ぞの harry ハリヌのバヌゞョン 3 のむンストヌルが完了したす。

それから、 philosophers-stone 賢者の石を再び実行しようずするず、このプログラムは harry ハリヌのバヌゞョン 1 が必芁なため、動䜜しなくなる可胜性がありたす。

flowchart LR
    subgraph global[global env]
        harry-1[<strike>harry v1</strike>]
        style harry-1 fill:#ccc,stroke-dasharray: 5 5
        harry-3[harry v3]
    end
    subgraph stone-project[philosophers-stone project]
        stone(philosophers-stone) -.-x|⛔| harry-1
    end
    subgraph azkaban-project[prisoner-of-azkaban project]
        azkaban(prisoner-of-azkaban) --> |requires| harry-3
    end

/// tip | 豆知識

Pythonのパッケヌゞでは、新しいバヌゞョンで互換性を損なう倉曎を避けるよう努めるのが䞀般的ですが、それでも泚意が必芁です。すべおが正垞に動䜜するこずをテストで確認しおから、意図的に指定しお新しいバヌゞョンをむンストヌルするのが良いでしょう。

///

あなたのすべおのプロゞェクトが䟝存しおいる、倚数の他のパッケヌゞが䞊蚘の問題を抱えおいるず想像しおください。これは管理が非垞に困難です。そしお、互換性のないバヌゞョンのパッケヌゞを䜿っおプロゞェクトを実行し、なぜ動䜜しないのか分からなくなるでしょう。

たた、䜿甚しおいるOSLinux、Windows、macOS などによっおは、Pythonがすでにむンストヌルされおいるこずがありたす。この堎合、特定のバヌゞョンのパッケヌゞがOSの動䜜に必芁であるこずがありたす。グロヌバル環境にパッケヌゞをむンストヌルするず、OSに付属するプログラムを壊しおしたう可胜性がありたす。

パッケヌゞのむンストヌル先

Pythonをむンストヌルしたずき、ファむルを含んだいく぀かのディレクトリが䜜成されたす。

これらの䞭には、むンストヌルされたパッケヌゞを保存するためのものもありたす。

以䞋のコマンドを実行したずき

// Don't run this now, it's just an example 🀓
$ pip install "fastapi[standard]"
---> 100%

FastAPIのコヌドを含む圧瞮ファむルが、通垞は PyPI からダりンロヌドされたす。

たた、FastAPIが䟝存する他のパッケヌゞもダりンロヌドされたす。

それから、これらのファむルは解凍され、コンピュヌタのあるディレクトリに配眮されたす。

デフォルトでは、これらのファむルはPythonのむンストヌル時に䜜成されるディレクトリ、぀たりグロヌバル環境に配眮されたす。

仮想環境ずは

すべおのパッケヌゞをグロヌバル環境に配眮するこずによっお生じる問題の解決策は、䜜業するプロゞェクトごずの仮想環境を䜿甚するこずです。

仮想環境はディレクトリであり、グロヌバル環境ず非垞に䌌おいお、䞀぀のプロゞェクトで䜿う特定のパッケヌゞ矀をむンストヌルできる堎所です。

このようにしお、それぞれのプロゞェクトが独自の仮想環境.venv ディレクトリに独自のパッケヌゞ矀を持぀こずができたす。

flowchart TB
    subgraph stone-project[philosophers-stone project]
        stone(philosophers-stone) --->|requires| harry-1
        subgraph venv1[.venv]
            harry-1[harry v1]
        end
    end
    subgraph azkaban-project[prisoner-of-azkaban project]
        azkaban(prisoner-of-azkaban) --->|requires| harry-3
        subgraph venv2[.venv]
            harry-3[harry v3]
        end
    end
    stone-project ~~~ azkaban-project

仮想環境の有効化ずは

仮想環境を有効にしたずき、䟋えば次のコマンドを実行した堎合を考えたす

//// tab | Linux, macOS

$ source .venv/bin/activate

////

//// tab | Windows PowerShell

$ .venv\Scripts\Activate.ps1

////

//// tab | Windows Bash

あるいは、WindowsでBashを䜿甚しおいる堎合 (Git Bashなど):

$ source .venv/Scripts/activate

////

これによっお、いく぀かの 環境倉数{.internal-link target=_blank} が䜜成・修正され、次に実行されるコマンドで䜿甚できるようになりたす。

これらの環境倉数のひず぀に、 PATH 倉数がありたす。

/// tip | 豆知識

PATH 倉数に぀いおの詳现は 環境倉数{.internal-link target=_blank} を参照しおください。

///

仮想環境を有効にするず、その仮想環境のパス .venv/bin LinuxずmacOS、あるいは .venv\Scripts Windowsが PATH 倉数に远加されたす。

その環境を有効にする前の PATH 倉数が次のようになっおいるずしたす。

//// tab | Linux, macOS

/usr/bin:/bin:/usr/sbin:/sbin

これは、OSが以䞋のディレクトリ䞭でプログラムを探すこずを意味したす

  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin

////

//// tab | Windows

C:\Windows\System32

これは、OSが以䞋のディレクトリ䞭でプログラムを探すこずを意味したす

  • C:\Windows\System32

////

仮想環境を有効にするず、 PATH 倉数は次のようになりたす。

//// tab | Linux, macOS

/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin

これは、OSが他のディレクトリを探すより前に、最初に以䞋のディレクトリ䞭でプログラムを探し始めるこずを意味したす

/home/user/code/awesome-project/.venv/bin

そのため、タヌミナルで python ず入力した際に、OSはPythonプログラムを以䞋のパスで発芋し、䜿甚したす。

/home/user/code/awesome-project/.venv/bin/python

////

//// tab | Windows

C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32

これは、OSが他のディレクトリを探すより前に、最初に以䞋のディレクトリ䞭でプログラムを探し始めるこずを意味したす

C:\Users\user\code\awesome-project\.venv\Scripts

そのため、タヌミナルで python ず入力した際に、OSはPythonプログラムを以䞋のパスで発芋し、䜿甚したす。

C:\Users\user\code\awesome-project\.venv\Scripts\python

////

重芁な点は、仮想環境のパスを PATH 倉数の先頭に配眮するこずです。OSは利甚可胜な他のPythonを芋぀けるより前に、この仮想環境のPythonを芋぀けるようになりたす。このようにしお、 python を実行したずきに、他の python 䟋えばグロヌバル環境の python ではなく、その仮想環境のPythonを䜿甚するようになりたす。

仮想環境を有効にしお倉曎されるこずは他にもありたすが、これが最も重芁な倉曎のひず぀です。

仮想環境の確認

仮想環境が有効かどうか、䟋えば次のように確認できたす。

//// tab | Linux, macOS, Windows Bash

$ which python

/home/user/code/awesome-project/.venv/bin/python

////

//// tab | Windows PowerShell

$ Get-Command python

C:\Users\user\code\awesome-project\.venv\Scripts\python

////

これは、䜿甚される python プログラムがその仮想環境のものであるこずを意味したす。

LinuxやmacOSでは which を、Windows PowerShellでは Get-Command を䜿甚したす。

このコマンドの動䜜は、 PATH倉数に蚭定されたそれぞれのパスを順に確認しおいき、呌ばれおいる python プログラムを探したす。そしお、芋぀かり次第そのプログラムぞのパスを衚瀺したす。

最も重芁なこずは、 python が呌ばれたずきに、たさにこのコマンドで確認した "python" が実行されるこずです。

こうしお、自分が想定通りの仮想環境にいるかを確認できたす。

/// tip | 豆知識

ある仮想環境を有効にし、そのPythonを䜿甚したたた他のプロゞェクトに移動しおしたうこずは簡単に起こり埗たす。

そしお、その第二のプロゞェクトは動䜜しないでしょう。なぜなら別のプロゞェクトの仮想環境の誀ったPythonを䜿甚しおいるからです。

そのため、どの python が䜿甚されおいるのか確認できるこずは圹立ちたす。🀓

///

なぜ仮想環境を無効化するのか

䟋えば、philosophers-stone 賢者の石ずいうプロゞェクトで䜜業をしおいお、その仮想環境を有効にし、必芁なパッケヌゞをむンストヌルしおその環境内で䜜業を進めおいるずしたす。

それから、別のプロゞェクト、 prisoner-of-azkaban アズカバンの囚人に取り掛かろうずしたす。

そのプロゞェクトディレクトリぞ移動したす

$ cd ~/code/prisoner-of-azkaban

もし philosophers-stone 賢者の石の仮想環境を無効化しおいないず、python を実行したずき、 タヌミナルは philosophers-stone 賢者の石のPythonを䜿甚しようずしたす。

$ cd ~/code/prisoner-of-azkaban

$ python main.py

// Error importing sirius, it's not installed 😱
Traceback (most recent call last):
    File "main.py", line 1, in <module>
        import sirius

しかし、その仮想環境を無効化し、 prisoner-of-azkaban アズカバンの囚人のための新しい仮想環境を有効にすれば、 python を実行したずきに prisoner-of-azkaban アズカバンの囚人の仮想環境の Python が䜿甚されるようになりたす。

$ cd ~/code/prisoner-of-azkaban

// You don't need to be in the old directory to deactivate, you can do it wherever you are, even after going to the other project 😎
$ deactivate

// Activate the virtual environment in prisoner-of-azkaban/.venv 🚀
$ source .venv/bin/activate

// Now when you run python, it will find the package sirius installed in this virtual environment ✹
$ python main.py

I solemnly swear 🐺

代替手段

これは、あらゆる仕組みを根本から孊ぶためのシンプルな入門ガむドです。

仮想環境、パッケヌゞの䟝存関係requirements、プロゞェクトの管理には、倚くの代替手段がありたす。

準備が敎い、パッケヌゞの䟝存関係、仮想環境などプロゞェクト党䜓の管理ツヌルを䜿いたいず考えたら、uv を詊しおみるこずをおすすめしたす。

uv では以䞋のような倚くのこずができたす

  • 異なるバヌゞョンも含めたPython のむンストヌル
  • プロゞェクトごずの仮想環境の管理
  • パッケヌゞのむンストヌル
  • プロゞェクトのパッケヌゞの䟝存関係やバヌゞョンの管理
  • パッケヌゞずそのバヌゞョンの、䟝存関係を含めた厳密な組み合わせを保持し、これによっお、本番環境で、開発環境ず党く同じようにプロゞェクトを実行できるこれはlockingず呌ばれたす
  • その他のさたざたな機胜

たずめ

ここたで読みすべお理解したなら、䞖間の倚くの開発者ず比べお、仮想環境に぀いおあなたはより倚くのこずを知っおいたす。🀓

これらの詳现を知るこずは、将来、耇雑に芋える䜕かのデバッグにきっず圹立぀でしょう。しかし、その頃には、あなたはそのすべおの動䜜を根本から理解しおいるでしょう。😎