7
votes

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
totally agree sync should have --system. that would clear up much confusion for using the lock file in a container where you don't need a virtualenv.JCotton
For interested readers: pipenv sync --system now works as of pipenv 2020.11.4 (PR github.com/pypa/pipenv/pull/4441)Micah Smith

3 Answers

7
votes

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

5
votes

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.

1
votes

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.