pipenv環境作成時に「ValueError: Not a valid python path」が出てハマった

仮想環境にcondaを使っていたが、これからはpipenvにしようと
Anacondaを消して移行しようとしたときにハマった。

対象のエラーメッセージ

```
ValueError: Not a valid python path: 'C:/Users/<ユーザー名>/Anaconda3/python.exe'
```

## 原因
Anacondaのレジストリ―キーを消し切れていなかったため、
`pipenv`が参照しようとして`ValueError`を返していた。


## 前提条件

- Windows 10 Home
- Python 3.7
- pipenv 2020.11.15


## 解決法
解決法がきれいな順に３つ載せます。

### その１

https://github.com/pypa/pipenv/issues/4334 より、
Anacondaを参照しないようにレジストリ―キーを削除する。

1. 「Win + R」に「regedit」と入力。
2. `コンピューター\HKEY_CURRENT_USER\Software\Python\ContinuumAnalytics\Anaconda37-64` <br>のディレクトリを右クリックから削除

### その２

https://github.com/pypa/pipenv/issues/4334 より、

```:cmd
pip install pipenv==2018.10.13
```
として古いバージョンで代替する。

### その３
`C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python37\Lib\site-packages\pipenv\vendor\pythonfinder\models\windows.py` を改変する。

```diff:windows.py(113行目)
-            versions[py_version.version_tuple[:5]] = base_dir
+            try:
+                versions[py_version.version_tuple[:5]] = base_dir
+            except ValueError as e:
+                print(e)
+                continue
```

## 対処法にたどり着くまでに試したこと
エラーメッセージで検索して解決法を探しつつ…

- Anacondaのアンインストール（conda clean -> Anacondaのディレクトリの削除）
- Python 3.7.9 の再インストール
- C:\Users<ユーザー名>.virtualenvs の削除
- pipenv の再インストール
- PCの再起動

`C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python37\Lib\site-packages\pipenv`
 の中を見て、関連ありそうなところにprint文を仕込んで処理を辿った。
→ エラーメッセージを下から辿ってエラー箇所でエラー処理をしてあげるのが最速か。


## TODO

- レジストリ―キーの理解を深める
  - Python のビルトインモジュールである`winreg`を使ってサンプルコードを書いて理解を深める
  - `pipenv\vendor\pythonfinder` の動作についてコードを読み込み、理解を深める


## エラーメッセージ全文

```
Microsoft Windows [Version 10.0.18363.1198]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\<ユーザー名>>pipenv --python 3.7
Traceback (most recent call last):
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 618, in parse_executable
    result_version = get_python_version(path)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\utils.py", line 105, in get_python_version
    c = subprocess.Popen(version_cmd, **subprocess_kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\subprocess.py", line 800, in __init__
    restore_signals, start_new_session)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\subprocess.py", line 1207, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python37\Scripts\pipenv.exe\__main__.py", line 7, in <module>
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\cli\command.py", line 205, in cli
    clear=state.clear,
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\core.py", line 580, in ensure_project
    pypi_mirror=pypi_mirror,
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\core.py", line 498, in ensure_virtualenv
    python = ensure_python(three=three, python=python)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\core.py", line 388, in ensure_python
    path_to_python = find_a_system_python(python)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\core.py", line 354, in find_a_system_python
    python_entry = find_python(finder, line)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\utils.py", line 2213, in find_python
    result = finder.find_python_version(line)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 276, in find_python_version
    if os.name == "nt" and self.windows_finder is not None:
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 129, in windows_finder
    self._windows_finder = WindowsFinder()
  File "<attrs generated init pipenv.vendor.pythonfinder.models.windows.WindowsFinder>", line 13, in __init__
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\windows.py", line 113, in get_versions
    versions[py_version.version_tuple[:5]] = base_dir
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 365, in __getattribute__
    result = super(PythonVersion, self).__getattribute__(key)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 430, in version_tuple
    self.patch,
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 375, in __getattribute__
    instance_dict = self.parse_executable(executable)
  File "c:\users\<ユーザー名>\appdata\local\programs\python\python37\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 620, in parse_executable
    raise ValueError("Not a valid python path: %r" % path)
ValueError: Not a valid python path: 'C:/Users/<ユーザー名>/Anaconda3/python.exe'
```