【问题标题】:could not install the packages using pipenv when using docker使用 docker 时无法使用 pipenv 安装软件包
【发布时间】:2019-07-23 12:55:04
【问题描述】:

我正在使用 cookiecutter-django 和 pipenv 来设置项目。我正在尝试使用 docker,但是我收到的错误为ERROR: Service 'django' failed to build: The command '/bin/sh -c pipenv install' returned a non-zero code: 1

要运行 docker,我使用了以下命令

docker-compose -f local.yml up -d

这是我的 docker 文件

local.yml

version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: tryavel_local_django
    depends_on:
      - postgres
      - mailhog
    volumes:
      - .:/app
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: tryavel_production_postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data
      - local_postgres_data_backups:/backups
    env_file:
      - ./.envs/.local/.postgres

  mailhog:
    image: mailhog/mailhog:v1.0.0
    ports:
      - "8025:8025"

  redis:
    image: redis:5.0

  celeryworker:
    <<: *django
    image: tryavel_local_celeryworker
    depends_on:
      - redis
      - postgres
      - mailhog
    ports: []
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: tryavel_local_celerybeat
    depends_on:
      - redis
      - postgres
      - mailhog
    ports: []
    command: /start-celerybeat

  flower:
    <<: *django
    image: tryavel_local_flower
    ports:
      - "5555:5555"
    command: /start-flower

撰写/本地/django/Dockerfile

FROM python:3.7-alpine

ENV PYTHONUNBUFFERED 1

RUN apk update \
  # psycopg2 dependencies
  && apk add --virtual build-deps gcc python3-dev musl-dev \
  && apk add postgresql-dev \
  # Pillow dependencies
  && apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
  # CFFI dependencies
  && apk add libffi-dev py-cffi \
  # Translations dependencies
  && apk add gettext \
  # https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
  && apk add postgresql-client

# Requirements are installed here to ensure they will be cached.
RUN pip3 install --upgrade pip
RUN pip3 install pipenv
COPY Pipfile* /app/
RUN pipenv install
# COPY ./requirements /requirements
# RUN pip install -r /requirements/local.txt

COPY ./compose/production/django/entrypoint /entrypoint
RUN sed -i 's/\r$//g' /entrypoint
RUN chmod +x /entrypoint

COPY ./compose/local/django/start /start
RUN sed -i 's/\r$//g' /start
RUN chmod +x /start

COPY ./compose/local/django/celery/worker/start /start-celeryworker
RUN sed -i 's/\r$//g' /start-celeryworker
RUN chmod +x /start-celeryworker

COPY ./compose/local/django/celery/beat/start /start-celerybeat
RUN sed -i 's/\r$//g' /start-celerybeat
RUN chmod +x /start-celerybeat

COPY ./compose/local/django/celery/flower/start /start-flower
RUN sed -i 's/\r$//g' /start-flower
RUN chmod +x /start-flower

WORKDIR /app

ENTRYPOINT ["/entrypoint"]

为什么我会遇到 pipenv 问题?

错误

Step 7/24 : RUN pipenv install
 ---> Running in bc10595bd5d2
Creating a virtualenv for this project?
Pipfile: /Pipfile
Using /usr/local/bin/python (3.7.3) to create virtualenv?
? Creating virtual environment...Already using interpreter /usr/local/bin/python
Using base prefix '/usr/local'
New python executable in /root/.local/share/virtualenvs/-x-v5uFv0/bin/python
Installing setuptools, pip, wheel...
done.

? Successfully created virtual environment! 
Virtualenv location: /root/.local/share/virtualenvs/-x-v5uFv0
Creating a Pipfile for this project?
Traceback (most recent call last):
  File "/usr/local/bin/pipenv", line 10, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/pipenv/cli/command.py", line 254, in install
    editable_packages=state.installstate.editables,
  File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 1741, in do_install
    pypi_mirror=pypi_mirror,
  File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 609, in ensure_project
    validate=validate, skip_requirements=skip_requirements, system=system
  File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 320, in ensure_pipfile
    project.create_pipfile(python=python)
  File "/usr/local/lib/python3.7/site-packages/pipenv/project.py", line 697, in create_pipfile
    config_parser = ConfigOptionParser(name=self.name)
  File "/usr/local/lib/python3.7/site-packages/pipenv/patched/notpip/_internal/cli/parser.py", line 142, in __init__
    assert self.name
AssertionError
ERROR: Service 'django' failed to build: The command '/bin/sh -c pipenv install' returned a non-zero code: 1
Failed to deploy 'Compose: local.yml': `docker-compose` process finished with exit code 1

当我改为使用命令 pipenv install --system 时,我得到以下错误

Step 7/24 : RUN pipenv install  --system
 ---> Running in b35f2bb70207
[pipenv.exceptions.PipenvOptionsError]:   File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
[pipenv.exceptions.PipenvOptionsError]:       return f(get_current_context(), *args, **kwargs)
[pipenv.exceptions.PipenvOptionsError]:   File "/usr/local/lib/python3.7/site-packages/pipenv/cli/command.py", line 254, in install
[pipenv.exceptions.PipenvOptionsError]:       editable_packages=state.installstate.editables,
[pipenv.exceptions.PipenvOptionsError]:   File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 1741, in do_install
[pipenv.exceptions.PipenvOptionsError]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.PipenvOptionsError]:   File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 609, in ensure_project
[pipenv.exceptions.PipenvOptionsError]:       validate=validate, skip_requirements=skip_requirements, system=system
[pipenv.exceptions.PipenvOptionsError]:   File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 282, in ensure_pipfile
[pipenv.exceptions.PipenvOptionsError]:       "--system is intended to be used for pre-existing Pipfile
ERROR:: --system is intended to be used for pre-existing Pipfile installation, not installation of specific packages. Aborting.

【问题讨论】:

  • “返回的退出代码 1”只是 Linux 中“它不起作用”的说法。实际的错误消息将在那之前的几十行中。
  • @DavidMaze 更新了错误截图。
  • 请不要将终端窗口的屏幕截图粘贴到 SO 问题中。而是粘贴错误消息的实际文本。
  • 我已经粘贴了实际文本

标签: python django docker cookiecutter-django


【解决方案1】:

当你使用 --system. Pipfile.lock 是必需的。确保将 pipfile.lock 复制到正确的目录

【讨论】:

    【解决方案2】:

    你只需要 cd 到 Dockerfile 中的 /app

    # Requirements are installed here to ensure they will be cached.
    RUN pip3 install --upgrade pip
    RUN pip3 install pipenv
    COPY Pipfile* /app/
    RUN cd /app && pipenv install
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      相关资源
      最近更新 更多