pipenv:部署工作流程

问题描述 投票:9回答:4

我正在考虑从pip和virtualenv切换到pipenv。但在研究了文档后,我仍然对pipenv的创建者如何构建部署工作流程感到茫然。

例如,在开发中我有一个定义环境的PipfilePipfile.lock。使用我想部署的部署脚本

  1. git pull通过Github到生产服务器
  2. pipenv install在部署用户的主目录中创建/刷新环境

但是我需要在systemd或supervisor中配置的特定目录中使用venv。例如:command=/home/ubuntu/production/application_xy/env/bin/gunicorn module:app

pipenv在某些地方创造了环境,例如/home/ultimo/.local/share/virtualenvs/application_xy-jvrv1OSi

使用pipenv部署应用程序的预期工作流程是什么?

python pipenv
4个回答
10
投票

那里你没什么选择。

  1. 你可以通过pipenv run运行你的gunicorn: pipenv run gunicorn module:app

这会产生轻微的开销,但具有从$PROJECT_DIR/.env(或其他$PIPENV_DOTENV_LOCATION)加载环境的优势。

  1. 您可以设置PIPENV_VENV_IN_PROJECT环境变量。这将使pipenv的virtualenv保持在$PROJECT_DIR/.venv而不是全球位置。
  2. 您可以使用现有的virtualenv并从中运行pipenv。 Pipenv不会尝试创建自己的virtualenv,如果它从一个运行。
  3. 你可以使用奇怪的pipenv创建的virtualenv路径。

9
投票

我刚刚切换到pipenv进行部署,我的工作流程大致如下(使用ansible管理)。对于一个名为“project”的假想项目,假设将一个正在运行的Pipfile.lock检入源代码控制:

  1. 克隆git存储库: git clone https://github.com/namespace/project.git /opt/project
  2. 切换到该目录 cd /opt/project
  3. 查看目标参考(分支,标记,...): git checkout $git_ref
  4. 使用目标Python版本(3.6,2.7等)在某处创建virtualenv: virtualenv -p"python$pyver" /usr/local/project/$git_ref
  5. 在virtualenv的上下文中调用pipenv,因此它不会安装自己的: VIRTUAL_ENV="/usr/local/project/$git_ref" pipenv --python="/usr/local/project/$git_ref/bin/python" install --deploy 当Pipfile.lock与Pipfile不匹配时,--deploy将抛出错误。
  6. 使用virtualenv的pip安装项目本身(仅当它不在Pip文件中时才需要): /usr/local/project/$git_ref/bin/pip install /opt/project
  7. 将符号链接设置为新安装目录: ln -s /usr/local/project/$git_ref /usr/local/project/current

我的应用程序可以调用,例如例如,与/usr/local/project/current/bin/project_exec --foo --bar配置的supervisor

当标签被推送到遥控器时,所有这一切都会被触发。

由于早期版本的virtualenvs保持不变,因此只需将current-symlink设置回早期版本即可完成回滚。即如果标签1.5坏了,我想回到1.4,我所要做的就是ln -s /usr/local/project/1.4 /usr/local/project/current并用supervisorctl重新启动应用程序。


2
投票

我认为pipenv非常适合管理依赖项,但速度太慢,繁琐且使用它进行自动部署仍然有点不稳定。

相反,我使用virtualenv(或virtualenvwrapper)和pip在目标机器上。

  • 在我的开发机器上,我使用requirements.txt创建一个pipenv lock -r兼容的文本文件: $ pipenv lock -r > deploy-requirements.txt
  • 在部署时,在virtualenv中我运行: $ pip install -r deploy-requirements.txt

0
投票

要在与项目相同的目录中创建虚拟环境,请设置以下环境变量doc

PIPENV_VENV_IN_PROJECT=true

这会将依赖项安装到项目内的.venv目录中。可从PipEnv v2.8.7购买

© www.soinside.com 2019 - 2024. All rights reserved.