[virtualenv]生产环境中使用virtualenv

本文介绍如何使用virtualenv在生产环境中部署Python服务,包括Nginx、Gunicorn、Celery及Fabric的具体配置方法。

virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接

Python 中我最喜欢的东西之一就是可以使用 virtualenv 去创建隔离的环境。非常简单的就可以在不同的项目中部署不同的python类库。

有一个比较棘手的问题就是在生产环境中使用virtualenv 部署几个不同的服务有一些配置上的不同。 于是我就从我的项目中收集了几种不同的服务的不同配置方式。 可以肯定它们是不同的,但是在我这都是可以正常工作的,希望可以方面更多的人使用。如果你遇到了任何问题,或者我哪里写的不够清楚,请告诉我,我会及时更新这篇文章。

  • Nginx and Gunicorn under Supervisor.
    Nginx- 这个配置和正常的配置基本没啥区别,出了你要在你的virtualevn中指定一些特殊的静态路径。(因为第三方库安装的位置变了)

静态文件要指向 virtualenv的目录

location /static/admin {
  autoindex on;
  root   /home/ubuntu/app/venv/lib/python2.7/site-packages/django/contrib/admin/;
}
  • Gunicorn - 我用一个shell脚本来配置Gunicorn的 路径变量和选项
#!/bin/bash
set -e
DJANGODIR=/home/ubuntu/app
DJANGO_SETTINGS_MODULE=app.settings.prod

LOGFILE=/var/log/gunicorn/guni-app.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=2
# user/group to run as
USER=ubuntu
GROUP=ubuntu
cd /home/ubuntu/app
source /home/ubuntu/app/venv/bin/activate

export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

test -d $LOGDIR || mkdir -p $LOGDIR
exec /home/ubuntu/app/venv/bin/gunicorn_django -w $NUM_WORKERS \
  --user=$USER --group=$GROUP --log-level=debug \
  --log-file=$LOGFILE -b 0.0.0.0:8000 2>>$LOGFILE
  • Supevisor - 这里就直接把Gunicorn的配置文件指向shell脚本
[program:gunicorn-myapp]
directory = /home/ubuntu/myapp
user = ubuntu
command = /home/ubuntu/myapp/scripts/start.sh
stdout_logfile = /var/log/gunicorn/myapp-std.log
stderr_logfile = /var/log/gunicorn/myapp-err.log
  • Celery 在 Supervisor下
    这种情况下我们配置 Supervisor 去启动 virtualenv路径下的 celery。一个很酷的特性就是可以指定环境变量 -在这里是通过 Django的 settings 模块
[program:celery]
; Set full path to celery program if using virtualenv
command=/home/ubuntu/myapp/venv/bin/celery worker -A myapp --loglevel=INFO

directory=/home/ubuntu/myapp
user=nobody
numprocs=1
stdout_logfile=/var/log/celery/worker.log
stderr_logfile=/var/log/celery/worker.log
autostart=true
autorestart=true
startsecs=10

environment =
  DJANGO_SETTINGS_MODULE=myapp.settings.prod
  • Fabric.
    思路就是确保所有的远程命令在 激活的virtualenv环境下工作。
from __future__ import with_statement
from fabric.api import *
from contextlib import contextmanager as _contextmanager

env.activate = 'source /home/ubuntu/myapp/venv/bin/activate'
env.directory = '/home/ubuntu/myapp'

@_contextmanager
def virtualenv():
    with cd(env.directory):
        with prefix(env.activate):
            yield

@hosts(env.roledefs['db'])
def rebuild_index():
    with virtualenv():
        run("python manage.py rebuild_index")

声明:
本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/45066157
作者orangleliu 采用署名-非商业性使用-相同方式共享协议

使用 `virtualenv` 创建和管理 Python 虚拟环境是进行 Python 开发时的一项基本技能。以下是详细的步骤说明,涵盖安装、创建、激活、退出以及删除虚拟环境的方法。 ### 安装 virtualenv 在开始之前,需要确保系统中已经安装了 `virtualenv` 工具。可以通过以下命令来安装: ```bash pip install virtualenv ``` ### 创建虚拟环境 创建虚拟环境的过程包括指定一个目录用于存放该环境,并可以选择性地指定所使用Python 解释器版本。例如,如果希望创建一个名为 `venv` 的新虚拟环境,并且想要使用特定版本Python(比如 Python 3.7),可以执行如下命令: ```bash virtualenv venv --python=C:\Python37\python.exe ``` 这里需要注意的是,路径 `C:\Python37\python.exe` 应该替换为你系统上实际存在的 Python 可执行文件的位置[^1]。 ### 激活虚拟环境 一旦虚拟环境被成功创建,下一步就是激活它。激活方式取决于操作系统: - **Windows**: ```bash .\venv\Scripts\activate ``` - **Unix 或 Linux**: ```bash source venv/bin/activate ``` 激活后,命令行提示符通常会显示虚拟环境的名字,表明你现在处于这个环境中。此时安装的所有包都将仅限于这个环境内。 ### 管理虚拟环境 在激活的虚拟环境中,你可以像平常一样使用 `pip` 来安装、升级或卸载软件包。例如: - 安装包: `pip install package_name` - 升级包: `pip install --upgrade package_name` - 卸载包: `pip uninstall package_name` 为了保持项目的清晰与可维护性,建议为每个项目单独创建并配置其专属的虚拟环境。 ### 退出虚拟环境 当你完成工作并准备离开当前的虚拟环境时,只需运行: ```bash deactivate ``` 这将恢复你的 shell 到全局的 Python 环境状态。 ### 删除虚拟环境 如果你不再需要某个虚拟环境,可以直接删除对应的文件夹。对于 Unix 用户来说,可能使用如下命令: ```bash rm -rf venv/ ``` 而 Windows 用户则可以通过资源管理器或者命令提示符中的 `rmdir` 命令来移除相应的文件夹[^1]。 通过以上步骤,你就可以有效地利用 `virtualenv` 来管理和组织不同的 Python 项目及其依赖项了。这种方法不仅有助于避免不同项目之间的依赖冲突,还能确保开发环境的一致性和简洁性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值