Domanda

Il mio problema è nell'ottenere syncdb manage.py per eseguire all'interno di un virtualenv.

E 'stato lavorando bene ad un certo punto, ma sembra aver rotto qualche tempo in giro quando ho installato Sud e pip aggiornato e distribuire.

In ogni modo, quando è attivata la virtualenv, posso importare le applicazioni bene entro l'interprete interattivo. Scorrendo mod_wsgi, le applicazioni vengono importati come bene, e il sito può essere eseguito.

Quando eseguo syncdb manage.py, non riesce a trovare qualsiasi applicazione in INSTALLED_APPS che è nel mio virtualenv. Raccoglie sistema-installato applicazioni bene, ma non riesce quando tenta di importare virtualenv solo applicazioni.

È stato utile?

Soluzione

Ciao Questa è una vecchia questione, ma ha visto la sua non ha risposto. Non sei sicuro di quello che si sta tentando di fare, ma ci sono fondamentalmente due modi si può usare virtualenv,

  1. Per lo sviluppo, per creare self-contained ambienti
  2. Per la distribuzione, per creare self-contained ambienti

Nel primo caso, è necessario attivare prima il vostro virtualenv con fonte venv / bin / activate, per quando si distribuisce, è necessario assicurarsi che il virtualenv è attivato per il codice del sito web. Personalmente preferisco il seguente approccio per garantire il vostro percorso sia impostato correttamente. (Ho anche aggiungere questo al mio manage.py quando si fa lo sviluppo, così io non devi preoccuparti per l'attivazione del primo ambiente.

manage.py Modified

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

Questo funziona, a causa di come I Struttura miei progetti, si dovrebbe cambiare per la struttura di directory. I miei progetti sono strutturati in questo modo:

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

Altri suggerimenti

Ho una semplice soluzione a questo

Just lancio manage.py dal pitone nel bidone del vostro ambiente virtuale.

Quindi, dire la vostra pitone è qui / home / tom / ambienti / my_env / bin / python si potrebbe lanciare manage.py in questo modo:

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

poi basta creare un link simbolico pitone del ambiente virtuale all'interno del vostro progetto di Django e lo chiamano env_python allora si può fare questo:

./ env_python manage.py syncdb

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top