1. はじめに
pipenv
でPipfile.lock
を生成するときに,無限に終わらない現象が僕にも起きた.そのとき試してダメだったこと,次善の策のまとめ.
2. 環境
- macOS Mojave 10.14.5
- pipenv, version 2018.11.26
3. Lockingが終わらない現象
ちなみに僕の場合librosa
をinstallするところで起きた.
そのままだと大体
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x10e008d90>
searcher: searcher_re:
0: re.compile('\n')
<pexpect.popen_spawn.PopenSpawn object at 0x10e008d90>
searcher: searcher_re:
0: re.compile('\n')
という感じでタイムアウトする.
もしくは,
$ pipenv install
Pipfile.lock (e35831) out of date, updating to (a55cbb)…
Locking [packages] dependencies…
このLockingが全く終わらない.
4. 試してダメだったこと
4.1. PIPENV_INSTALL_TIMEOUT
, PIPENV_TIMEOUT
の設定を長くする.
似たようなissueが大量に引っかかって,そこでこれで解決したと言われてた方法.
これでもダメだった.今回の僕の場合は長くしても終わらなかった.
4.2. 仮想環境のpythonのバージョンを下げる
もともと3.7.2
でやってたが,installしようとしているpackageが3.6.8
ではCIが通っていたので3.6.8
に下げたがダメだった.
4.3. pipのversionを下げる.
調べてみるとpipenv
のバージョンが2018.7.1
ぐらいだった時代にpipのバージョンが新しすぎるとこの現象が起きていたらしい.
というわけで似たような感じかなと思って仮想環境内のpipのversionを19.2.1
から18.1
に下げた.ダメだった.
ちなみに18.0
に下げてもダメだった.
5. うまくいった方法
5.1 pip
を使う
pipenv shell
で仮想環境内に入った後に,pip install hoge
でインストールする.pipenv install hoge
ではなく.
なんのためのPipfile
だというお気持ちになるのでオススメはしない.
5.2 Pipfile.lock
を生成しない
PIPENV_SKIP_LOCK=true
の環境変数を定義しておくとPipfile.lock
を生成しなくなる.
$ PIPENV_SKIP_LOCK=true pipenv install
buildしたマシンの情報やpythonモジュールのversionのハッシュ値などが保存されていて,Pipfile
を変更した時に差分だけインストールして早くなるとか旨味があるのだろうが,動かないよりはマシなのでなくてもいいと割り切る.
Pipfile.lock
を生成しない方法としては,環境変数を指定する以外にもpipenv install
時のオプションが準備されている.(参考)
$ pipenv install --skip-lock
(これはコメントにて515hikaruさんに教えていただいたやり方です.感謝です.)
6. 終わりに
結論としてはlockしないという道しかなかったという事になる.