3

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

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

据我了解,当您“激活”虚拟环境时,它只会在您处于 shell 时更改一些路径变量,仅此而已。因此,当激活 narnia 时使用 pip 安装 django 时,它只是将东西安装到相对于 ~/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”设置的 Web 服务器......此时该 django 项目如何与 narnia virtualenv 相关联?系统路径变量不会只是正常的系统范围的 python 路径吗?“myproject”如何知道使用 narnia 环境?

我对它的工作原理有点困惑。任何帮助表示赞赏。

谢谢!

4

2 回答 2

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()
于 2012-06-20T00:50:53.303 回答
1

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

顺便说一句,就在我看到这个的时候,我看到相关的问题Django and VirtualEnv Development/Deployment Best Practices出现在边栏中。这似乎与您的设置相当相关。

于 2012-06-20T00:55:40.457 回答