Bot 環境構築・インフラ

仮想通貨botの開発記録#102(2024/9/8)「Pythonの仮想環境まとめ」

2024年9月8日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

今回は「Pythonの仮想環境の種類」についてまとめました。

Yodaka

仮想通貨botを作る時の参考になれば幸いです。

解決したかったこと

・仮想環境とネイティブ環境の違いを理解する

・Pythonの仮想環境と実行環境の違いを理解する

・仮想環境の種類とその特徴を理解する

・botの開発と運用に最適な仮想環境を目的に応じてそれぞれ選択できるようになる

ネイティブ環境とは?

「仮想環境」の対義語として一般的に考えられるのは「物理環境」や「ネイティブ環境」です。

  • 物理環境: 実際のハードウェア上で直接動作する環境を指します。サーバーやコンピューター上の物理的なリソース(CPU、メモリ、ストレージなど)を直接使用してアプリケーションやソフトウェアを動作させる環境です。
  • ネイティブ環境: 仮想化されていない、ホストOSやハードウェア上で直接動作する環境を指します。これには仮想マシンやコンテナなどを使用せず、ソフトウェアが直接OSやハードウェアで動作している状態を指します。

仮想環境は、これに対してソフトウェア的に分離された独立した実行環境を提供するものです。

仮想環境とネイティブ環境の違い

仮想環境とネイティブ環境の違いは、主にソフトウェアがどのように実行され、リソースにアクセスするかに関係しています。以下にその主な違いをまとめます。

1. 実行場所

  • 仮想環境:
    • 仮想化技術を使用して、実際のハードウェアから隔離された独立した環境でソフトウェアが実行されます。
    • 例: 仮想マシン、コンテナ、Pythonの仮想環境(venvpyenvなど)。
    • 同じマシン上で複数の仮想環境を作成し、それぞれに異なる設定やソフトウェアをインストールして実行できます。
  • ネイティブ環境:
    • ソフトウェアが直接、物理的なハードウェア上で実行されます。仮想化層や抽象化レイヤーは存在しません。
    • 例: オペレーティングシステム(OS)上で直接実行されるアプリケーション。

2. リソース管理

  • 仮想環境:
    • CPU、メモリ、ディスクなどのリソースをホスト環境(物理的なマシン)から仮想化して割り当てます。リソースは共有され、制限されることがあります。
    • 仮想環境は、ホスト環境の上で動作し、ホストOSや他の仮想環境とリソースを共有します。
  • ネイティブ環境:
    • リソースに直接アクセスし、全ての物理的なハードウェア資源をフルに利用できます。
    • 仮想化のオーバーヘッドがないため、一般的にネイティブ環境の方がパフォーマンスが高いです。

3. パフォーマンス

  • 仮想環境:
    • 仮想化層が存在するため、パフォーマンスがやや低下する可能性がありますが、コンテナ技術(例: Docker)の場合、オーバーヘッドは少ないことも多いです。
    • 仮想マシンの場合は、ハイパーバイザー(仮想化ソフトウェア)がリソースを管理するため、ややパフォーマンスの影響があります。
  • ネイティブ環境:
    • リソースに直接アクセスできるため、一般的にパフォーマンスが最適化され、より高い処理速度が期待できます。

4. 隔離性

  • 仮想環境:
    • 仮想環境ごとに独立した設定や依存関係が存在し、他の環境に影響を与えません。
    • 例: Pythonの仮想環境では、特定のプロジェクトごとに異なるライブラリをインストールできます。
  • ネイティブ環境:
    • すべてのアプリケーションや依存関係が同じOS上で動作するため、設定の変更や依存関係の競合が発生する可能性があります。

5. 用途

  • 仮想環境:
    • 開発環境やテスト環境で多く使用され、異なる設定や依存関係が必要なプロジェクトを同じマシン上で管理するのに便利です。
    • コンテナ化技術を用いたマイクロサービスアーキテクチャでもよく使われます。
  • ネイティブ環境:
    • パフォーマンスが重要なプロダクション環境やリソースを最大限に活用したい場合に適しています。

