django如何与virtualenv合作?

时间:2012-06-20 00:48:14

标签: python django virtualenv wsgi gunicorn

我了解如何创建virtualenv,激活virtualenv,然后在virtualenv激活时安装django。例如:

virtualenv ~/narnia
source ~/narnia/bin/activate
pip install django

根据我的理解,当你“激活”一个虚拟环境时,它只会在你进入shell时更改一些路径变量,仅此而已。所以当激活narnia时,当django安装了pip时,它只是将东西安装到相对于〜/ narnia而不是相对于/ usr的位置(例如〜/ narnia / lib / python2.6 / site-packages而不是/ usr / LIB / python2.6的/站点包)。

现在让我们说我想用virtualenv创建一个django项目。我甚至不需要激活,对吗?我可以这样做:

deactivate
cd ~
narnia/bin/django-admin.py startproject myproject

所以,如果我有一个设置了“myproject”的网络服务器......这个django项目在这一点上如何与narnia virtualenv相关联?系统路径变量不会只是正常的系统范围的python路径吗? “myproject”如何知道使用纳尼亚环境?

我对它的运作方式感到有些困惑。任何帮助表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:3)

Web服务器通常有一种配置Python使用的方法。您可以设置环境变量,路径等。使用这些工具指向virtualenv。

例如,在我的Apache httpd.conf中:

WSGIDaemonProcess myapp processes=2 threads=12 python-path=/home/nedbat/webapps/myapp/server:/home/nedbat/webapps/myapp/lib/python2.7
WSGIProcessGroup myapp
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /home/nedbat/webapps/myapp/myapp.wsgi

我有一个myapp.wsgi文件:

import os
import site
import sys

VE = '/home/nedbat/webapps/myapp/ve'

site.addsitedir(VE + '/lib/python2.7/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = 'prod_settings'
os.environ['USE_PYPY'] = 'y'
os.environ['TMPDIR'] = '/home/nedbat/webapps/myapp/tmp'

from django.core.handlers.wsgi import WSGIHandler

application = WSGIHandler()

答案 1 :(得分:1)

如果您希望在生产甚至登台环境中使用带有Django的virtualenv,我希望您激活环境,具体取决于您是手动操作还是使用例如virtualenvwrapper,设置适当的环境变量。我不确定在虚拟环境中安装Django然后不使用它的目的是什么。

顺便说一句,正如我看到这一点,我看到相关问题Django and VirtualEnv Development/Deployment Best Practices显示在侧边栏中。这似乎与您的设置相关。