それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pyenv でインストールされたpipを含めてupgradeする方法

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 入れないでいいのは便利。

参考資料

https://github.com/pyenv/pyenv-pip-migrate