Django не находит приложения в VirtualenV при использовании Manage.py SyncDB

StackOverflow https://stackoverflow.com/questions/3560225

Вопрос

Моя проблема в том, чтобы получить Manage.py SyncDB для пробега в VirtualenV.

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

В любом случае, когда активирован VirtualenV, я могу импортировать приложения Fine в интерактивном интерпретатере. Бег через Mod_wsgi, приложения также импортируются, и сайт может работать.

Когда я запускаю Manage.py SyncDB, он не удается найти любое приложение в установленных_apps, которое находится в моем виртуалене. Он отлично поднимает установленные системы приложений, но не удается, когда он пытается импортировать только приложения для VirtualenV.

Это было полезно?

Решение

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

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

В первом случае вам необходимо сначала активировать ваш VirtualenV с помощью Source 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 в корзине вашей виртуальной среды.

Так сказать, что ваш Python здесь / Home / Tom / Current / My_env / Bin / Python Вы можете запустить manage.py, как так:

/ Главная / Том / Среда / my_env / bin / python manage.py syncdb

Тогда просто создайте Symlink на Python виртуальной среды внутри вашего проекта Django и позвоните ему Env_Python, тогда вы можете сделать это:

./env_python manage.py syncdb.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top