41
33

More than 3 years have passed since last update.

pipenvでLockingが無限に終わらないとき

Last updated at Posted at 2019-07-31

1. はじめに

pipenvPipfile.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しないという道しかなかったという事になる.

41
33
1

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
41
33