LoginSignup
11
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-29

仮想環境に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を参照しないようにレジストリ―キーを削除する。

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

その2

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

cmd
pip install pipenv==2018.10.13

として古いバージョンで代替する。

その3

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

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'
11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4