debian vps with gigatux。 使用django / python和mod_wsgi,我使用virtualenvs,因为我希望能够容纳一些可能处于不同级别的不同网站。
我有一个问题让网站运行,现在我甚至不能做syncdb,因为它拒绝导入site-packages文件夹中的django包
我的django.wsgi文件中有以下声明,该文件是从apache2 / sites-available / default中的wsgi配置行调用的
import sys
sys.path.append('/home/shofty/virtualenvs/sitename/lib/python2.5/site-packages')
我在该文件夹中有很多软件包。
但是syncdb不会运行。
现在我已经在vps上安装了django而没有强制它进入virtualenv,然后我可以运行syncdb。但syncdb在导入站点包中但未安装在vps上的已安装应用程序中的模块时失败。所以我知道上面的陈述是行不通的。
我很欣赏可能有一个更专业的地方提出这个问题,我只是不知道。如果你知道某个地方会得到答案,请告诉我这是什么。我有两天时间让这个vps运行,说实话,我已经准备好放弃了。
答案 0 :(得分:1)
混合环境无济于事。
显然,一些软件包安装在捆绑的python中,另一些软件包安装在virtualenv中。
我的建议,坚持virtualenv
通过source /path/to/venv/bin/activate
在wsgi文件中,启用virtualenv 。你这样做不是通过导入它的site_packages,而是通过要求mod_wsgi使用那个 python。您可以通过以下命令执行此操作:
activate_this = '/path/to/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
答案 1 :(得分:0)
几个星期前,我努力让debian,apache,django,mod_wsgi和virtualenvs玩得很好。看看我为wsgi文件制作的模板,我正在使用'site.addsitedir'和'sys.path.append',其中'site.addsitedir'指向site_package,'sys.path.append'指向副本在主机上的应用程序。以下是django.wsgi
的jinja2模板的第一部分import sys
import os
import site
site.addsitedir('{{ site_package }}')
sys.path.append('{{ local_source }}')
...
'local_source'类似于'/ home / jdoe / my_project','site_package'类似'/usr/local/lib/python2.6/site-packages'。
我记得有点玩弄它,我还记得'django.wsgi'和'settings.py'必须在同一目录中的问题。我希望有所帮助。