LoginSignup
0

More than 1 year has passed since last update.

PyenvでAtcoder用のPythonバージョンを管理する

Last updated at Posted at 2022-06-04

動機

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のインストール

Macの場合はこちら

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を設定してからライブラリをインストールすれば、今回の用途では仮想環境は不要になりそうです

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0