1
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】なぜ仮想環境が必要なのか(初心者向け)

Last updated at Posted at 2024-11-16

仮想環境とは?

基本的にPython開発では開発PCの中に仮想的な開発環境を構築し、仮想環境上で開発を行います。
この仮想環境は1台のPCに複数構築することが可能で、成果物などに応じて切り替えて使用します。
{C80FC9C0-BAEC-466F-912D-916844E243A3}.png

なぜ仮想環境が必要なのか

まず仮想環境を使用するうえで一番直感的に理解しやすいパターンから考えていきましょう。

複数プロジェクトに携わる例

例としてDeveloper Bが複数のプロジェクト開発に携わっている場合について考えます。
{8DB322C2-7CBE-4CA9-B8AE-DE80F05C6B60}.png

どちらのプロジェクトでもLibrary Aを使用した開発となっていますが、バージョンが違いますね。
両方ともDeveloper Bが開発を行いますが、プロジェクトごとにPCを分けられるような贅沢な環境ならまだしも、一般的には1台のPCで開発することが求められます。

このような場合に仮想環境を使うことで上手いことできるようになります。
{24C12DF7-CF32-4466-B2A1-D8ECF51020CF}.png

1. 開発PCにProject_Aという仮想環境を構築する。
2. 仮想環境Project_Aに対してLibrary A ver1.0をインストールする。
3. 開発PCにProject_Bという仮想環境を構築する。
4. 仮想環境Project_Bに対してLibrary A ver2.0をインストールする。

それぞれの仮想環境は独立していますから、お互いのプロジェクトに対して影響しあうことなく開発ができるようになりました。

ではこのようなパターンでしか仮想環境を使わないのか?と言われるとそうではありません。
Pythonを使った開発では基本的に仮想環境を構築するものと考えてください。

仮想環境を構築する必要性について

仮想環境を構築するメリットは大きく分けて以下の4つにあると考えています。

  1. 複数プロジェクトを管理しやすい
  2. 目的に対して必要最低限のライブラリに限定することができる
  3. ライブラリのリビジョン管理ができる
  4. 開発環境を複数人で共有しやすい

上記1に関しては先ほど例に挙げたものですね。
以降のメリットには、依存ライブラリというものが関係してきます。

必要最低限のライブラリに限定

1つのライブラリをインストールする場合でも複数の依存ライブラリも併せてインストールされるわけですが、仮想環境を使用せず同じ開発環境をずっと使い続けた場合はどうなるでしょうか。
{FF787737-EBD8-4FC4-B9BA-A62D3881AAFC}.png

上記例の場合、Application Cに必要なのはLibrary Cのみですが他のアプリ開発時に使用したライブラリも混在している状態になります。

Application Cを納品するうえで不要なライブラリが大量に含まれた状態で提供すると実行ファイルのサイズが爆発的に膨れ上がります。
それに伴って処理速度の低下も招くため成果物の品質を著しく低下させることになります。

それ以外にも、不要なライブラリが多いと依存ライブラリの競合によるエラーが発生する可能性も上がります。
ライブラリ同士が邪魔をし合って意図した挙動とは異なる動きをするためです。

例えば以下の例の場合、Library BLibrary Aver 1.0に依存しており、
Library CLibrary Aver 2.0に依存している状態です。
このLibrary BLibrary Cの両方が開発環境に入っており、Library Bを使いたい場合について考えます。

{00F7F8A6-7BEA-481C-B774-3FA35D0C76EE}.png

Library Bが依存している処理がfunc Aの場合はver 2.0でも修正されていないため特に問題はありませんが、func Bの処理に依存している場合はver 2.0で更新されているため正常に動作しない可能性がありますよね。
ver 1.0func Bの挙動を前提としてLibrary Bが作られているのに、Library Cがあるせいでver 2.0が採用されていたりでもしたら自分が書いたソースコードに異常がないのにLibrary B側でエラーになったりするわけです。
きちんと仮想環境を構築した場合でもライブラリの相性によっては事態が避けられないこともありますが、Library Cが成果物に不要なものであった場合、無意味な事故を招くことになります。

もちろん1つの開発環境を使いまわす際に開発環境をリセットするのであれば、この点においては仮想環境を構築しているのと変わりませんからそれでも問題ありませんが、依存ライブラリも含めて正確にリセットする手間を考えれば仮想環境を作ってしまったほうが遥かに楽で事故も少ないですよね。

ライブラリのリビジョン管理

誤って不要なライブラリをインストールしてしまった場合、依存ライブラリも含めて更新がかかるため悲惨なことになります。
そうでなくても開発途中で新しくライブラリをインストールした際に、今まで動いていた機能が動かなくなったりした場合、原因は追加したライブラリにあることが多いのですが、これを元に戻すのも地獄です。

こういった場合、仮想環境の構築方法にもよりますが、ライブラリの変遷をリビジョンとして記録してくれる機能があります。
{7CF0EDEC-FB59-4613-859A-D40E420798A2}.png
画像赤枠内にrevと書かれていますがこれがリビジョンを表しています。
最初に仮想環境を構築した時がrev 0となっていて、そこからライブラリを更新するたびにリビジョンが上がって記録されます。

戻したいリビジョン番号を指定してインストールしなおすコマンドもあるので、それを使えば依存ライブラリも含めて簡単かつきれいに元通りにできるんです。凄いですよねぇ。
{B7E9CA46-F637-4CFB-A5F6-4DC0997EF3C5}.png

複数人で開発環境を共有

仮想環境用のツールではインストール済みのライブラリを外部ファイルに出力する機能と、外部ファイルを元にライブラリをインストールする機能が用意されています。

そのため開発者が複数人いる場合に、先行して環境構築を行った人の仮想環境と同じ環境を他の開発者にも簡単に提供できるというわけです。

まとめ

最後までご覧いただきありがとうございました。
今回は仮想環境の必要意義について私なりの解釈を図説多めで語ってみました。
Pythonに限らず様々な言語で仮想環境構築の概念は必要になりますので
その一助になれたら幸いです。

1
1
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
1
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?