ちょっとよくわからないpipenvの使い方のまとめ（途中経過）

 検証環境
Windows 10 1909
python 3.7.4
pip 20.1.1
pipenv 2020.6.2

Macでpyenvを使い慣れていたので<a href="https://github.com/pyenv-win/pyenv-win/issues/25">pyenv-win</a>を導入しようかとも思いましたが、まだanacondaはインストールできないようですし、後からpipenvとpyenv-winを<a href="https://qiita.com/foewhoew32f320/items/2889d0e0bbb7b68309a5">共存</a>させておられる方もいらっしゃるようなので、まずは自分の機械でどう使うのか勉強してみました。

粗い使い方の流れは、pipfileという「仮想環境入場受付窓口」を通して出入りするという感じでしょうか。
Macのpyenvでは、teminal自体がワンストップ総合窓口となって「自分が使っているpyenvはどれだけありますか？pyenv versions 」と問い合わせると、作ったpyenvのリストを表示してくれて、「ではこのバージョンを使いたいです。pyenv global バージョン　」と指定すると、その環境に移動してくれる。
似たような使い方と思い、また名前がちょっと似ている（pyenvとpipenv。未だに時々手がpipenvをpyenvとうち間違える。）ので、分かりづらかったのですが、とりあえず現在までのpipenvの使い方のまとめを書いてみました。


### 1. pipfileとpipfile.lockを作りたい場所を決める。
注意：pipenvインストール直後の設定のままでこれらの作業をする。つまりデフォルトでは、pipenvはユーザーホーム＝自分のユーザー名下のディレクトリにインストールしたパッケージができる。

システム環境変数のPATHに、
変数   PIPENV_VENV_IN_PROJECT
値     TRUE
とすると、プロジェクトの（上で書いたpipfileとpipfile.lockを作りたい場所）ディレクトリにインストールしたパッケージができる。
コマンドプロンプトから次の通りにしても同じ。
export PIPENV_VENV_IN_PROJECT=true
例えば、\Desktop\000_Python\pipenvtest01に作るとする。
C:\Users\(username)>cd Desktop\000_Python\pipenvtest01

###２．pip install pipenvでpipenvtest01に作るコマンドを打つ。
```
C:\Users\(username)\Desktop\000_Python\pipenvtest01>pip install pipenv
Requirement already satisfied: pipenv in c:\python37\lib\site-packages (2020.6.2)
Requirement already satisfied: pip>=18.0 in c:\python37\lib\site-packages (from pipenv) (20.1.1)
Requirement already satisfied: virtualenv in c:\python37\lib\site-packages (from pipenv) (20.0.21)
Requirement already satisfied: virtualenv-clone>=0.2.5 in c:\python37\lib\site-packages (from pipenv) (0.5.4)
Requirement already satisfied: certifi in c:\python37\lib\site-packages (from pipenv) (2020.4.5.1)
Requirement already satisfied: setuptools>=36.2.1 in c:\python37\lib\site-packages (from pipenv) (40.8.0)
Requirement already satisfied: filelock<4,>=3.0.0 in c:\python37\lib\site-packages (from virtualenv->pipenv) (3.0.12)
Requirement already satisfied: appdirs<2,>=1.4.3 in c:\python37\lib\site-packages (from virtualenv->pipenv) (1.4.4)
Requirement already satisfied: importlib-metadata<2,>=0.12; python_version < "3.8" in c:\python37\lib\site-packages (from virtualenv->pipenv) (1.6.0)
Requirement already satisfied: distlib<1,>=0.3.0 in c:\python37\lib\site-packages (from virtualenv->pipenv) (0.3.0)
Requirement already satisfied: six<2,>=1.9.0 in c:\python37\lib\site-packages (from virtualenv->pipenv) (1.15.0)
Requirement already satisfied: zipp>=0.5 in c:\python37\lib\site-packages (from importlib-metadata<2,>=0.12; python_version < "3.8"->virtualenv->pipenv) (3.1.0)
```

