python - 使用docker时无法使用pipenv安装软件包

标签 python django docker cookiecutter-django

我正在将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 文件

本地文件
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.

最佳答案

您只需要在Dockerfile中使用CD到/ 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

关于python - 使用docker时无法使用pipenv安装软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164656/

相关文章:

python - 使用 Pyparsing 解析自定义格式(大括号分隔)文本配置

python - Python/OpenCV应用程序锁定问题

python - 在 Python 中编写自定义矩阵类,__setitem__ 问题

css - 找不到或无法读取要导入的文件 : bootstrap-sass

python - pytest 出现 ModuleNotFoundError

python - 设置一种特定的日期类型以在 genfromtxt 中读取

Django-通过 celery 从模型执行任务

java - 为我的所有应用程序增加 Tomcat 中的堆大小

node.js - docker 容器未启动 - 产生 Java enoent 错误

python - Django URL 路由问题