🐈

Atcoder 環境構築 Python編

に公開

はじめに

本記事は(2025/04/18)時点のものです。

本記事は、WSL2 + atcoder-cliとonline-judge-toolsを用いたpython用の環境構築を備忘録としてまとめた記事です。C++は一部置き換えることで同様に環境構築することができます。
日本語の拙さに定評があるため暖かく見守ってください

WSL2 + Ubuntu 24.04.1 LTSで検証しています。WSL2は必須ではないですが、WSL2を使った方が分かりやすく、windowsの環境と競合しないため、オススメします。

online-judge-toolsは以下の機能を有するツールです。

  • サンプルケースを取得
  • システムケースを取得
  • ログイン
  • コードを提出
  • テストを実行
  • リアクティブ問題のテストを実行
  • テストケース生成器からテストケースの入力を生成
  • テストケースの入力と愚直解からテストケースの出力を生成

atcoder-cliは上記のojと組み合わせて、

  • テンプレートの自動展開
  • サンプルケースの自動ダウンロード
  • その他AtCoderに特化した機能

を持ちます。

それではれっつごー!


必要なもの

この下記4つをまずインストールします!

  • WSL2
  • Node.js
  • python
  • python3 venv
WSL2 + Ubuntuの導入

WSL2とは?

WSL2とはWindows Subsystem for Linux 2の略。
Windows上でLinuxを動かすための機能です!

windowsのスタートメニューの検査にwindowsの機能と入力してwindowsの機能の有効化または無効化を開きます。
下の画像のチェックボックスを有効にしてください。
windowsの機能の有効化または無効化

変更したらPCを再起動します。

次に、Windows PowerShellを起動して以下のコマンドを実行する。

PowerShell
wsl --install

最後に好きなLinux OSを入れて終了です!
MicroSoft Storeもしくはwslからインストールすることができます。

MicroSoft Storeの場合

MicroSoft Storeを起動して、Ubuntuで検索して好みのものをインストール。

wslの場合

現在入ってるOSの確認

PowerShell
wsl -l -v

入力可能なOSの一覧

PowerShell
wsl --list --online

OSのインストール

PowerShell
wsl --install -d Ubuntu-24.04

インストールできたらwindowsのスタートから検索する、もしくはタスクバーからターミナルのアイコンを右クリックして起動しましょう!

起動するとユーザーの作成が始まるため、ユーザー名とパスワードを設定します。

これでWSLの準備完了です!
以降はWSL2 + Ubuntu上で作業していきます

Node.jsおよびnpmのインストール

Node.jsおよびnpmのインストール

公式のページに従って、fnmと呼ばれるNode.jsのバージョン管理ツールをインストールします。そのあと好きなバージョンのNode.jsとnpmをインストールします。

curl -o- https://fnm.vercel.app/install | bash
対処法
Checking dependencies for the installation script...
Checking availability of curl... OK!
Checking availability of unzip... Missing!
Not installing fnm due to missing dependencies.

NANI?!
どうやらunzipという依存パッケージが見つからないようなので、インストールしてあげます!

sudo apt install unzip

次に、再度fnmをインストールします。


無事完了したらPATHが追加されてるので、一度ターミナルを再起動したあと、fnmでNode.jsをインストールします!

fnm install 22

Node.jsとnpmのバージョン確認

node -v
npm -v
v22.14.0
10.9.2
pythonのインストール

pythonのインストール

・WSLの場合

bash
sudo apt update
sudo apt install python3 python3-pip
python3 -V
結果
Python 3.12.3

仮想環境の作成

PythonをOSによって管理するため、pipで環境を破壊しないためのルールとしてPEP 668というものがあります。そのため、pipを使うには仮想環境を作成して分ける必要があります。なので仮想環境の準備をします!

必要なパッケージをインストール

sudo apt install python3-venv

仮想環境の作成

python3 -m venv myenv

仮想環境のアクティベート

source myenv/bin/activate
結果
(myenv) {ユーザ名}@{PC名}:~$

念のためpythonのPATHが仮想環境になっていることを確認しときましょう
(検証中になぜか変わっていなくて少し苦戦しました...)

which pip3
which python3
which pip
which python
結果
/home/{ユーザー名}/myenv/bin/pip3
/home/{ユーザー名}/myenv/bin/python3
/home/{ユーザー名}/myenv/bin/pip
/home/{ユーザー名}/myenv/bin/python

となれば成功です!

Node.jsとnpmがまだ入ってない場合は下記の手順を参考にしてください。

お疲れ様です!下準備の完了です!


atcoder-cliのインストール

atcoder-cli/わたしろぐを参考にしてインストールします。

npm install -g atcoder-cli

インストールできたか確認

acc -v
結果
2.2.0

online-judge-toolsのインストール

online-judge-toolsを参考にしてインストールします。
PEP 668の影響で--userオプションはつけずに実行します。

pip3 install online-judge-tools

setuptoolsのインストール

online-judge-toolsでは、python3.12以降で廃止されたdistutilsというモジュールを参照しています。そのため、python3.12でインストールして実行するとエラーがでます。その対策としてsetuptoolsをインストールします。

参考記事: 【inshellisense】ModuleNotFoundError: No module named 'distutils' の対処法

pip3 install setuptools

インストールできたか確認

