仮想環境に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
解決法
解決法がきれいな順に3つ載せます。
その1
https://github.com/pypa/pipenv/issues/4334 より、
Anacondaを参照しないようにレジストリ―キーを削除する。
- 「Win + R」に「regedit」と入力。
-
コンピューター\HKEY_CURRENT_USER\Software\Python\ContinuumAnalytics\Anaconda37-64
のディレクトリを右クリックから削除
その2
https://github.com/pypa/pipenv/issues/4334 より、
pip install pipenv==2018.10.13
として古いバージョンで代替する。
その3
C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python37\Lib\site-packages\pipenv\vendor\pythonfinder\models\windows.py
を改変する。
- 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
の動作についてコードを読み込み、理解を深める
- Python のビルトインモジュールである
エラーメッセージ全文
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'