django 如何与 virtualenv 一起工作



我了解如何创建一个虚拟环境,激活该虚拟环境,然后在激活虚拟环境时安装 django。前任:

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

据我了解,当您"激活"虚拟环境时,它只会在 shell 中更改一些路径变量,仅此而已。因此,当 django 在激活 narnia 时使用 pip 安装时,它只是将东西安装到相对于 ~/narnia 而不是相对于/usr 的位置(例如 ~/narnia/lib/python2.6/site-packages 而不是/usr/lib/python2.6/site-packages)。

现在假设我想用这个 virtualenv 创建一个 django 项目。我什至不必被激活,对吗?我可以做:

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

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

我对它是如何工作的有点困惑。任何帮助,不胜感激。

谢谢!

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

例如,在我的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()

如果您希望在生产环境甚至暂存环境中将 virtualenv 与 Django 一起使用,我希望您激活环境,并根据您是手动操作还是使用例如 virtualenvwrapper,设置适当的环境变量。我不确定在虚拟环境中安装 Django 然后不使用它的目的是什么。

顺便说一下,就在我看到这个的时候,我看到相关的问题Django和VirtualEnv开发/部署最佳实践出现在侧边栏中。这似乎与您的设置相当相关。

最新更新