Django не находит приложения в virtualenv при использовании manage.py syncdb

моя проблема в получении manage.py syncdb для запуска в virtualenv.

в какой-то момент он работал нормально, но, похоже, сломался, когда я установил South и обновил pip и распространял.

в любом случае, когда virtualenv активирован, я могу импортировать приложения в интерактивном интерпретаторе. Запуск через mod_wsgi, приложения также импортируются, и сайт может работать.

когда я бегу manage.py syncdb, он не может найти любое приложение в INSTALLED_APPS, который находится в моем virtualenv. Он отлично подбирает установленные системой приложения, но терпит неудачу, когда пытается импортировать только приложения virtualenv.

2 ответов


Привет это старый вопрос, но видел его не ответил. Не уверен, что вы пытаетесь сделать, но есть в основном два режима, которые вы можете использовать virtualenv,

  1. для разработки, для создания автономных сред
  2. для развертывания, чтобы создать автономные среды

в первом случае необходимо сначала активировать virtualenv с исходным кодом venv / bin / activate, так как при развертывании необходимо убедиться, что 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

У меня есть простое решение этой

просто запустите manage.py из python в bin вашей виртуальной среды.

Итак, скажем, ваш python здесь /home / tom / environments/my_env/bin / python вы можете запустить manage.py вот так:

/ home / tom / окружающая среда / my_env/bin / python manage.py syncdb

затем просто создайте символическую ссылку на python виртуальной среды внутри вашего проекта django и назовите его env_python, тогда вы можете сделать это:

./ env_python manage.py syncdb