Windowsでpipがインストールできなくて困った問題
Windowsでpython -m ensurepip
を実行するとsetuptools実行時にTypeErrorが出て困ってた問題が解決したのでメモ。バージョンはpython3.4.3。
File "C:\Python34\lib\mimetypes.py", line 348, in init db.read_windows_registry() File "C:\Python34\lib\mimetypes.py", line 255, in read_windows_registry with _winreg.OpenKey(hkcr, subkeyname) as subkey: TypeError: OpenKey() argument 2 must be str without null characters or None, not str
特に致命的な問題ではなかったのでそのまま放置していたが、pycharmでDebugを実行しようとした場合に出てきて困ったので解決に踏み出した。
mimetypes.pyでレジストリを読んでいるみたいだが、その途中で読み取れない問題が出ている模様。おそらくレジストリのキーの一部に問題があって止まっているっぽい
解決法
レジストリの一部にnullなキーがあるのが問題なので、そのキーを削除すれば直る。今回の場合はHKEY_CLASSES_ROOTに問題があるようだ(_winreg.OpenKey(hkcr, subkeyname)でエラーが出ているため)。
RegDelNullというツールをMicrosoftが出しているらしい。
レジストリキーを走査してnullなキーを削除してくれる。
C:\Downloads\Regdelnull> .\RegDelNull.exe hkcr -s
スキャンして見つかれば消していいかどうか尋ねてくるので出なくなるまで消す。私は一応regeditで確認して消した。
上記コマンドはHKEY_CLASSES_ROOTを調べる(hkcr)ので、これで直らなければhkcu, hklm, hku, hkcc
も調査する。私の場合はhklmにも見つかったので消しておいた。
とりあえずこれで直ったのでよかった。