Pipenvのpyenvサポート(自動バージョンインストール)が動かないとき


ハマったのでメモ。20191209時点のお話。

tl;dr

こんな感じになってしまったら、

$ pipenv sync
Warning: Python 3.7 was not found on your system…
Would you like us to install CPython 3.7.5 with pyenv? [Y/n]: Y
Installing CPython 3.7.5 with pyenv (this may take a few minutes)…
✔ Success!

Warning: The Python you just installed is not available on your PATH, apparently.

これでOK

pip install --user pipenv==v2018.7.1
pip install pip==18.0

Pipenvのpyenv support

Pipenvには、pyenvがインストールされていればPipfileに記載されているバージョンを勝手にインストールしてくれる機能がある。

が、現時点でのlatest(v2018.11.26)では壊れているらしい、、、
issue: Pyenv support broken #3551

やってみるとこんな感じで、Successと出るがちゃんと動かない。

$ pipenv sync
Warning: Python 3.7 was not found on your system…
Would you like us to install CPython 3.7.5 with pyenv? [Y/n]: Y
Installing CPython 3.7.5 with pyenv (this may take a few minutes)…
✔ Success!

Warning: The Python you just installed is not available on your PATH, apparently.

Pipenvのバージョンを下げる

issueのコメントには「masterブランチ使えば動く」とか「バージョンを下げれば動く」というコメントがあるので、バージョンを下げてみた。

$ pip install --user pipenv==v2018.7.1
...
Successfully installed pipenv-2018.7.1

今度はPipenv自体が動かなくなった。

$ pipenv sync
...
TypeError: 'module' object is not callable

pipのバージョンも下げる

Pipenvをダウングレードしたので、対応するpipのバージョンも下げないといけないぽい。
issue: pip 18.1 causes "TypeError: 'module' object is not callable" #2924

$ pip install pip==18.0
...
Successfully installed pip-18.0

これでうまくいった

$ pipenv sync
...
All dependencies are now up-to-date!

ただしlockが壊れる

issue: Running pipenv gives TypeError: 'module' object is not callable #2871

つらい。とりあえずバージョンを切り替えながら運用している。つらい。

$ pip install --user pipenv==v2018.11.26

蛇足

Pipenvのリリースがずっと止まってる件についてはこちらのissueで議論されているようです。頑張れ〜〜