pipenv sync and pipenv install --system --ignore-pipfile in docker environment

Viewed 8128

According to pipenv official documentation:

sync

pipenv sync [OPTIONS]

Installs all packages specified in Pipfile.lock.

install

pipenv install [OPTIONS] [PACKAGES]...

Installs provided packages and adds them to Pipfile, or (if no packages are given), installs all packages from Pipfile.

--ignore-pipfile Ignore Pipfile when installing, using the Pipfile.lock.

Is it safe to assume pipenv sync and pipenv install --ignore-pipfile are identical without any hidden drawbacks?

More background: I was using --system flag to install the python packages to the system since I don't care about isolated environments in a docker container. However --system flag is unavailable for pipenv sync (See github issue), so I figured pipenv install --system --ignore-pipfile might be a viable hack.

3 Answers

you can see the notes in Advanced usage of pipenv

pipenv install --ignore-pipfile is nearly equivalent to pipenv sync, but pipenv sync will never attempt to re-lock your dependencies as it is considered an atomic operation. pipenv install by default does attempt to re-lock unless using the --deploy flag.

so maybe pipenv install --ignore-pipfile --deploy equal to pipenv sync

Not really an answer (I'd be interested in confirmation as well) but for what it's worth, we've been using

pipenv install --system --deploy --ignore-pipfile

in our Dockerfile with good results.

Not sure whether it was added after you posted this question, but the documentation does address this very question (although, to be fair, it's kinda of a "uh?" type of explanation for me...)

FWIW, I believe that sync should have the --system flag too (I'm trying to address the very same issue as you, of building a container, and do not want to maintain two separate files: requirements.txt for the container's system Python, and Pipfile for my dev virtual env).

Your "hack" seems to me currently the only viable option.

Related