Question

Mon problème est d'obtenir manage.py syncdb pour fonctionner dans un virtualenv.

Il fonctionnait très bien à un moment donné, mais semble avoir cassé quelque temps autour lorsque j'ai installé du Sud et pip mis à jour et distribuer.

Quoi qu'il en soit, lorsque le virtualenv est activé, je peux importer des applications bien au sein de l'interpréteur interactif. Traversant mod_wsgi, les applications sont importées aussi bien, et le site peut fonctionner.

Quand je lance syncdb manage.py, il ne parvient pas à trouver une application dans INSTALLED_APPS qui est dans mon virtualenv. Il ramasse des applications installées système fine, mais échoue lorsqu'il tente d'importer virtualenv uniquement les applications.

Était-ce utile?

La solution

Salut Ceci est une vieille question, mais a vu son pas de réponse. Je ne sais pas ce que vous essayez de faire, mais il y a deux modes, vous pouvez utiliser virtualenv,

  1. Pour le développement, pour créer des environnements AUTONOME
  2. Pour le déploiement, pour créer des environnements AUTONOME

Dans le premier cas, vous devez d'abord activer votre virtualenv avec la source venv / bin / activate, lorsque vous déployez, vous devez vous assurer que le virtualenv est activé pour votre code de site. Personnellement, je préfère l'approche suivante pour assurer votre chemin est correctement réglé. (J'ajouter aussi à mon manage.py lorsque vous faites du développement, donc je n'ai pas à vous soucier de l'activation du premier environnement.

modifié 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)

Cela fonctionne, en raison de la façon dont je structure mes projets, vous devez changer à la structure de votre répertoire. Mes projets sont structurés comme ceci:

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

Autres conseils

J'ai une solution simple à ce

Il suffit de lancer manage.py du python dans le bac de votre environnement virtuel.

Alors supposons que votre python est ici / home / tom / environnement / my_env / bin / python, vous pouvez lancer manage.py comme ceci:

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

alors il suffit de créer un lien symbolique vers le python environnement virtuel dans votre projet django et appelez-env_python vous pouvez faire ceci:

./ env_python manage.py syncdb

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top