Im installing pipenv in my docker:
RUN pip install pipenv RUN cd /my/app/path/ && pipenv install RUN cd /my/app/path/ && pipenv shell
Im getting the error:
Traceback (most recent call last): File "/usr/local/bin/pipenv", line 11, in <module> sys.exit(cli()) File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 722, in __call__ return self.main(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 697, in main rv = self.invoke(ctx) File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 1066, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 895, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 535, in invoke return callback(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/pipenv/cli.py", line 2057, in shell do_shell(three=three, python=python, fancy=fancy, shell_args=shell_args) File "/usr/local/lib/python2.7/dist-packages/pipenv/cli.py", line 1952, in do_shell shell = os.path.abspath(PIPENV_SHELL) File "/usr/lib/python2.7/posixpath.py", line 360, in abspath if not isabs(path): File "/usr/lib/python2.7/posixpath.py", line 54, in isabs return s.startswith('/') AttributeError: 'NoneType' object has no attribute 'startswith'
If I run
RUN cd /my/app/path/ && pipenv install --system
instead, im getting another error:
build 30-Sep-2017 16:50:45 Step 5/9 : RUN cd /my/app/path && pipenv install --system build 30-Sep-2017 16:50:45 ---> Running in cffd31633074 build 30-Sep-2017 16:50:46 [91mPipfile.lock not found, creating… build 30-Sep-2017 16:50:46 [0m[91mLocking [dev-packages] dependencies… build 30-Sep-2017 16:50:46 [0m[91mLocking [packages] dependencies… build 30-Sep-2017 16:50:49 [0m[91mCRITICAL:pip.utils:Error [Errno 2] No such file or directory while executing command python setup.py egg_info build 30-Sep-2017 16:50:49 [0m[91mTraceback (most recent call last): build 30-Sep-2017 16:50:49 File "/usr/local/bin/pipenv", line 11, in <module> build 30-Sep-2017 16:50:49 sys.exit(cli()) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 722, in __call__ build 30-Sep-2017 16:50:49 [0m[91m return self.main(*args, **kwargs) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 697, in main build 30-Sep-2017 16:50:49 [0m[91m rv = self.invoke(ctx) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 1066, in invoke build 30-Sep-2017 16:50:49 [0m[91m return _process_result(sub_ctx.command.invoke(sub_ctx)) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 895, in invoke build 30-Sep-2017 16:50:49 [0m[91m return ctx.invoke(self.callback, **ctx.params) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/vendor/click/core.py", line 535, in invoke build 30-Sep-2017 16:50:49 return callback(*args, **kwargs) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/cli.py", line 1782, in install build 30-Sep-2017 16:50:49 [0m[91m do_init(dev=dev, allow_global=system, ignore_pipfile=ignore_pipfile, system=system, skip_lock=skip_lock, verbose=verbose, concurrent=concurrent, deploy=deploy) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/cli.py", line 1290, in do_init build 30-Sep-2017 16:50:49 [0m[91m do_lock(system=system) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/cli.py", line 1080, in do_lock build 30-Sep-2017 16:50:49 [0m[91m pre=pre build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/utils.py", line 421, in resolve_deps build 30-Sep-2017 16:50:49 [0m[91m resolved_tree.update(resolver.resolve()) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/piptools/resolver.py", line 101, in resolve build 30-Sep-2017 16:50:49 [0m[91m has_changed, best_matches = self._resolve_one_round() build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/piptools/resolver.py", line 199, in _resolve_one_round build 30-Sep-2017 16:50:49 [0m[91m for dep in self._iter_dependencies(best_match): build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/piptools/resolver.py", line 293, in _iter_dependencies build 30-Sep-2017 16:50:49 dependencies = self.repository.get_dependencies(ireq) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/piptools/repositories/pypi.py", line 171, in get_dependencies build 30-Sep-2017 16:50:49 result = reqset._prepare_file(self.finder, ireq) build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/pip/req/req_set.py", line 639, in _prepare_file build 30-Sep-2017 16:50:49 [0m[91m abstract_dist.prep_for_dist() build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/pip/req/req_set.py", line 134, in prep_for_dist build 30-Sep-2017 16:50:49 [0m[91m self.req_to_install.run_egg_info() build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/pip/req/req_install.py", line 438, in run_egg_info build 30-Sep-2017 16:50:49 [0m[91m command_desc='python setup.py egg_info') build 30-Sep-2017 16:50:49 File "/usr/local/lib/python2.7/dist-packages/pipenv/patched/pip/utils/__init__.py", line 667, in call_subprocess build 30-Sep-2017 16:50:49 [0m[91m cwd=cwd, env=env) build 30-Sep-2017 16:50:49 File "/usr/lib/python2.7/subprocess.py", line 711, in __init__ build 30-Sep-2017 16:50:49 [0m[91m errread, errwrite) build 30-Sep-2017 16:50:49 File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child build 30-Sep-2017 16:50:49 [0m[91m raise child_exception build 30-Sep-2017 16:50:49 OSError: [Errno 2] No such file or directory error 30-Sep-2017 16:50:49 The command '/bin/sh -c cd /opt/supercrunch/function-service/lib && pipenv install --system' returned a non-zero code: 1 build 30-Sep-2017 16:50:49 [0mSending build context to Docker daemon 40.96 kB
But when I instead do the following:
RUN pip install pipenv RUN cd /my/app/path && pipenv install RUN cd /my/app/path && pipenv install --system
It is working...
So two question: First: Why is pipenv shell
giving me this error and Second: Why do I have to do pipenv install
before pipenv install --system
to get it working?
I would like to use pipenv to create virtual environments with different python versions and differne dependency versions.
To activate the environment, just navigate to your project directory and use pipenv shell to launch a new shell session or use pipenv run <command> to run a command directly.
To see installed packages with Pipenv, you can use the pipenv graph command. The output from this is perhaps more verbose than you'd like, but it does contain everything you need.
Pipenv is a packaging tool for Python that solves some common problems associated with the typical workflow using pip , virtualenv , and the good old requirements. txt . In addition to addressing some common issues, it consolidates and simplifies the development process to a single command line tool.
While pip can install Python packages, Pipenv is recommended as it's a higher-level tool that simplifies dependency management for common use cases. This does a user installation to prevent breaking any system-wide packages.
Considering your problem, as I know it the easiest way is to update to the latest version of pipenv
. It is still in development, so problems are fixed very soon.
We are using pipenv
with docker
in production. And we really like it. There are several things to keep in mind:
--system
flag, so it will install all packages into the system python, and not into the virtualenv
. Since docker
containers do not need to have virtualenv
s--deploy
flag, so your build will fail if your Pipfile.lock
is out of date--ignore-pipfile
, so it won't mess with our setupCheck the official docs to be sure that this information is up-to-date.
All in all:
pipenv install --system --deploy --ignore-pipfile
There's also one more thing. If you are using the same Dockerfile
for both development and production it would be very nice to also use --dev
flag for the development environment only.
Also, check out our django
project template to see the full example: wemake-django-template
The pipenv documentation no longer officially recommends using the --system
flag in docker instances. Instead, they suggest using virtual environments, as "it is for deployment onto a full-fledged OS". This is with the caveat:
...most containers are deployed without virtualenvs as I believe you both note, I believe the purpose is to stay slim and reduce attack surface area by installing as little as possible
As stated in https://github.com/pypa/pipenv/pull/2762.
Instead, the solution would be to run (as stated in a different answer here):
RUN pipenv install --deploy --ignore-pipfile
And then prefix all calls to python with pipenv run
, e.g. CMD ["pipenv", "run", "python", "hello.py"]
Ps. I would have wanted to put this as a comment to the accepted answer, but I don't have the reputation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With