【问题标题】:pipenv --system option for docker. What is the suggested way to get all the python packages in dockerpipenv --docker 的系统选项。在 docker 中获取所有 python 包的建议方法是什么
【发布时间】:2019-03-08 14:02:21
【问题描述】:

我将pipenv 用于我的django 应用程序。

$ mkdir djangoapp && cd djangoapp
$ pipenv install django==2.1
$ pipenv shell
(djangoapp) $ django-admin startproject example_project .
(djangoapp) $ python manage.py runserver

现在我正在转移到 docker 环境。

据我了解pipenv 仅在virtualenv 内安装软件包

您不需要容器内的虚拟环境,案卷容器本身就是一个虚拟环境。

经过许多 Dockerfile 之后,我发现--system 选项可以安装在系统中。

例如我发现的以下内容:

https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/

COPY ./Pipfile /usr/src/app/Pipfile
RUN pipenv install --skip-lock --system --dev

https://hub.docker.com/r/kennethreitz/pipenv/dockerfile

# -- Install dependencies:
ONBUILD RUN set -ex && pipenv install --deploy --system

https://wsvincent.com/beginners-guide-to-docker/

# Set work directory
WORKDIR /code

# Copy Pipfile
COPY Pipfile /code

# Install dependencies
RUN pip install pipenv
RUN pipenv install --system

所以--system 就足够了,或者--deploy --system 是更好的方法。而--skip-lock --system --dev 又不一样了。

那么有人可以指导如何在我的 Docker 中恢复我的环境

【问题讨论】:

    标签: python django docker pipenv


    【解决方案1】:

    典型的 Docker 部署会涉及到拥有一个 requirements.txt(它是一个 file where you can store your pip dependencies, including Django itself)文件,然后在您的 Dockerfile 中执行以下操作:

    FROM python:3.7  # or whatever version you need
    ADD requirements.txt /code/
    WORKDIR /code
    # install your Python dependencies
    RUN pip install -r requirements.txt
    # run Django
    CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8000"]
    
    

    这里根本不需要pipenv,因为你不再像你说的那样拥有虚拟环境。

    更好的是,您可以在 docker-compose.yml 文件中配置很多内容,然后使用 docker-compose 运行和管理您的服务,而不仅仅是 Django。

    Docker have a very good tutorial on dockerising Django 使用它。如果你不确定Dockerfile 本身发生了什么,check the manual

    【讨论】:

    • 所以我在我的主机中使用 pipenv 进行开发并使用 pipenv lock -r requirements.txt 然后在 docker 中使用 pip -r requirements.txt 安装
    • 对,是的,您可以使用pipenv 继续管理您的依赖关系,重要的是您有一个requirements.txt 文件,您可以使用它来设置Docker 环境。
    • 如果你总是使用--skip-lock,那么你就否定了pipenv 的好处,即锁定依赖关系。 --dev 用于安装仅在开发中需要的依赖项。我的建议是创建一个requirements.txt 文件并在那里列出所有正常的项目依赖项,然后为所有开发依赖项创建一个名为requirements_dev.txt 的单独文件。然后你可以为你的主文件做pipenv install --system -r requirements.txt,为你的开发依赖做pipenv install --system --dev -r requirements_dev.txt。应该是这样的
    • 这是个坏建议。锁定文件应该替换 requirements.txt。这就是为什么您应该使用 --deploy 来避免在 docker 构建期间更新锁定文件。此外,由于某些 docker 工具使用 python 并且系统范围内应保持不变,因此仍应在 docker 内使用 virtual-env。 pipenv 的全部目的是将管理部署和开发的所有工作减少到两个文件中,而不是添加更多的手动步骤。
    • 同意@anishtain4,pip 不允许确定性构建,pipen 多亏了锁定文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2013-09-30
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多