仮想環境は柔軟性や隔離性に優れており、開発やテストに最適です。一方、ネイティブ環境はシンプルでパフォーマンスが重視される場面で使用されることが多いです。

仮想環境と実行環境の違い

Yodaka

「仮想環境」と「実行環境」という用語はよく似ていますが、意味は少し異なります。それぞれの違いを理解すると、より明確にそれぞれの役割が分かります。

1. 仮想環境 (Virtual Environment)

  • 仮想環境は、Pythonのプロジェクトごとに異なるライブラリや依存関係を隔離して管理するための仕組みです。
  • 仮想環境を使うと、複数のプロジェクトが異なるバージョンのパッケージやPython自体を使用していても、それぞれのプロジェクトが影響を受けることはありません。
  • **pyenvvenvvirtualenv**は、Pythonで仮想環境を作成・管理するためのツールです。例えば、プロジェクトAではnumpyのバージョン1.19、プロジェクトBではnumpyのバージョン1.21を使う場合に、仮想環境を作成することで、これらを共存させることができます。
    • 仮想環境はプロジェクトに依存しており、そのプロジェクト専用の依存関係を管理します。
    • 仮想環境は一般的にプロジェクトごとに作成され、個別にインストールしたライブラリやPythonバージョンを持ちます。

2. 実行環境 (Execution Environment / Runtime Environment)

  • 実行環境は、プログラムやスクリプトが実際に実行される環境全体を指します。これは、仮想環境に加えて、プログラムが実行されるオペレーティングシステム、システムの設定、依存関係、ハードウェア、そして仮想環境自体も含みます。
  • プログラムが実際に動作する「場所」や「環境」として考えられ、ローカルマシンやサーバー、クラウド環境、Dockerコンテナなどが該当します。
    • 例: VSCodeJupyterでスクリプトを実行する際、そのスクリプトが動作している「実行環境」は、その時使っているPythonバージョン、仮想環境、そしてそれが動いているオペレーティングシステムやその他の外部ツールなどを含みます。

違いのポイント

  • 仮想環境は、Pythonのパッケージと依存関係を隔離して管理する「Python特有の環境」です。プロジェクトごとのPythonバージョンやパッケージを管理します。
  • 実行環境は、プログラムが実行されるシステム全体を指し、仮想環境もその一部として含まれる広い概念です。

まとめると:

仮想環境はPythonのパッケージや依存関係を管理するものですが、実行環境はプログラム全体が動作する環境(仮想環境を含む)を指します。Pythonの開発では、プロジェクトごとに仮想環境を作成し、その仮想環境を使用してコードを実行することで、他のプロジェクトに影響を与えずに作業できます。

Pythonの仮想環境とは?どんな種類があるのか?

Pythonで開発をしていると、「仮想環境」という言葉をよく耳にするかもしれません。仮想環境は、プロジェクトごとにPythonのバージョンやライブラリを管理するためのとても便利な仕組みです。

Yodaka

ここでは、Pythonで使われる仮想環境の種類とその特徴、そして使い分けについて解説します。


仮想環境って何?

仮想環境とは、プロジェクトごとにPythonのバージョンやパッケージ(ライブラリ)を個別に管理する仕組みです。Pythonのプロジェクトは、それぞれが異なるライブラリや依存関係を持っていることがあります。もし、システム全体でライブラリをインストールしてしまうと、複数のプロジェクトで使っているライブラリのバージョンが衝突してしまうことがあります。

仮想環境を使うと、各プロジェクトが独自の環境を持てるので、ライブラリの衝突やバージョンの違いを気にせずに開発ができます。


Pythonの仮想環境ツールの種類

Pythonにはいくつかの仮想環境を作るためのツールがあります。それぞれの特徴を見ていきましょう。

1. venv(Python標準の仮想環境)

venvは、Pythonに標準で付属している仮想環境作成ツールです。Python 3.3以降に含まれており、追加でインストールする必要がありません。

特徴:

  • Pythonに標準搭載されているので、すぐに使えます。
  • 簡単なプロジェクトや、小規模な開発に適しています。
  • 他のツールと比べてシンプルで、余計な機能がないため初心者でも扱いやすいです。

