why I dropped pipenv in favor of homemade bash script?

Posted on Sat 18 May 2019 in misc

Long time ago ...

... i suffered from fact, that I'm not able to track my pip dependencies. pip freeze was not solution, because it attached lot of dependencies, which was broken in few months.

I dreamed about software, which will track my pip install commands, and will store key dependencies in .txt files, which are ready to use requrements when eg. I want to install something to production.

Pipenv.

Then I found Pipenv, and I was happy as a kid. It was what I wanted.

Few weeks later, I realized that it's not exactly what I want. It is error prone, narcistic and slow.

why narcistic?

Pipenv ought to be interface to pip. Pip is in the background, but it's quite hidden.

In fact you have no idea what's happening when it tries to install. When failed - then you usually can't see pip output.

I thought that if I give --verbose option, then I will see what pip install said. I was wrong. I saw mainly lot of debug things of pipenv, and pip output hidden beneath them.

Long story short - if pip install fail because:

  • there is no .h file in system,
  • or wrong download path,
  • or internet is broken,
  • your transparent proxy gives you wrong file

, then you can't see it without effort.

why slow?

Because want's too much. Too much for me. Looks like it tries to determine optimal combination of libraries, and when I tried to install few libraries by pipenv: kivy, cymunk, kivent, then calculating dependencies tooks so long that I wrote simple replacement script in this time.

what instead of pipenv?

  • as wrote above, I wrote simple script. It's, clumsy but working. I called it Yapm.
  • pipm - looks nice but doesn't handle git+https:// packages
  • pipdeptree - also can be useful, but it's not exactly workflow I like.