WSL2でpipが動かなかった時の対処法


問題

  1. WSL2でpipをインストールしようと、python3 get-pip.pyを走らせたが、反応がない
  2. 代わりにsudo apt install python3-pipで無事インストールするも、pip3 install xxxも同じく反応がない
  3. pip3 install xxx --verboseなどをやっても、同じく何のアウトプットもない

解決方法

Windows ファイアウォールを一時的に無効化してみたら、通常通り動いたのでどうやらWSL2上でのPython3がブロックされているみたい。とりあえず、\\wsl$\Ubuntu\usr\binからPython3.8を見つけ、Windows ファイアウォールで許可するも結果は変わらず。

結局、WSL2のDNS設定を変えなければいけないことが分かった。

手順

1. /etc/resolv.confの自動生成を無効化する

/etc/wsl.confをsudoで開き(ない場合は作成)、以下に書き換える。

[network]
generateResolvConf = false

2. WSL2を再起動する

Powershellを開いてwsl --shutdown

3. /etc/resolv.confを書き換える

まずsudo rm /etc/resolv.confで今あるソフトリンクを消す。

新しく/etc/resolv.confを作成し、

nameserver x.x.x.x

に書き換える。x.x.x.xの部分は自分のWindowsのDNSサーバに置き換える。

探し方はPowershellでipconfig /allと打ち、

DNS Servers . . . . . . . . . . . : xxx.xxx.xx.x

の様な行を見つける。

4. もう一度WSL2を再起動する

2.と同じ手順。

5. 解決!

参考

https://github.com/microsoft/WSL/issues/4020
https://superuser.com/questions/1533291/how-do-i-change-the-dns-settings-for-wsl2