Django не находит приложения в virtualenv при использовании manage.py syncdb - PullRequest
6 голосов
/ 24 августа 2010

Моя проблема в том, чтобы manage.py syncdb работал в virtualenv.

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

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

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

Ответы [ 2 ]

5 голосов
/ 08 декабря 2010

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

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

В первом случае вам сначала нужно активировать virtualenv с помощью источника venv / bin / activ, поскольку при развертывании необходимо убедиться, что 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 голосов
/ 18 января 2011

У меня есть простое решение для этого

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

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

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

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

. / env_python manage.py syncdb

...