🏃♂️
[Docker+Python+pahcer] AtCoder AHC 向けの環境を構築する
目的
- 長期AHCに備えて、ローカルでテスト実行を簡単に実行できる環境の構築を目指す
- 今後、PCを変更する際などに備えてDocker上で構築し、再セットアップが容易な状態を目指す
構築する環境の概要
- VSCode上でpythonのコードを実行できる
- pacherを導入し、手元で繰り返しテストできる
環境
- MacBook Air M1チップ
手順
事前インストール
- VSCode
拡張機能として以下を追加 - Docker Desktop
作業用フォルダを作成
- atcoderフォルダを作成し、その直下に.devcontainerフォルダを作成
- 最終的なフォルダ構成は以下のようになります。
.
└── atcoder/
├── .devcontainer/
│ ├── Dockerfile
│ └── docker-compose.yml
└── atcoder_ahc/
└── ahc048/
├── main.py
├── pahcer_config.toml
├── pacher/
│ └── summary.mdなどテスト結果
└── tools/
├── src
└── in
Dockerfileの作成
- 現在のジャッジ環境であるpython3.11.4をベースとして作成
使用できる言語とライブラリの一覧を参考にライブラリバージョンを指定
※余談ですがいつもこのページを検索して探していますが、AtCoderのサイトからどうやって確認するのが良いのだろう…と思っています。 - rustは
RUN apt-get update && apt-get install -y cargoで簡易的に追加したところバージョンの問題でpacherが動かなかったため、rustupを利用するようにしています。
Dockerfile
# pythonの公式コンテナを軸に環境構築
FROM python:3.11.4
ARG USERNAME=vscode
ARG GROUPNAME=${USERNAME}
ARG USER_UID=1000
ARG USER_GID=${USER_UID}
RUN apt-get update \
&& groupadd --gid ${USER_GID} ${GROUPNAME} \
&& useradd -s /bin/bash --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} \
&& apt-get -y install sudo \
&& echo ${USERNAME} ALL=\(ALL\) NOPASSWD:ALL > /etc/sudoers.d/${USERNAME} \
&& chmod 0440 /etc/sudoers.d/${USERNAME}
# Python3, PyPy3の環境想定
RUN apt-get update && \
apt-get install -y python3-pip pypy3 nodejs npm
# AtCoderでも使えるPythonライブラリをインストール
RUN pip install -U pip && \
pip install numpy==1.24.1 scipy==1.10.1 scikit-learn==1.3.0 \
numba==0.57.0 networkx==3.0 more-itertools==9.0.0
# ac-library-pythonを追加
RUN pip install git+https://github.com/not522/ac-library-python
# 最新版の Rust を rustup でインストール
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
# PATH を適切に通す(Rust/Cargo を使うため)
ENV PATH="/root/.cargo/bin:${PATH}"
RUN cargo install pahcer --locked
docker-compose.yml の作成
docker-compose.yml
version: "3"
services:
python:
build: ./
image: atcoder_ahc
container_name: atcoder_ahc
tty: true
volumes:
- ../../atcoder_ahc:/atcoder_ahc
environment:
- TZ=Asia/Tokyo
Dockerの起動
Docker Desktopが起動していることを確認の上、docker-compose.yml上で右クリック
→Compose up
コンソール上でログが流れ終わったことを確認後、VSCode左下の「><」のようなマークを押下、
実行中のコンテナーにアタッチして接続
pahcerが動くことを確認
-
任意のAHCコンテストで動くことを確認する (ex:AHC048)
-
コンテストページからローカル版のツールをダウンロードの上、配置する

-
READMEに沿ってコマンドを実行する
- AHC048の場合はスコアが「小さい」方がよく、「python」で回答する
pahcer init -p ahc048 -o min -l python
-
main.pyに実装を行う
-
テスト実行は
pahcer run
以下のようにコンソールにログが出力されたら終了、pahcerフォルダ以下に詳細なログが出力されるAverage Score : 737,355.26 Average Score (log10) : 5.77347 Average Relative Score : 100.000 Accepted : 100 / 100 Max Execution Time : 1,852 ms -
完了!
参考
以下を利用&参考にさせていただきました。ありがとうございます。
余談
AHC048で手元でのテストがうまくできず苦しんだので、環境を構築しました。
次回08/01からの長期AHCで実際にコンテストで利用してみて、環境のアップデートを繰り返していきたいです。
Discussion