Pregunta

Mi problema está en conseguir syncdb manage.py para funcionar dentro de un virtualenv.

Se estaba trabajando bien en un momento dado, pero parece haberse roto en algún momento alrededor cuando he instalado Sur y pip actualizada y distribuir.

De todas formas, cuando se activa el virtualenv, que puede importar aplicaciones multa dentro del intérprete interactivo. Corriendo a través de mod_wsgi, las aplicaciones se importan también, y el sitio se pueden ejecutar.

Cuando corro syncdb manage.py, no encuentra ninguna aplicación en INSTALLED_APPS que está en mi virtualenv. Se recoge sistema instalado aplicaciones bien, pero falla cuando intenta importar virtualenv única de aplicaciones.

¿Fue útil?

Solución

Hola Esta es una vieja pregunta, pero vio que no es contestada. No está seguro de lo que está tratando de hacer, pero hay básicamente dos modos que puede utilizar virtualenv,

  1. Para el desarrollo, para crear auto-contenidas entornos
  2. Para la implementación, para crear auto-contenidas entornos

En el primer caso, es necesario activar primero el virtualenv con Venv fuente / bin / desactivar, para cuando se implementa, es necesario asegurarse de que el virtualenv se activa para su código del sitio web. Personalmente prefiero el siguiente enfoque para asegurar su ruta esté ajustada correctamente. (También añadir esto a mi manage.py cuando se hace el desarrollo, por lo que no tiene que preocuparse acerca de la activación del medio ambiente en primer lugar.

manage.py Modificado

#!/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)

esto funciona, debido a la forma en estructuro mis proyectos, que tendrían que cambiar a la estructura de directorios. Mis proyectos están estructurados de esta manera:

TopLevelDir
|
|- Project DIR
|- venv
|- requirements 
|- deployment configs

Otros consejos

tengo una solución simple a este

Sólo lanzamiento manage.py del pitón en el bin de su entorno virtual.

Así dice tu pitón está aquí / home / tom / ambientes / my_env / bin / python que podría lanzar manage.py este modo:

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

A continuación, basta con crear un enlace simbólico al pitón del entorno virtual dentro de su proyecto de Django y lo llaman env_python entonces usted puede hacer esto:

./ env_python manage.py syncdb

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top