pyenv の python をバージョンアップしたい
pyenv でインストールしたpython をバージョンアップして、pipをmigrate したい・
pyenv はバージョン毎にpip環境が作られるから、pyenv でglobal をアップグレードすると、使ってたpipのパッケージが移動されずに真っ白な環境になってしまう。
そこで pipのパッケージをmigrationしたいと思った
pyenv-pip-migrate で一括アップグレード
pyenv-pip-migrate
という モジュールがあって、コレを使えばマルっとバージョンアップしてくれることがわかった。
pyenv-pip-migrateのインストール
brew install pyenv-pip-migrate
これをインストールしたら準備完了
pyenv でバージョンアップする
現状が次のバージョンなので、これを3.6.4にする。
$ pyenv version 3.6.0 (set by /Users/takuya/.pyenv/version)
バージョンアップしよう
現状は 3.6.0 だったので、これをアップグレードしてpython の pip モジュールもアップグレードしていきます。
準備
brew install pyenv-pip-migrate
python の 最新版(2018-02-17現在)をいれる。
$ pyenv install 3.6.4 Installed Python-3.6.4 to /Users/takuya/.pyenv/versions/3.6.4
version 3.6.4 がインストールされました。
$ pyenv versions system * 3.6.0 (set by /Users/takuya/.pyenv/version) 3.6.4
pip を最新版バージョンに併せて置き換える。
python の一括が終わったら、pipを入れていきます。
今回は 3.6.0→3.6.4 にあげていきます。
$ pyenv migrate 3.6.0 3.6.4
これで、pip のインストールが始まる。
仕上げ
最後に仕上げです。新バージョンにglobalを変える
$ pyenv global 3.6.4
これで問題なく環境を移行できました。楽ちん!
せっかちな人向け
OLD_VERSION=$(pyenv version global version | sed 's/\s.*$//') NEW_VERSION=$(pyenv install --list | \sed "s/\s*//" | \grep -P '^\d\.\d\.\d$' | \sort -nr | \head -n 1) brew install pyenv-pip-migrate pyenv install $NEW_VERSION pyenv migrate $OLD_VERSION $NEW_VERSION pyenv global $NEW_VERSION
エラーになったり、移行させるパッケージを選びたいよって人向け
現在のpipの状態は freeze で持っていけるので、それを使うといい
pip freeze > requirements.txt
つまり、古いバージョンの方で freeze して 新しいバージョンで install する。
pyenv global 3.6.7 pip freeze > requirements.txt ## 適当に編集 vim requirements.txt ## バージョンを切り替え pip global 3.7.0 pip install -r requirements.txt
わざわざ、migration 入れないでいいのは便利。