oj --version
結果
online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.1)

accから認識されているか確認

acc check-oj
結果
online-judge-tools is available. found at:
/home/{ユーザー名}/myenv/bin/oj

acloginのインストール

前まではユーザーIDとパスワードの組み合わせによる認証でしたが、現在(2025/4/18時点)AtCoderの仕様が少し変わり、認証にCloudflare Turnstileが追加されました。
(これはJavaScriptを実行させてクライアントがユーザーらしい動きをしているかどうか判定するものっぽい)
これにより、accのログインなどのスクリプトが正常に機能しなくなっています。有志様による修正パッチスクリプトacloginをインストールします。

pip3 install aclogin

くぅ~疲れましたw
これにてインストール完結です!

セットアップ

まず各ツールのログインを行います。
先述した通り、Cloudflare Turnstileの認証でacc loginが機能していないので、acloginを用いてログインします。

acloginを参考に認証情報のクッキーをコピーします。

その後

aclogin

を実行してコピーしたクッキーを貼り付けます。
そして各ツールのログインを行います。

acc login
you logged-in already
OK
oj login https://atcoder.jp
[SUCCESS] You have already signed in.

テンプレートファイルの追加

.config\atcoder-cli-nodejs以下に構成ファイルを作成していきます。

cd $(acc config-dir)
mkdir template_py
cd template_py

カレントディレクトリであるtemplate_pyに、テンプレートとなるtemplate.json, main.pyを作成します。
ちなみに、WSL2からエクスプローラーを起動するコマンドは次の通りです。

explorer.exe .
template.json
{
    "task": {
        "program": [
            "main.py"
        ],
        "submit": "main.py"
    }
}
main.py
import bisect
import math
import sys
import copy
#import numpy as np # Pypyでは使えない
from collections import deque,defaultdict,Counter
from itertools import permutations,combinations,product,accumulate
from array import array # 連続メモリ上の配列(数値型で使用,高速)
# al=[chr(ord('a') + i) for i in range(26)]
# Al=[chr(ord('A') + i) for i in range(26)]
DEBUG = False  # デバッグ時は True、本番環境では False
def debug_print(*args, **kwargs):
    if DEBUG:
        print(*args, **kwargs)
        
#n = int(input())

ここのファイルや名前を、main.cppに置き換えればcppの構成にすることも可能です。

accの設定

先ほどのtemplate_pyディレクトリをテンプレートファイルとして登録します。

 acc config default-template template_py

次に、accを使ってあるコンテストの問題をダウンロードするときに、デフォルトで全問題をダウンロードするように変更します。

acc config default-task-choice all

早速動作するか確認してみましょう
問題を解く用のディレクトリを好きな場所に作成してください!
作成したらそのディレクトリをVScodeで開いてください。

本記事ではルート直下にpy-coderを作成します。

cd
mkdir py-coder
cd py-coder
code .

などを実行してVScodeで開きます。

VScodeで開けたら、ctl+@を押してターミナルを起動します。
次のコマンドを実行して、コンテスト用ディレクトリの自動作成を行ってみましょう。

acc new abc321

accの実行結果画面

これでツールのセットアップは完了です!!!
これでほぼ完成まできました!!
あと少しだけです!

ショートカットキー

次のVScode拡張機能を入れます。

  • Command Runner/edonet
  • WSL/Microsoft
  • Python/Microsoft

py-coder直下に.vscodeフォルダを作成します。

そこにsettings.jsonを作成します。内容は下記の通りです。
ここではcommand-runnerにコマンドのエイリアスを登録しています。

  • oj testは作業中の親ディレクトリに移動して、python3でojのテストコマンドを実行するエイリアスです。

  • acc submitは作業中の親のディレクトリ名に移動したのち、accの提出コマンドをpypyオプションで実行し、確認の入力をechoで自動化したエイリアスです。

  • execute pythonは開いてるpythonファイルを実行するエイリアスです。

settings.json
{
    "command-runner.commands": {
        "oj test": "cd ${fileDirname} && oj t -c \"python3 ${fileBasename}\" -d tests",
        "acc submit": "cd ${fileDirname} && echo abc$(basename $(pwd)) | acc s ${file} -- --guess-python-interpreter pypy",
        "execute python": "cd ${fileDirname} && python3 ${fileBasename}"
    }

}

次にVScodeでctl + k+ctl + sを押してキーボードショートカットの設定画面に移ります!
下記の内容を追記してします。

keybindings.json
    {
        "key": "ctrl+shift+t",
        "command": "command-runner.run",
        "args": {
          "command": "oj test"
        }
      },
      {
        "key": "ctrl+shift+oem_plus",
        "command": "command-runner.run",
        "args": {
          "command": "acc submit"
        }
      }
      ,{
        "key": "ctrl+shift+e",
        "command": "command-runner.run",
        "args":{
          "command": "execute python"
        }
      }

main.pyを開いた状態でctl + shift + tを押してみてください!
自動でサンプルケースのテストが行われるはずです!
テストの確認した後ctl + shift + +を押すと提出ができます!

これにて環境構築終了です!あとはお好みにあわせて変更してください!
お疲れ様でした!!
もし不明な点や間違えている点があれば遠慮なくコメントお願いします!

GitHubで編集を提案

Discussion