2010-08-24 32 views
6

我的问题是让manage.py syncdb在virtualenv中运行。当使用manage.py syncdb时,Django没有在virtualenv中找到应用程序

它在一点上工作正常,但似乎已经打破了某些时候,当我安装南和更新的点和分发。

无论如何,当virtualenv被激活时,我可以在交互式解释器中很好地导入应用程序。通过运行mod_wsgi,应用程序也被导入,并且该站点可以运行。

当我运行manage.py syncdb时,它无法在我的virtualenv中的INSTALLED_APPS中找到任何应​​用程序。它可以很好地获取系统安装的应用程序,但在尝试仅导入virtualenv应用程序时会失败。

+1

什么家当的内容你正在运行的manage.py的顶部?在激活virtualenv时,用于运行Python交互式解释器和manage.py的确切命令是什么? – 2010-08-25 13:08:02

回答

5

嗨这是一个古老的问题,但看到它没有回答。不知道你正试图做什么,但基本上有两种模式可以使用的virtualenv,

  1. 的发展空间,打造自成体系的环境
  2. 对于部署,打造自成体系的环境

在第一种情况下,您需要首先使用source venv/bin/activate激活您的virtualenv,因为在部署时,您需要确保为您的网站代码激活了virtualenv。我个人更喜欢以下方法来确保您的路径设置正确。 (我也这样做时,开发添加到我的manage.py,所以我不担心第一激活环境。

修改manage.py

#!/usr/bin/env python 
import os.path 

# Cater for Virtual env, add to sys.path 
pwd = os.path.abspath(os.path.dirname(__file__)) 
project = os.path.basename(pwd) 
new_path = pwd.strip(project) 
activate_this = os.path.join(new_path,'venv','bin','activate_this.py') 
execfile(activate_this, dict(__file__=activate_this)) 

from django.core.management import execute_manager 
try: 
    import settings # Assumed to be in the same directory. 
except ImportError: 
    import sys 
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) 
    sys.exit(1) 

if __name__ == "__main__": 
    execute_manager(settings) 

这工作,因为我是如何组织我项目,你就必须将其更改为您的目录结构我的项目的构成就像这样:

TopLevelDir 
| 
|- Project DIR 
|- venv 
|- requirements 
|- deployment configs 
3

我有一个简单的解决这个

刚刚推出您的虚拟环境中的python中的manage.py。

所以说你的Python是这里的/ home /嗵/环境/ my_env /斌/ Python中,你可以启动manage.py像这样:

/家庭/嗵/环境/ my_env /斌/ Python的manage.py执行syncdb

然后只需创建一个符号链接到虚拟环境的蟒蛇Django项目里面并调用它env_python那么你可以这样做:

./env_python manage.py执行syncdb

相关问题