###３．試しにrequestsをインストールしてみる。インストールするとpipenvfile.lockが作られる。
```
C:\Users\(username)\Desktop\000_Python\pipenvtest01>pipenv install requests
Creating a virtualenv for this project…
Pipfile: C:\Users\(username)\Desktop\000_Python\pipenvtest01\Pipfile
Using C:/Python37/python.exe (3.7.4) to create virtualenv…
[=   ] Creating virtual environment...created virtual environment CPython3.7.4.final.0-64 in 1060ms

  creator CPython3Windows(dest=C:\Users\(username)\.virtualenvs\pipenvtest01-mju8sAbk, clear=False, global=False)

  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\(username)\AppData\Local\pypa\virtualenv\seed-app-data\v1.0.1)

  activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

Successfully created virtual environment!
Virtualenv location: C:\Users\(username)\.virtualenvs\pipenvtest01-mju8sAbk
Creating a Pipfile for this project…
Installing requests…
Adding requests to Pipfile's [packages]…
Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
           Building requirements...
Resolving dependencies...
Success!
Updated Pipfile.lock (444a6d)!
Installing dependencies from Pipfile.lock (444a6d)…
  ================================ 0/0 - 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
```
###４．pyenvの仮想環境のディレクトリはどこに作られる？
C:\Users\(username)\.virtualenvs\pipenvtest01-mju8sAbk
      pipenvtest01-mju8sAbkと、pipenvtest01＝作ったディレクトリの名前ハイフン８桁の任意の数字英文字
      （例：-zX5Vv2Qi、-mju8sAbk、-CdLuVV_C　など）
###５．pipenvを使う
pipenvを使う、別の言い方をすれば、pipenvシェルを有効化するもしくはpipenv環境を実行するコマンドはpipenv shellを打つ。
この実行は、コマンドプロンプトがあるディレクトリにあるpipfileを読み込んで実行する。
つまりpipenvtest01に作った場合は、そこにディレクトリ移動して（＝つまりそこにpipfileがある）pipenv shellを打つと
pipenvtest01-mju8sAbkの仮想環境が有効化される。
別の言い方をすれば、他のディレクトリに仮想環境を別途作った場合は、そのディレクトリに行ってからpipenv shellを打つと
別の仮想環境が有効化される。

```
C:\Users\(username)\Desktop\000_Python\pipenvtest01>pipenv shell
Launching subshell in virtual environment…
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.
```
###６．ライブラリを見てみる。
pip list      インストール済みのライブラリの確認
pip freeze    現在インストールされているライブラリとそのバージョンが出力される
どちらもインストール済みライブラリ名前とバージョンが表示される。
表示の違いはlistの方は、ライブラリ名とバージョンの数字が表形式である一方、
freezeはライブラリ名とバージョンの数字が==で結ばれている。
listの例

```
Package               Version
--------------------- ----------
numpy                 1.18.4
```

freezeの例

```
numpy==1.18.4
```
どちらもpip list > (filename).txt pip freeze > (filename).txtでテキストファイルに書き出すことができる。
pip freeze > requirements.txtで、umpy==1.18.4などの形式で記録を残しておくと、
後日pip install -r requirements.txtでバージョンの復元ができる。

###７．実際に作った場合仮想環境がどういうふうに実行ファイルを参照しているのかディレクトリを見てみよう。
pipenv shellで仮想環境を実行させてpython起動する。そして

```
>>> import sys
>>> print(sys.executable)
```

で、使っているpythonの実行ファイルのパスが表示される。
デフォルトのままなので、ユーザー名下の.virtualenvsディレクトリにそれがある。

###８．仮想環境から抜けるには、まず通所通りexit()やquit()もしくはCtrl-Zを使ってpythonを終了する。
そして仮想環境から抜けるにはexit、もしくはexit()を使う。quit、quit()、Ctrl-Zは使えない。

```
(pipenvtest01-mju8sAbk) C:\Users\(username)\Desktop\000_Python\pipenvtest01>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.executable)
C:\Users\(username)\.virtualenvs\pipenvtest01-mju8sAbk\Scripts\python.exe
>>> exit()
(pipenvtest01-mju8sAbk) C:\Users\(username)\Desktop\000_Python\pipenvtest01>exit
C:\Users\(username)\Desktop\000_Python\pipenvtest01>
```

###9. pipenv --venvは、仮想環境のパスが表示される。
デフォルト中の状態では、pipfileがユーザー名前下にあるので、Cドライブにコマンドプロンプトがいる場合は、
どこにいても上記のpipfileが参照する.virtualenvsの仮想環境を表示する。

しかし、新たに別の場所につくったpipfileのディレクトリに移動してから、pipenv --venvを打つと、
そのpipfileが参照する.virtualenvsの仮想環境を表示する。