Pythonの仮想環境
以下の回答をまとめると
以前はPython本体にprojectを管理する機構がなかった
そのため、projectを管理するために外部ツールを使用する必要があった
いくつかの方法(ツール)が乱立していた
仮想環境を使うもの
これを実現するツールも色々あった
その他
Python 3.3でvenvという仮想環境を扱う機構がPython本体に入った とはいえ、この表を見た感じvenvはしょぼいのだなmrsekut.icon
https://gyazo.com/52ef79a8b26ac1ae73acf79dea013002 https://zenn.dev/os1ma/articles/935f6e653f1052
なので、venvが入った以降も外部ツールを使うのが一般的で、特にRyeが筋がよいとされている、という感じか Ryeのdocsに以下の様な文章があった
After that, Rye will have created a virtualenv in .venv and written lockfiles into requirements.lock and requirements-dev.lock. ref ここに出てくる「virtualenv」というのは、
「Pythonの仮想環境」というより一般的なものを指しているらしい
言葉の使い方、あるいはvirtualenvというツールが存在することでめっちゃ紛らわしいmrsekut.icon Pythonに慣れている人なら意味がわかるのだろけど
GPT-4.icon
仮想環境(virtual environment)とは?
仮想環境は、Pythonのインタープリターとパッケージ(ライブラリ)をプロジェクトごとに分離して管理するための仕組みです。
仮想環境を使用することで、システム全体にインストールされているPythonやパッケージに影響を与えず、特定のプロジェクトだけに必要な依存関係を管理できます。
PythonにはJSで言うところのnpm project的な機構が存在しない(?)らしいmrsekut.icon
projectを分けて管理する、という部分が弱い
仮想環境に関連するツールやその立ち位置についての詳細を説明します。
### 1. Python本体と仮想環境の立ち位置
仮想環境は、Pythonの本体や仕様そのものに組み込まれた機能ではありませんでした。
しかし、Pythonの開発者たちは、依存関係の管理や環境の再現性が重要であることを理解し、仮想環境の仕組みをサポートする方向に進んできました。
Python 3.3以降では、Python本体に仮想環境を作成するための機能として、venvモジュールが組み込まれました。 これにより、仮想環境を作成するために必ずしも外部ツール(例: virtualenv)に依存する必要はなくなりました。
### 2. 仮想環境ツールの歴史と役割
もともと、Pythonには仮想環境を作成する標準的な方法が存在しなかったため、virtualenvというツールが開発されました。
virtualenvは、Pythonプロジェクトごとに独立した環境を作成し、依存関係を管理するための非常に便利なツールでした。 かつては仮想環境を作成するためのデファクトスタンダードでした。
Python 3.3以降も引き続き使用できますが、venvモジュールが登場してからは、どちらか一方を選んで使用することが一般的です。
仮想環境以外の解決策
仮想環境を使わずに依存関係の管理や環境の再現性を確保するために、以下のような方法やツールが存在します。
Pythonの依存関係管理と仮想環境の作成を統合したツールです。Pipfileというファイルを使って依存関係を管理し、仮想環境も自動で管理します。pipenvは、依存関係の指定やロックファイルの生成なども行い、プロジェクトの再現性を高めるために使われます。
依存関係管理、パッケージ管理、仮想環境の管理を統合したツールです。poetryは、モダンなPythonプロジェクトの管理を目指しており、pyproject.tomlファイルを使って依存関係やプロジェクトの設定を一元管理します。
仮想環境管理だけでなく、Python以外のパッケージも管理できるツールです。AnacondaやMinicondaで知られており、データサイエンスや機械学習の分野でよく使われます。condaはPython環境も含めた複数の環境を簡単に作成・管理できます。
### 4. 仮想環境を作成する他のツール
仮想環境を作成するツールには、virtualenvやvenv以外にもいくつかあります。以下はその例です。
仮想環境の作成というより、Pythonのバージョンを管理するツールですが、pyenv-virtualenvプラグインを使うことで、pyenvを利用した仮想環境の作成・管理が可能です。
テストスイートの実行やプロジェクトの管理を行うためのツールで、仮想環境の作成もサポートしています。テストやCI/CD環境での使用を意識した設計です。