使い方:

python -m venv myenv  # 'myenv' は仮想環境の名前です
source myenv/bin/activate  # 仮想環境を有効化

2. virtualenv(より柔軟な仮想環境ツール)

virtualenvは、venvの元となったツールで、Python 2でも使えます。venvが登場した今でも、互換性が高く、多機能なので広く使われています。

特徴:

  • venvよりも古くからあるため、幅広いPythonバージョンをサポートしています(Python 2や古いPython 3)。
  • 一部の高度なオプションや拡張機能を提供しています。
  • venvよりも柔軟に環境を管理できるため、大規模なプロジェクトや複数のPythonバージョンを扱う場合に便利です。

使い方:

pip install virtualenv  # 最初にインストールする必要があります
virtualenv myenv
source myenv/bin/activate

3. pyenv + pyenv-virtualenv(Pythonのバージョン管理もできる)

pyenvは、Pythonのバージョン自体を管理するツールです。さらに、このpyenvに仮想環境を管理する機能を追加するのがpyenv-virtualenvです。

特徴:

  • Pythonのバージョン自体のインストールと切り替えが簡単にできます(例えば、Python 3.8と3.10を同時に管理可能)。
  • プロジェクトごとに異なるPythonバージョンを使う必要がある場合に便利です。
  • pyenvの機能と仮想環境の機能を一緒に使うことで、強力な環境管理ができます。

使い方:

pyenv install 3.12.4  # Pythonバージョン3.12.4をインストール
pyenv virtualenv 3.12.4 myenv  # 3.12.4の環境で仮想環境を作成
pyenv activate myenv  # 仮想環境を有効化

4. Anaconda/Miniconda(データサイエンス向けの仮想環境)

Anacondaやその軽量版のMinicondaは、データサイエンスや機械学習に特化した環境を簡単に作れるツールです。Pythonだけでなく、Rや他の言語の環境も簡単に管理できます。

特徴:

  • 大量のデータサイエンス向けライブラリ(NumPy, Pandas, TensorFlowなど)が簡単にインストールできる。
  • 仮想環境をcondaコマンドで管理します。
  • データサイエンスや機械学習のプロジェクトに特化しているため、それらを行う人におすすめです。

使い方:

conda create --name myenv python=3.12  # Python 3.12の環境を作成
conda activate myenv  # 仮想環境を有効化

どの仮想環境を使えばいいのか?

それぞれのツールには特徴があり、状況によって使い分けが必要です。以下に、どんな場面でどのツールを使うと良いかをまとめました。

  • 小規模なプロジェクトや初心者:
    • venvがおすすめです。標準で使えるので、シンプルで扱いやすいです。
  • Python 2も含めた複数のバージョンや、拡張性が必要な場合:
    • virtualenvpyenv-virtualenvが便利です。特にpyenvはPythonのバージョン管理が楽になるので、異なるPythonバージョンを使いたい場合に便利です。
  • データサイエンスや機械学習プロジェクト:
    • AnacondaMinicondaがおすすめです。大量のライブラリがあらかじめ用意されているため、すぐに開発を始められます。

まとめ

仮想環境を使うと、プロジェクトごとの依存関係を管理でき、他のプロジェクトに影響を与えることなく開発が可能になります。初心者のうちは、venvから始めるのがおすすめですが、プロジェクトが大きくなったり、特定の用途に応じてpyenvAnacondaなど他のツールも使いこなせるようになるとさらに便利です。

Yodaka

仮想環境を使って、スムーズにbot開発を進めましょう!

まとめ

今回は「Pythonの仮想環境の種類とその特徴」についてまとめました。

私は、現在pyenv + 仮想環境構築ツールをベースに開発しています。

最近までAnacondaを使っていたのですが、外部サーバーでもbotをシンプルに稼働させて手軽に管理したいという目的のために異なる種類の仮想環境も理解する必要が出てきたため、今回1から調べ直してみました。

Yodaka

技術の基礎的な部分を理解していると、発展的な技術の理解も早くなるという実感があります。

今後もこの調子で開発の経過を発信していきます。

-Bot, 環境構築・インフラ