Anacondaが有償化されて困っている人に贈る、Pythonのパッケージ管理

# Anacondaの商用有償化
[こちらの記事](https://qiita.com/tfukumori/items/f8fc2c53077b234384fc)でご存知の方も多いかと思いますが、
**2020/4より、従業員数200名以上の営利企業では、Anacondaの利用が有償化**されたようです
(無料のIndividual Editionではなく、Commercial Editionを利用するよう規約改定)

この改正により、
**業務でAnacondaを利用中で代替手段に困っている方**
が巷にあふれているかと思います！ (私もその一人です‥泣)

何とかならないものかと調査し、**代わりとなる手段**の比較と導入法をまとめてみました。

私が独自に調べてまとめた記事ですので、間違い等ございましたら指摘頂けるとありがたいです！

### ※ 2023/3/4追記

**本記事の内容を発展**させ、さらに詳細にパッケージ管理について解説した**記事を作成**いたいました

https://qiita.com/c60evaporator/items/b6a7394231d1e768ce64

## 代替手段まとめ

いきなり結論ですが、WindowsにおけるAnaconda無償版の代替ツールを表にまとめてみました。
大きく下記3通りの代替手段がありそうです。

**※2021/2/21追記**
[Miniconda + conda forgeという代用手段も使用可能であることが確認されたそうです。](https://qiita.com/tfukumori/items/f8fc2c53077b234384fc#%E3%81%BE%E3%81%A8%E3%82%81)
Anacondaの最大のメリットであるIntel MKLが使えるかどうか等、まだ調べられていないので、調査次第追記しようと思います。

また、学習コストが高いので本記事では詳細は触れませんが、**WSL2＋Docker**でLinuxライクに環境管理することも可能です。
[こちらは別記事にまとめました](https://qiita.com/c60evaporator/items/fd019f5ac6eb4d612cd4)

**・各ツールのメリットまとめ**

||venv+pip|pipenv|Anaconda有償版|
|---|---|---|---|
|導入・学習の手軽さ|〇 (インストール不要)|× (pipfileの学習が必要)|× (一見手軽だが実は複雑)|
|ライブラリ依存関係の解決|×|〇|〇|
|行列計算速度|×|×|〇|
|コスト|〇 (無料)|〇 (無料)|× (14.95$/月)|

<br>

**全てを読むのが面倒くさい！**
という方は、下記フローを参考に実際の使用法まで飛んでください

**1. 手軽に環境切替したい or 仮想環境自体が不要な方**
→[Python組み込みの**venv+pip**でOK (リンク先に使用法)](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#1-venv--pip%E3%81%AE%E4%BD%BF%E7%94%A8%E6%B3%95)

**2. チームで環境を共有したい、ライブラリの依存関係も管理したい、でもタダがいい方**
→[**pipenv**を使用 (リンク先に使用法)](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#2-pipenv%E3%81%AE%E4%BD%BF%E7%94%A8%E6%B3%95)

**3. お金($14.95/月)を払ってでも機械学習や数値計算の処理速度を求める方**
→[**Anaconda Commercial Edition**を使用](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#3-anaconda%E6%9C%89%E5%84%9F%E7%89%88)



### 仮想環境とは？
上記選択を判断するうえで、「**仮想環境って何やねん？**」と思われる方もいるかもしれないので、解説します。

まず、ここでいう「環境」とは、「Python本体＋ライブラリ」の事を指します。
WindowsにPythonやそのライブラリをインストールすると、これが「デフォルト環境」になるわけですが、
この「デフォルト環境」とは別に、**プロジェクトごとに環境を作る事を「仮想環境」といいます**。

[こちらに記載されているように](https://qiita.com/ozaki_physics/items/985188feb92570e5b82d#%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%A8%E3%81%AF)、トラブル特定や管理の容易さからインストールされるライブラリは必要最低限が望ましく、これを実現するためには**プロジェクトごとに仮想環境を持つ事があるべき姿**と言えます。
一方で仮想環境の管理には手間も学習コストも掛かり、個人のちょっとした開発では割に合わないとも言えるので、結局のところ

**仮想環境：　チーム開発や、リリースに近い開発向け**
**デフォルト環境をそのまま使用： 個人での分析向け**
といった感じで使い分けるのが良いのではと、個人的には思います。

「ようわからん！」という方へのおすすめは、まずは「1.venv+pip」の仮想環境不要の方法で開発環境を作り、チームで仮想環境を共有したくなったら「2.pipenv」に移る、という方法です

<br>

**以下で各代替法の詳細な比較をします**
※「パッケージ」と「ライブラリ」で表記ゆれがありますが、同じ意味と捉えて頂いて構いません

## 何が困る？
Anacondaの機能には、大きく分けて下記2種類があります。

**①仮想環境の管理** : Pythonやライブラリのバージョンをプロジェクトに合わせ切り替える
**②パッケージインストール** : ライブラリをインストールする (例：conda install pandas)

どちらもPythonを使用する上で必須ともいえる機能 (特に後者)なので、代替手段を準備する必要があります。

また、上記以外にもAnacondaは**③行列やFFTの計算速度向上**という機能を持っています。
AIや数値計算にPythonを利用されている方には重要機能だと思うので、こちらについても詳説します。

## 対処のための前提条件
まず最初に、この記事を開いた時点で「従業員数200名以上の企業」で「Anacondaを業務使用」している方が多いかと思います。

明確な根拠があるわけではありませんが ([参考](https://student-notepc.com/win-mac.html))、規模の大きな企業ではWindowsの普及率が極めて高いと思われ、またAnaconda自体もWindowsでのシェアが高いツールなので、

**Windows環境**
を前提として記事を書かせて頂きます。

また、エディタとして**Visual Studio Code** (VSCode)を使用している前提で記事を書きますが、
Pycharm等他のエディタでもほぼ同様の手順で対処できるかと思います。

## どう対処する？
[こちらの記事でまとめられているように](https://qiita.com/KRiver1/items/c1788e616b77a9bad4dd)、Pythonの主要パッケージ管理ツールを一覧表記します

※なお、前述「**①仮想環境の管理**」は、**「インタプリタ切替」「パッケージ切替」の2つに分けております**
・インタプリタ切替：Python自体のバージョン切替（例：Python3.8.6）
・パッケージ切替：ライブラリのバージョン切替（例：Pandas1.1.4）

||①インタプリタ切替|①パッケージ切替|②パッケージインストール|③行列計算高速化|
|---|---|---|---|---|
|pyenv|○||||
|virtualenv|○|○|||
|pip|||○||
|venv||○|||
|virtualenvwrapper||○|||
|pipenv||○|◎||
|Anaconda|○|○|△|〇|

選択肢が多く見えますが、見ての通りAnacondaの機能をカバーするためには複数ツールを組み合わせる必要があり、
私が調べた限り ([こちらが非常に参考になりました](https://www.zopfco.de/entry/2017/04/03/233811))、Windows環境において
**Anaconda無償版の代替には、大きく下記3つの選択肢がありそうです**

**1. venv + pip**
**2. pipenv**
**3. Anaconda有償版**

※pyenvが含まれていない事が気になる方もいるかもしれませんが、
[こちらの記事](https://qiita.com/shibukawa/items/0daab479a2fd2cb8a0e7)のフローチャートを見る限り、pyenvが必要となるのは
「Linux or Mac環境」かつ「インタプリタ切替が必要となる」
場合なので、Windows環境を前提とした本記事では、pyenvに関しての言及は省略します

※Dockerとpipを併用する方法もありますが、Linux、Docker、VSCodeからのアクセス等学習コストが他の方法と比べ非常に大きいため、本記事のコンセプトから外れると判断して割愛します (希望が多ければ記事にしようと思います)

## 各手法の比較
トップに記載したように、上記3種類の代替手段のメリットデメリットをまとめました

||venv+pip|pipenv|Anaconda有償版|
|---|---|---|---|
|A.導入・学習の手軽さ|〇 (インストール不要)|× (pipfileの学習が必要)|× (一見手軽だが実は複雑)|
|B.ライブラリ依存関係の解決|×|〇|〇|
|C.行列計算速度|×|×|〇|
|D.コスト|〇 (無料)|〇 (無料)|× ($14.95/月)|
詳細を下記します

### A. 導入・学習の手軽さ
導入や学習コストの低さに関して
#### venv+pip
全てPythonにデフォルトで組み込まれた機能のため、新たなインストールが不要です
[こちらに記載されているように](https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e)、Python3.3以降はvirtualenvもvenvに取り込まれたようなので、pipと組み合わせてひととおりの機能を実現できるようになりました。

基本的な動作はシェルコマンドのみで実現できるため、学習コストが低いです。
使用するたびに仮想環境切替のコマンドを打つ必要があるのが手間ですが、後述のようにプロジェクトフォルダ直下に環境を作れば、VSCodeが勝手に読み込んでくれます。

#### pipenv
インストールが必要ですが、`pip install pipenv`の1コマンドで完了するので手間ではありません。
仮想環境の作成も簡単なコマンドで実現できますが、
pipenvコマンドの種類がやや多く、ある程度の学習コストが必要なことや、
パッケージ本体がどこにあるかが分かりにくい ([こちらに記載されているように](https://qiita.com/musatarosu/items/394603957ae41552718e#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AF%E3%81%A9%E3%81%93%E3%81%B8)、`C:\Users\[ユーザ名]\.virtualenvs\`にあるようです。また、環境変数に"PIPENV_VENV_IN_PROJECT=1"と入れると、プロジェクト直下に作成されるそうです　by @nbangさん)ことから、
venv+pipほどのシンプルさはないように感じました

#### Anaconda
Anacondaはよく使うパッケージを一括でインストールしてくれ、Navigator等のGUI管理ツールも充実しており一見使いやすく見えます。

ただし、[ライブラリの依存関係管理がブラックボックス気味であったり](https://poyo.hatenablog.jp/entry/2019/08/16/000000#%E3%81%A9%E3%81%86%E3%81%97%E3%81%A6%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E7%AE%A1%E7%90%86%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B)、[他のツールのパスを隠蔽してしまったり](https://watlab-blog.com/2019/04/06/python-install/#i)、pipと併用するとパッケージが壊れることがある、という問題があるようです。

私もついやってしまいがちですが、Qiitaの記事を見ながらとっさに`pip install`と打ってしまってpipとの併用状態となり、パッケージが壊れて1からインストールし直し、という事もありました。

上記のような現象を完全にコントロールするためには相当な知識が必要とされるため、いざトラブルが起きた時の対処の難しさを考えると、「学習コストが低い」とは言い難いのではと思います。

### B.依存関係の管理
ライブラリ間の依存関係を管理する機能についてです。
#### venv+pip
後述するように、インストールしたライブラリの一覧をrequirements.txtというファイルでエクスポートすることができます。
ただ、requirements.txtにはライブラリのバージョンしか記載されておらず、依存関係の記載が不完全ですし、requirements.txtの出力自体も手動で行う必要があります。
というわけで、依存関係の管理機能に関しては、下記のpipenvやAnacondaの方が充実していると言えそうです。

####pipenv
使用法は後述しますが、pipenvの仮想環境では[こちらに記載されているように](https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html)、「Pipfile」と「Pipfile.lock」という2つのファイルで依存関係を管理できます。
PipfileやPipfile.lockはライブラリインストール時に自動で更新されるため、requirement.txtのように出力し忘れて更新が反映されない心配もありません。

#### Anaconda
[こちらに記載されているように](https://qiita.com/ynakayama/items/29efebeb38604d10acef#conda-%E3%81%A8-pip-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)、Anaconda社のリポジトリ管理の一環としてライブラリの依存関係もチェックしているため (ややブラックボックスではありますが)、ある程度の依存関係管理が保証されていると思われます。

また、`conda info [パッケージ名]`で依存関係を表示させることもできます。

### C.行列計算速度
[こちらに実際の比較結果が記載されている通り](https://tech.morikatron.ai/entry/2020/03/27/100000#%E5%AE%9F%E9%A8%931-Intel-CPU-%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9F-PC-%E3%81%AE%E5%A0%B4%E5%90%88)、Anacondaは公式のPythonと比べて行列の計算速度が高くなる機能が実装されています。

具体的には
・NumPy
・NumExpr
・SciPy
・Scikit-Learn
・Tensorflow

などのライブラリ (どれも速度が求められるツールですね‥)において、Anacondaバージョンのみ
[Intel MKL](https://www.xlsoft.com/jp/products/intel/perflib/mkl/index.html)
と呼ばれる数値計算を高速化するためのライブラリが採用されているそうです。
(ちなみに、PytorchはAnacondaのみならずpipでも、Intel MKL採用バージョンがインストールされるようです)

**これらの数値計算・機械学習系ライブラリで速度を求める場合、有償版Anacondaの採用を検討しても良いかもしれません**

実際どれくらい早くなるか気になるところではあるので、よく使う機械学習処理で比較して別途記事を作成しようと思います。

【追記】
[手間は掛かりますが、どうやらpipでもIntel MKLバージョンのNumpy/SciPyが使えるようです](https://qiita.com/osanshouo/items/7a729aabf65a70ad6762)。調べた限りはLinuxの記事ばかりでWindowsでも実現できるかは分かりませんが、上記速度比較記事を書く際に試してみようと思います。

### D.コスト
これは見ての通り、Anaconda有償版が$14.95掛かるのに対し、venv + pipやpipenvは無償で利用できます。
<br>
**ここまで3種類の代替手段を比較しましたが、ここからは実際の使用法を記載します**

# 1. venv + pipの使用法
VSCodeのシェルを使って作業する前提で、使用手順を解説します。

【参考にさせて頂いた記事】
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e
https://qiita.com/po3rin/items/5c853bc172e5de330148
https://www.python.jp/install/windows/venv.html

## Anacondaのアンインストール
[こちらの「方法2」で、完全にアンインストールしてください](https://insilico-notebook.com/conda-uninstall/)

## PythonとVSCodeのインストール
[こちらを参考にPythonとVisual Studio Codeをインストールしてください](https://qiita.com/tokoroten_346/items/008a560272fe16f384f2)
PyCharm等を使用したい場合は、VSCodeのインストールは飛ばして頂いて構いません

Pythonインストール時は、下図赤枠`Add Python3.* to Path`をチェックすると、デフォルトでのPython環境に設定できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/2759d0a1-3ddf-0fa2-f644-a794579ddd3b.png)

また、VSCodeインストール時は下記2箇所をチェックするとエクスプローラの右クリックで開けて便利です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/424c90f3-79a1-2f58-0b00-057ee55203ce.png)


ここからのフローですが、仮想環境を使用するかしないかでフローが分かれます

**・仮想環境を使用し、プロジェクトによりライブラリのバージョンを分けたい方**
→[そのまま読み進めてください](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#1-1-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E6%89%8B%E9%A0%86)
([Pythonのバージョンも環境ごとに変えたい場合はこちら参照](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#1-2-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%AA%E3%82%BF%E3%82%92%E5%A4%89%E3%81%88%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88))

**・仮想環境は使用せず、デフォルト環境でパッケージインストールできれば良い方**
→[ライブラリのインストール(仮想環境不使用時)](https://qiita.com/c60evaporator/items/ba41cef4b37465c39948#13-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E4%B8%8D%E4%BD%BF%E7%94%A8%E6%99%82%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)に飛んでください
**(ようわからん！という方はこちら推奨)**

## 1-1. 仮想環境使用時の手順
下記のように
仮想環境の作成 → アクティベート → ライブラリのインストール → VSCodeの設定
の順で進めてください
### venv仮想環境の作成
下図のような感じで環境構築したいディレクトリ(プロジェクトディレクトリ)を準備しておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/2ea2a7d2-93b3-3385-18c7-2b0f68995231.png)

ディレクトリ内に新環境を作成します

```
> cd [環境構築したいディレクトリ]
> python -m venv [新しい環境名]
```

下図のように環境が生成されます（下例では環境名「newvenv」で作成）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/bcbc773c-e1b0-00ff-4c9b-b3f308897cdd.png)

中を見るとexeファイルもろもろが生成されていることが分かります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/83cc56ea-42f8-5008-f261-be5574145db9.png)
なお、環境の管理方法としては、
プロジェクトディレクトリ(≒VSCodeのようなエディタで開くディレクトリ。上例では「venv_test」ディレクトリ)直下に環境を作ることが一般的なようです。

### アクティベート
コマンドプロンプトの場合、下記のコマンドで仮想環境をアクティベートできます
(カレントフォルダの直下に環境作成した場合のコマンドなので、適宜パスは読み替えてください)

```
> .\[環境名]\Scripts\activate
```

下記のようにアクティベートした環境名がシェルの最初にカッコ表示されれば成功です

```
(newvenv) [カレントフォルダ名]>
```

`deactivate`コマンドで、仮想環境を終了(デアクティベート)できます

```
(newvenv) > deactivate
```
<br>
※ちなみにPowerShellでアクティベートコマンドを実行すると、「このシステムではスクリプトの実行が無効になっているため、‥を読み込むことができません」というようなエラーが出ることがあります。
[こちらのリンク](https://www.python.jp/install/windows/venv.html)のように、 PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因なので、最初の1回のみ

```
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
```
としてあげれば、スクリプトの実行が有効となり

```
> .\[環境名]\Scripts\activate.ps1
```
としてあげれば、アクティベートされます

### ライブラリのインストール
下記のように`pip install [ライブラリ名]`で、ライブラリをインストールできます

```
(newvenv) >pip install pandas
```

`pip list`で、インストールされているライブラリのバージョンが確認できます

```
(newvenv) >pip list
Package         Version
--------------- -------
numpy           1.19.4 
pandas          1.1.4  
pip             20.2.1 
python-dateutil 2.8.1  
pytz            2020.4 
setuptools      49.2.1 
six             1.15.0 
```

### VSCodeの設定
実行のたびにアクティベートコマンドを打つのは面倒なので、VSCodeでデバッグ実行時は勝手に仮想環境を読み込んでくれるようにしたいです。

~~[こちらのリンクを参考に仮想環境の読込先を指定してください](https://qiita.com/some-nyan/items/7f20fa5fa0b6e451a42b#vscode%E3%81%A7%E3%81%AE%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E7%AE%A1%E7%90%86%E7%94%A8%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A%E3%81%AB%E8%BF%BD%E5%8A%A0)~~

→なんと**プロジェクトフォルダ(VSCodeで開くフォルダ)直下に仮想環境を作っておけば**、仮想環境を勝手に読み込んでくれるようです！VSCodeさん気が利きすぎですね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/39697961-a7c6-d072-648f-a61d2500e624.png)
なお、上の赤枠に現在デバッグに使用されているPythonのバージョンが表示されており、クリックするとデバッグ環境を切り替えることもできます
<br>
**以上で仮想環境の使用ができるようになりました。以下は必要に応じて実行してください**

### 仮想環境のコピー
下記コマンドで、パッケージ構成をrequirements.txtに出力できます

```
(newvenv) >python -m pip freeze > requirements.txt
```

このテキストファイル内に、インストールされているパッケージ一覧が記載されています

```requirement.txt
numpy==1.19.4
pandas==1.1.4
python-dateutil==2.8.1
pytz==2020.4
six==1.15.0
```

このテキストファイルを他のプロジェクトフォルダに移し、仮想環境をアクティベートしたのち下記コマンドを打つと、該当するパッケージ全てをまとめてインストールしてくれます

```
(newvenv2) >python -m pip install -r requirements.txt
```
**チーム内でパッケージを共通化したい場合に便利ですね！**

ちなみに、仮想環境に入らずに同様のコマンドを実行すると、デフォルト環境にrequirements.txtに記載されたパッケージをまとめてインストールしてくれます。

### バージョンを指定してライブラリをインストール
```
pip install numpy==1.19.3
```

### 仮想環境の初期化
デアクティベートした状態で、下記コマンドで初期化できます

```
python -m venv --clear [環境名]
```

### 仮想環境の削除
デアクティベートした状態で、仮想環境のフォルダを丸ごと削除するだけでOKです。
エクスプローラで仮想環境のフォルダ(上の例では「newvenv」フォルダ)を削除するか、
PowerShellで環境の存在するディレクトリに移動して下記コマンドを実行します

```
Remove-Item [環境名] -Recurse -Force
```


## 1-2. 仮想環境でインタープリタを変えたい場合
インタープリタ(Pythonのバージョン)をデフォルトから変えたい場合、
複数のバージョンのPythonをWindowsにインストールすることで対応できます。

**Windowsでpyenvが不要と言われる所以はここにあります！**
(逆に複数の3.0系PythonがインストールできないLinuxでは、pyenvが必要となることもあります)

手順を下記します

### デフォルト以外バージョンのPythonインストール
[Python公式](https://www.python.org/downloads/)から好きなバージョンの`Windows x86-64 executable installer`をダウンロードし、実行してインストールします。
デフォルト以外のPythonインストール時は、**下図赤枠`Add Python3.* to Path`をチェックしないでください**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/2759d0a1-3ddf-0fa2-f644-a794579ddd3b.png)

下図のように、複数のバージョンのPythonがインストールされていれば成功です
(通常は`C:\Users\[ユーザ名]\AppData\Local\Programs\Python`にインストールされるようです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/c12a0dda-eae9-c84b-a45a-2cb35d2b2b2f.png)

### インタプリタがデフォルトと異なる仮想環境の構築
以降は、デフォルトのPythonバージョンが3.8.6、仮想環境のPythonバージョンを3.9.0である前提で解説します。

下記コマンドで、Pythonバージョンを変えた仮想環境を作成できます
(デフォルトインタプリタでは`python -m`としていた部分を、`py -[仮想環境に適用したいPythonのバージョン] -m`に変えます)

```
> cd [環境構築したいディレクトリ]
> py -3.9 -m venv [新しい環境名]
```

デフォルト状態(仮想環境アクティベート前)のPythonバージョン確認

```
> python -V
Python 3.8.6
```

作成した仮想環境のPythonバージョン確認(環境名は「py39env」とした)

```
> .\py39env\Scripts\activate.ps1
(py39env) > python -V
Python 3.9.0
```
仮想環境においてPythonインタプリタのバージョンを変えられていることが分かります


## 1.3 仮想環境不使用時のライブラリのインストール
仮想環境不使用（デフォルトのPython環境使用）でライブラリをインストールしたい場合は、
アクティベートされていない状態（デフォルト状態）で`pip install [ライブラリ名]`と打つだけでOKです

```
> pip install pandas
```

`pip list`で、インストールされているライブラリのバージョンが確認できます

```
>pip list
Package         Version
--------------- -------
numpy           1.19.4 
pandas          1.1.4  
pip             20.2.1 
python-dateutil 2.8.1  
pytz            2020.4 
setuptools      49.2.1 
six             1.15.0 
```

# 2. pipenvの使用法
VSCodeのシェルを使って作業する前提で、使用手順を解説します。

【参考にさせて頂いた記事】
https://qiita.com/subarunari/items/dcbdad68ba1809b721b9
https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a
https://pipenv-ja.readthedocs.io/ja/translate-ja/

## Anacondaのアンインストール
[こちらの「方法2」で、完全にアンインストールしてください](https://insilico-notebook.com/conda-uninstall/)

## PythonとVSCodeのインストール
[こちらを参考にPythonとVisual Studio Codeをインストールしてください](https://qiita.com/tokoroten_346/items/008a560272fe16f384f2)
PyCharm等を使用したい場合は、VSCodeのインストールは飛ばして頂いて構いません

Pythonインストール時は、下図赤枠`Add Python3.* to Path`をチェックすると、デフォルトでのPython環境に設定できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/2759d0a1-3ddf-0fa2-f644-a794579ddd3b.png)

また、VSCodeインストール時は下記2箇所をチェックするとエクスプローラの右クリックで開けて便利です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/424c90f3-79a1-2f58-0b00-057ee55203ce.png)

## pipenvのインストール
下記コマンドで、pipenvをインストールします

```
> pip install pipenv
```

## 仮想環境の構築と使用法
下記のように
仮想環境の作成 → ライブラリのインストール → VSCodeの設定
の順で進めてください

### pipenv仮想環境の作成
下図のような感じで環境構築したいディレクトリ(プロジェクトディレクトリ)を準備しておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/70a30ed2-3804-fe42-109b-05ede452136d.png)

上記の「プロジェクトディレクトリ」は、VSCodeのようなエディタで開くディレクトリ(上例では「pipenv_test」)であり、1. venv+pipのときと同様、この直下に仮想環境を作ることが一般的なようです。

ディレクトリ内に新環境を作成します

```
> cd [環境構築したいディレクトリ]
> pipenv install
```

※注意したいのが、OS内に複数のPythonをインストールしている場合です
ここで使用されるPythonバージョンはパスを通している(インストール時にAdd Python * to Pathをチェックした)デフォルトのバージョンではなく、インストールされている中で最新のバージョンとなります。
例えばPython3.8.6と3.9.0をインストールしており、3.8.6の方にパスを通していたとしても、pipenvではPython3.9.0が仮想環境に採用されてしまいます。

**バージョンを指定して新環境を構築したい場合**、`pipenv --python [Pythonバージョン]`のように打ちます

```
> pipenv --python 3.8
```
指定したバージョンがOS内に存在する場合はそのPythonが使用され、存在しない場合には新たにそのバージョンのPythonがインストールされます

環境作成が成功すれば、PipfileおよびPipfile.lockというファイルが生成するはずです
（Pipfile.lockは生成しない事もありますが、その場合も後でライブラリインストール時に生成するので気にしないでください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/1f2848e0-071a-3575-8808-ff536f5a4d3c.png)

Pipfileの中身は下記のようになっています

```Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.8"
```

### ライブラリのインストール

`pipenv install [ライブラリ名]`コマンドで、ライブラリをインストールできます。

```
>pipenv install pandas
```

インストール後のPipfileを見ると、packagesにpandasが加わっている事が分かります。
このようにPipfileには、インストールしたパッケージの履歴が記録されます

```Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pandas = "*"

[dev-packages]

[requires]
python_version = "3.8"
```

Pipfile.lockを見ると、下記のように何やら色々と書かれていますが、ここにライブラリ間の依存関係等を記録しているようです。

```json:Pipfile.lock(一部抜粋)
        },
        "pandas": {
            "hashes": [
                "sha256:09e0503758ad61afe81c9069505f8cb8c1e36ea8cc1e6826a95823ef5b327daf",
                "sha256:0a11a6290ef3667575cbd4785a1b62d658c25a2fd70a5adedba32e156a8f1773",
                "sha256:0d9a38a59242a2f6298fff45d09768b78b6eb0c52af5919ea9e45965d7ba56d9",
                "sha256:112c5ba0f9ea0f60b2cc38c25f87ca1d5ca10f71efbee8e0f1bee9cf584ed5d5",
                "sha256:185cf8c8f38b169dbf7001e1a88c511f653fbb9dfa3e048f5e19c38049e991dc",
                "sha256:3aa8e10768c730cc1b610aca688f588831fa70b65a26cb549fbb9f35049a05e0",
                "sha256:41746d520f2b50409dffdba29a15c42caa7babae15616bcf80800d8cfcae3d3e",
                "sha256:43cea38cbcadb900829858884f49745eb1f42f92609d368cabcc674b03e90efc",
                "sha256:5378f58172bd63d8c16dd5d008d7dcdd55bf803fcdbe7da2dcb65dbbf322f05b",
                "sha256:54404abb1cd3f89d01f1fb5350607815326790efb4789be60508f458cdd5ccbf",
                "sha256:5dac3aeaac5feb1016e94bde851eb2012d1733a222b8afa788202b836c97dad5",
                "sha256:5fdb2a61e477ce58d3f1fdf2470ee142d9f0dde4969032edaf0b8f1a9dafeaa2",
                "sha256:6613c7815ee0b20222178ad32ec144061cb07e6a746970c9160af1ebe3ad43b4",
                "sha256:6d2b5b58e7df46b2c010ec78d7fb9ab20abf1d306d0614d3432e7478993fbdb0",
                "sha256:8a5d7e57b9df2c0a9a202840b2881bb1f7a648eba12dd2d919ac07a33a36a97f",
                "sha256:8b4c2055ebd6e497e5ecc06efa5b8aa76f59d15233356eb10dad22a03b757805",
                "sha256:a15653480e5b92ee376f8458197a58cca89a6e95d12cccb4c2d933df5cecc63f",
                "sha256:a7d2547b601ecc9a53fd41561de49a43d2231728ad65c7713d6b616cd02ddbed",
                "sha256:a979d0404b135c63954dea79e6246c45dd45371a88631cdbb4877d844e6de3b6",
                "sha256:b1f8111635700de7ac350b639e7e452b06fc541a328cf6193cf8fc638804bab8",
                "sha256:c5a3597880a7a29a31ebd39b73b2c824316ae63a05c3c8a5ce2aea3fc68afe35",
                "sha256:c681e8fcc47a767bf868341d8f0d76923733cbdcabd6ec3a3560695c69f14a1e",
                "sha256:cf135a08f306ebbcfea6da8bf775217613917be23e5074c69215b91e180caab4",
                "sha256:e2b8557fe6d0a18db4d61c028c6af61bfed44ef90e419ed6fadbdc079eba141e"
            ],
            "index": "pypi",
            "version": "==1.1.4"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
            "version": "==2.8.1"
        },
```
venv+pipでは手動でrequirements.txtを作る必要があったのが、pipenvではPipfileとPipfile.lockに自動でライブラリインストールの履歴を残せるので、バックアップやコピー時に便利です。
Gitで管理すればチームでの共有も容易になりますね！

## VSCodeの設定
VSCodeでのデバッグ実行時に勝手に仮想環境を読み込んでくれるようにします。
最初の1回のみ下図の手順で仮想環境を指定してあげれば、次回以降は勝手に設定が読み込まれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/ae5fcd6d-c4bd-05d7-0c12-01cded7e8cfd.png)
<br>
**以上で仮想環境の使用ができるようになりました。以下は必要に応じて実行してください**

## pipenv各種操作
pipenvでよく使う操作を記載します
多くの操作は、下記コマンドで仮想環境内に入って実行します

```
> pipenv shell
```

### 仮想環境でのスクリプト実行
仮想環境に入ったのち、`python [スクリプト名].py`で実行できます

```
> pipenv shell
> python script1.py
```

### 環境のコピー
ここがvenv+pipと比べた際のpipenv最大のメリットですが、
環境のコピーを容易に実施することができます。

・ただ同じパッケージをインストールしたい場合は、Pipfileを同フォルダに置いて
`pipenv install`

```
>pipenv install
```

・パッケージのバージョンや履歴も含め詳細に再現したい場合は、Pipfile.lockを同フォルダに置いて`pipenv sync`

```
>pipenv sync
```

また、[少し進んだ使い方として、開発環境のみのパッケージを管理することもできるようです](
https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a#%E9%96%8B%E7%99%BA%E7%94%A8%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

### requirement.txtからのインストール
1.venv+pipで使用していたrequirement.txtからまとめてパッケージインストールすることもできます

```
> pipenv shell
> pipenv install -r ./requirements.txt
```

### インストールされているライブラリの確認
仮想環境内に入って`pip list`で仮想環境内にインストールされているライブラリ一覧を確認できます

```
> pipenv shell
> pip list
```

### バージョンを指定してライブラリをインストール
```
pipenv install numpy==1.19.3
```

### 仮想環境の削除
仮想環境に入らずに`pipenv --rm`で削除できます

```
pipenv --rm
```

### 仮想環境の初期化
削除して再作成すれば初期化できます

```
pipenv --rm
pipenv install
```

# 3. Anaconda有償版
会社ごとに導入フローが異なると思うので、**会社のIT部門に相談して下さい**
使用法に関しては、基本的には無償版と同じはずです ([仮想環境の構築法はこちらの記事が非常にわかりやすいです](https://qiita.com/ozaki_physics/items/985188feb92570e5b82d))

[参考：有償版の価格設定](https://www.anaconda.com/pricing)


# おわりに
・仮想環境は結構容量を食う(pandasやscikit-learnがデカい)ので、ご注意ください

・本記事とは直接関係ありませんが、2020/12現在Numpyをpipでインストールすると下記の問題が起こるので、バージョンを下げて対応してください。
https://qiita.com/bear_montblanc/items/b4b75dfd77da98076da5
(Anacondaはこの手の問題が解決した比較的Stableなバージョンをインストールしてくれるので、その意味での導入メリットもあるかもしれませんね)