動機
AtcoderではPythonのバージョンが最新でなかったり、使用できるライブラリが限定されていたりして、ローカル環境とは勝手が違います
現在(2022/06/04)Cpythonでのバージョンは3.8.2
でPypyでのバージョンは3.6.9
(Pypy自体は 7.3.0
)ですが、
自分の場合は、AHCの時にPypyでPython3.8から追加されたtyping.Literal
を使おうとしてWAしたことが2回あるので、いい加減に手を打つことにしました
今回は仮想環境はpyenv local
だけで擬似的に対応できそうだったので使わないことにしました
環境構築
最初に言っておきますが、
ローカルでPypyを使うWindowsの方はこの方法はつかえない(後述)ので、ローカルではCPythonを使うことになります
ここからはWin10の場合の説明です
Mac等の場合はリンクを貼るだけにします
Pyenvのインストール
Windowsの場合は、公式にサポートしていないらしいので、
pyenv-winを使います
PowerShellで以下を実行
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
FullyQualifiedErrorId : UnauthorizedAccess
とエラーが出た場合はPowerShellを[管理者として実行]→以下のコードを実行してから上のコードを再度実行(自分は出なかった)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Pythonのインストール
多分Mac,Windows共通です
pyenv install -l
でインストールできるバージョンの一覧が確認できるので、インストールしたいバージョン名をコピー
Pypyを使う方へ
Windowsの場合(Macは不明)、現在Pypyに非対応でインストールできないので、CPythonをインストールして、Pypyとバージョンだけ合わせておくのがいいと思います(3.6.8が一番近い)
追記:自分の環境だけかもしれませんが、PyenvとVSCodeでpython3.6のコードをデバッグしようとしたらできなかったので、デバッグにpdbを使うことをおすすめします(面倒くさい...)
Python3.7の新機能を使わない自信がある方は3.7.xを使うのもいいと思います
コピーしたバージョンを使って下のコマンドを実行
pyenv install インストールしたいバージョン
Macでpypy3.6-7.3.1インストールでエラーが出る場合
競プロ用のフォルダに移動して、local バージョンをセットする
cd 競プロフォルダまでのパス
pyenv local さっきインストールしたバージョン
pyenv rehash
rehash
はよくわかっていませんが、新しいバージョンを入れたときや、pip install
の後などに必要らしいです
これで、競プロ用フォルダでのみ、自動でさっきインストールしたバージョンに切り替わります
また、ここでpython -V
(Vは大文字)をすると、バージョンが変わっていることが確認できます
そして、以下を実行すると、グローバル(localで設定したフォルダ以外)のバージョンが指定されます
Atcoder以外では最新バージョンを使いたいときなどに実行してください
pyenv install バージョン
pyenv global バージョン
pyenv rehash
ライブラリはバージョンごとに管理されているみたいなので、必要なものは入れ直してください
pyenv local
を設定してからライブラリをインストールすれば、今回の用途では仮想環境は不要になりそうです