2014-07-10 4 views
1

J'ai Django 1.4.5 sur mon serveur et un projet en cours.Django runserver sous virtualenv en utilisant la mauvaise version

Je l'ai utilisé virtualenv pour créer une instance et installé Django 1.6.5 à l'intérieur (pip install Django==1.6.5).

Si je lance simplement:

python manage.py runserver 

Tout fonctionne très bien et il commence un serveur en utilisant Django 1.6.5 Mais j'ai un fichier appelé run_devenv.py, qui commence fondamentalement tout mon projet en utilisant des sous-processus. Il démarre le serveur comme ceci:

def run_devenv(): 
    processes = [ 
    ... 
    ('webserver', subprocess.Popen([PYTHON, 'manage.py', 'runserver', '0.0.0.0:%d' % HTTP_PORT, '--settings', os.environ['DJANGO_SETTINGS_MODULE']])), 
    ... 
    ] 

if __name__ == '__main__': 
    if not os.access(settings.DEVENV_DIR, os.F_OK): 
     setup_devenv() 
    else: 
     run_devenv() 

Et pour une raison quelconque, il utilise Django 1.4.5 au lieu de 1.6.5.

On dirait qu'il utilise 1.4.5 installé dans le système et omet l'instance virtualenv avec 1.6.5.

Quelqu'un peut-il aider avec ceci?

EDIT> Solution: Mon problème était cette chaîne (je ne le montre pas):

PYTHON = "/usr/bin/python" 

Il devrait ressembler à ceci:

PYTHON = "path_to_your_virtualenv/bin/python" 
+0

Est-il possible de spécifier un chemin vers la version de Django que vous voulez exécuter? – Deepend

+0

En ce moment je cherche comment utiliser une valeur unifiée, donc je ne code pas le nom de virtualenv, cherchant smth comme 'sys.argv [0]' ou '/ usr/bin/env python' – Oleg

Répondre

1

Vous devez appeler le binaire python dans votre virtualenv au lieu de votre système. De votre code, il semble que PYTHON est une variable pointant vers votre binaire python? Si oui, vous devriez juste avoir à le changer comme ceci:

PYTHON = "/path/to/your/virtualenv/bin/python" 
+0

Oui , c'était la raison. Merci beaucoup! – Oleg

0

Je suppose que votre script run_devenv.py est exécutable et a une déclaration comme #!/bin/python en haut. Vous pouvez modifier la version Python exécute le script ou activer votre virtualenv dans le script:

activate_this = '/path/to/env/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 
+0

Oui, c'est la raison. Merci pour l'aide! – Oleg

0

le chemin python est le problème

si vous êtes en utilisant linux/osx la commande suivante devrait fonctionner, en supposant » a activé le virtualenv

sudo /path/to/bin/python manage.py runserver