Pythonの仮想環境構築について

# インストール
# 1-1. Windows
https://www.python.org/downloads/windows/

# 1-2. macOS
https://www.python.org/downloads/macos/

# 2. バージョンの確認
```py
python -V
Python 3.10.11
```

# 3. 仮想環境の構築
# 3-1 Anaconda
AnacondaでPythonを導入した方は、「conda」の方がメリットがあります。
https://www.anaconda.com/download
なぜ conda を薦めるかというと、

    仮想環境を管理しやすい
    仮想環境が使いやすい
    Jupyter Notebook用仮想環境も作成可能
    OSに関係なく使い方は一緒
    関連ライブラリも一緒にダウンロード可能
    Pythonのバージョン指定が簡単に設定できる
    違う仮想環境に直ぐに変えられる
# 3-2 virtualenv
virtualenvは、サードパーティ製の Pythonライブラリ。Pythonには標準搭載されていなく、別途
```py
pip install virtualenv
```
# 3-3 venv
pythonに標準搭載された仮想環境のプログラム。
```py
python -m venv ○○
```

# 3-4 venv まとめ
作成する仮想環境名： env_py

```Windows.
仮想環境の構築
> python -m venv env_py

仮想環境の開始
> env_py¥Scripts¥activate

仮想環境の終了
> deactivate
```
```MAC.
仮想環境の構築
> python -m venv env_py

仮想環境の開始
> source env_py/bin/activate

仮想環境の終了
> deactivate
```

# 4 condaとvirtualenvとenvのコマンド表

# 4-1 Windows環境下の各仮想環境のコマンド

作成する仮想環境名： env_py

<table border="1" style="vertical-align:middle;">
    <tbody><tr style="text-align: center;background-color: black;color: white">
        <td>処理内容</td>
        <td>種類</td>
        <td>コード</td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の構築</td>
        <td>conda</td>
        <td><pre><code>conda create -n env_py</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>virutalenv env_py</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>python -m venv env_py</code></pre></td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の開始</td>
        <td>conda</td>
        <td><pre><code>conda activate env_py</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>env_py\Scripts\activate</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>env_py\Scripts\activate</code></pre></td>
    </tr>    
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリのインストール</td>
        <td>conda</td>
        <td><pre><code>conda install ○○</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip install ○○</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip install ○○</code></pre></td>
    </tr>       
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリ一覧表示</td>
        <td>conda</td>
        <td><pre><code>conda list</code></pre></td>
    </tr>
    <tr>
        <td style="vertical-align:middle;">virtualenv</td>
        <td><pre><code>pip list</code></pre> or <pre><code>pip freeze</code></pre></td>
    </tr>
    <tr>
        <td style="vertical-align:middle;">venv</td>
        <td><pre><code>pip list</code></pre> or <pre><code>pip freeze</code></pre></td>
    </tr>      
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリInfo</td>
        <td>conda</td>
        <td>なし</td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip show 〇〇</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip show 〇〇</code></pre></td>
    </tr>     
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の終了</td>
        <td>conda</td>
        <td><pre><code>deactivate</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>deactivate</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>deactivate</code></pre></td>
    </tr>     
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の管理</td>
        <td>conda</td>
        <td><pre><code>conda info -e</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td>なし</td>
    </tr>
    <tr>
        <td>venv</td>
        <td>なし</td>
    </tr>  
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">Pythonのバージョン指定</td>
        <td>conda</td>
        <td>簡単</td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td>やや難</td>
    </tr>
    <tr>
        <td>venv</td>
        <td>やや難</td>
    </tr>  
</tbody></table>

# 4-2 Mac版のコマンド
<table border="1" style="vertical-align:middle;">
    <tbody><tr style="text-align: center;background-color: black;color: white">
        <td>処理内容</td>
        <td>種類</td>
        <td>コード</td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の構築</td>
        <td>conda</td>
        <td><pre><code>conda create -n env_py</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>virtualenv env_py</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>python -m venv env_py</code></pre></td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の開始</td>
        <td>conda</td>
        <td><pre><code>source activate env_py</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>source env_py/bin/activate</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>source env_py/bin/activate</code></pre></td>
    </tr>    
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリのインストール</td>
        <td>conda</td>
        <td><pre><code>conda install ○○</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip install ○○</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip install ○○</code></pre></td>
    </tr>       
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリ一覧表示</td>
        <td>conda</td>
        <td><pre><code>conda list</code></pre></td>
    </tr>
    <tr>
        <td style="vertical-align:middle;">virtualenv</td>
        <td><pre><code>pip list</code></pre> or <pre><code>pip freeze</code></pre></td>
    </tr>
    <tr>
        <td style="vertical-align:middle;">venv</td>
        <td><pre><code>pip list</code></pre> or <pre><code>pip freeze</code></pre></td>
    </tr>      
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">ライブラリInfo</td>
        <td>conda</td>
        <td>なし</td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip show 〇〇</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip show 〇〇</code></pre></td>
    </tr>     
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の終了</td>
        <td>conda</td>
        <td><pre><code>source deactivate</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>deactivate</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>deactivate</code></pre></td>
    </tr>     
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">仮想環境の管理</td>
        <td>conda</td>
        <td><pre><code>conda info -e</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td>なし</td>
    </tr>
    <tr>
        <td>venv</td>
        <td>なし</td>
    </tr>  
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">Pythonのバージョン指定</td>
        <td>conda</td>
        <td>簡単</td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td>やや難</td>
    </tr>
    <tr>
        <td>venv</td>
        <td>やや難</td>
    </tr>  
</tbody></table>

# 5 プロジェクトで必要なライブラリ群の管理
Pythonのプロジェクトで必要なライブラリは、requirements.txt にまとめておくと管理しやすい。 
GitHubで公開されている Pythonプロジェクトの多くは requirements.txt で必要なライブラリを管理しているようです。

requirements.txt の作成は、仮想環境のコマンドを使用するのですが、各仮想環境で作成と読み込み方が違います。参考まで
<table border="1" style="vertical-align:middle;">
    <tbody><tr style="text-align: center;background-color: black;color: white">
        <td>ファイルの...</td>
        <td>種類</td>
        <td>コード</td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">作成</td>
        <td>conda</td>
        <td><pre><code>conda list --export &gt; requirements.txt</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip freeze &gt; requirements.txt</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip freeze &gt; requirements.txt</code></pre></td>
    </tr>
    <tr>
        <td rowspan="3" style="vertical-align:middle;text-align: center;font-size: 0.8em">インストール</td>
        <td>conda</td>
        <td><pre><code>conda install --yes --file requirements.txt</code></pre></td>
    </tr>
    <tr>
        <td>virtualenv</td>
        <td><pre><code>pip install -r requirements.txt</code></pre></td>
    </tr>
    <tr>
        <td>venv</td>
        <td><pre><code>pip install -r requirements.txt</code></pre></td>
    </tr>    
</tbody></table>

# 6 ライブラリ

Pythonの標準ライブラリには、例えば以下のようなものがあります

    math：数学関数を提供するモジュール
    os：ファイルやディレクトリの操作を提供するモジュール
    datetime：日付や時間の処理を提供するモジュール
    random：ランダムな数値やシーケンスを生成するモジュール

また、Pythonの外部ライブラリとしては、例えば以下のようなものがあります

    NumPy：科学技術計算を行うためのライブラリ
    Pandas：データ処理や分析を行うためのライブラリ
    Matplotlib：グラフやチャートを作成するためのライブラリ
    SciPy：数学、科学、工学のための数値解析機能
    Scikit-learn：機械学習のためのライブラリ