はじめに
新しいパソコン(Windows11)で、WSLでonline-judge-tools(ojコマンド)を使えるようセッティングしようとしたら、はまりました。解決策をメモします。環境は以下のとおりです。
- Windows 11
- WSL上のUbuntu 24.04
- Ubuntu上のPython 3.12
- online-judge-tools 11.5.1
はまった内容3点
- インストールできない
- ojが動かない
- AtCoderにログインできない
それぞれ解決策を書いていきます。
はまりポイント1:インストールできない
現象
pip3 install online-judge-tools
を実行しても以下のとおりエラーになる。
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
(後略)
原因
WSLをインストールした際のデフォルトのOSは、2024年5月ころからUbuntu 24.04になったようです。Ubuntu 24.04ではPythonのバージョンが3.12です。Python 3.12以降では、システムPythonでは直接pip installを使えないようになっている、らしいです。
解決方法
pip3の代わりにpipxを使いましょう。
①pipxのインストール
以下を実行します。
sudo apt update
sudo apt install pipx
pipx ensurepath
その後、一度ターミナルを閉じるか、source ~/.bashrc を実行して PATH を更新します。
②pipxを使ってojをインストール・・・?
この後普通に進めると"pipx install online-judge-tools"としてしまうところですが、それはNGです。次のはまりが発生します。
はまりポイント2:ojが動かない
現象
ojを実行すると以下のようにエラーが出る。
$ oj --version
Traceback (most recent call last):
(中略)
ModuleNotFoundError: No module named 'distutils'
原因
Python 3.12にはdistutils モジュールが入っていないためです。Python 3.11以前は非推奨でありながら入っていましたが、Python 3.12以降削除されたらしいです。
解決方法
ojだけPython 3.11で動くようにします。
①Python 3.11をインストール
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv
②pipx で oj をインストール
pipx install --python python3.11 online-judge-tools
※ 誤って既に3.11を指定せずインストールしてしまっている場合は、以下で上書きインストールできる
pipx reinstall online-judge-tools --python python3.11
はまりポイント3:AtCoderにログインできない
現象
以下を実行し、ユーザー名とパスワードを入力してもログインができない。ブラウザからならログインできる。
oj login https://atcoder.jp/
原因
AtCoderがセキュリティ強化をしているため、だと思います。
解決方法
以下の素晴らしい記事に書いてあります。
https://kaiyou9.com/acc_and_oj_login_failed/