6

我的问题是让 manage.py syncdb 在 vi​​rtualenv 中运行。

它一度运行良好,但似乎在我安装 South 并更新 pip 和分发时出现故障。

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

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

4

2 回答 2

6

嗨这是一个老问题,但看到它没有回答。不知道你想做什么,但基本上有两种模式可以使用 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
于 2010-12-07T22:08:42.090 回答
3

我有一个简单的解决方案

只需从虚拟环境的 bin 中的 python 启动 manage.py 即可。

所以说你的 python 在这里 /home/tom/environments/my_env/bin/python 你可以像这样启动 manage.py :

/home/tom/environments/my_env/bin/python manage.py syncdb

然后只需在 django 项目中创建一个指向虚拟环境 python 的符号链接并将其命名为 env_python 然后你可以这样做:

./env_python manage.py syncdb

于 2011-01-18T18:10:43.563 回答