【问题标题】:Django not finding apps in virtualenv when using manage.py syncdb使用 manage.py syncdb 时,Django 在 vi​​rtualenv 中找不到应用程序
【发布时间】:2010-08-24 19:24:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你正在运行的manage.py顶部的shebang行的内容是什么?当你的 virtualenv 被激活时,你用来运行 Python 交互式解释器和 manage.py 的确切命令是什么?

标签: django virtualenv django-south django-manage.py


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我有一个简单的解决方案

    只需从虚拟环境的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2021-02-21
      相关资源
      最近更新 更多