Windowsでのpipのアップデート(10.0.1⇒18.0)

PyCharmを入れてみたときにpip upgradeできなかったので備忘録

■現象
 ・PyCharmのterminalからpip upgradeを実行すると以下のエラー。
  pip listで見ると10.0.1のままだがpip upgradeすると最新バージョンとなっている。
 ・参考先と同じく強制再インストールすれば入る。
  

エラーログ + デバッグログ

(venv) D:\prog\work\deepleaning>pip list
Package    Version
---------- -------
pip        10.0.1
setuptools 39.1.0
You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

(venv) D:\prog\work\deepleaning>python -m pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703
d2ddaf940/pip-18.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1

  Rolling back uninstall of pip
Exception:
Traceback (most recent call last):
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\basecommand.py", line
 228, in main
    status = self.run(options, args)
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\commands\install.py",
 line 335, in run
    use_user_site=options.use_user_site,
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\req\__init__.py", lin
e 49, in install_given_reqs
    **kwargs
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\req\req_install.py",
line 748, in install
    use_user_site=use_user_site, pycompile=pycompile,
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\req\req_install.py",
line 961, in move_wheel_files
    warn_script_location=warn_script_location,
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_internal\wheel.py", line 431,
in move_wheel_files
    generated.extend(maker.make(spec))
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_vendor\distlib\scripts.py", li
ne 407, in make
    self._make_script(entry, filenames, options=options)
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_vendor\distlib\scripts.py", li
ne 307, in _make_script
    self._write_script(scriptnames, shebang, script, filenames, ext)
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_vendor\distlib\scripts.py", li
ne 243, in _write_script
    launcher = self._get_launcher('t')
  File "D:\prog\work\deepleaning\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip\_vendor\distlib\scripts.py", li
ne 386, in _get_launcher
    result = finder(distlib_package).find(name).bytes
AttributeError: 'NoneType' object has no attribute 'bytes'

■原因
 ・t64.exeを探しに行くが見つからないためNoneが戻され、Noneのbytesメンバーに
  アクセスしようとしている。
 ・PyCharmで作成したVirtualEnvを見ると、

初回は、D:\prog\work\base\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\pip  
失敗後は、D:\prog\work\base\venv\Lib\site-packages\pip  

  とフォルダ構成が違うため、ただしフォルダパスを検索できていないようだ。
  違う原因はpip-10.0.1をeasy-installで展開したしただけになっているから?
  ※未確認、フォルダ名からの予想
 ・2回目の強制再インストールは、失敗後のpipから実行しているため
  正しく動作しているようだ。

■対策
 ・一応今のところ下記のどちらかで問題なく動いている。
  ①参考先と同じく強制再インストールすれば入る。
  ②VirtualEnvでProject作成後に、
   [PJFolder]\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\pipフォルダを
   一つ上の階層([PJFolder]\venv\Lib\site-packages\pipフォルダ)に移動させる。