Frage

Mein Problem ist, in immer manage.py syncdb innerhalb eines virtualenv auszuführen.

Es wurde an einer Stelle arbeitet gut, scheint aber irgendwann um gebrochen zu haben, als ich Süden installiert und pip aktualisiert und verteilt werden.

Wie auch immer, wenn die virtualenv aktiviert ist, kann ich apps fein innerhalb des interaktiven Interpreter importieren. Laufen durch mod_wsgi werden die Anwendungen als auch importiert, und die Website ausgeführt werden kann.

Wenn ich manage.py syncdb ausführen, schlägt es jede App in INSTALLED_APPS zu finden, die in meinem virtualenv ist. Es nimmt System installierten Anwendungen in Ordnung, aber schlägt fehl, wenn es versucht, nur zu importieren virtualenv apps.

War es hilfreich?

Lösung

Hallo Dies ist eine alte Frage, sah aber seine nicht beantwortet. Nicht sicher, was Sie zu tun versuchen, aber es gibt im Grunde zwei Modi können Sie verwenden virtualenv,

  1. Für die Entwicklung zu schaffen, in sich geschlossene Umgebungen
  2. Für den Einsatz zu schaffen, in sich geschlossene Umgebungen

Im ersten Fall müssen Sie aktivieren Ihre virtualenv zuerst mit Quelle Venv / bin / activate, denn wenn Sie bereitstellen, müssen Sie sicherstellen, dass die virtualenv für Ihre Website-Code aktiviert ist. Persönlich bevorzuge ich den folgenden Ansatz Ihren Weg, um sicherzustellen, richtig eingestellt ist. (Ich füge dies auch für meine manage.py beim Ausführen einer Entwicklung, so dass ich zuerst Sorge um die Aktivierung der Umwelt nicht haben.

Modifizierte 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)

Das funktioniert, darauf zurückzuführen, wie ich meine Projekte strukturieren, würden Sie es zu Ihrem Verzeichnisstruktur ändern müssen. Meine Projekte sind wie so strukturiert:

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

Andere Tipps

Ich habe eine einfache Lösung für dieses

Starten Sie einfach manage.py aus dem Python in dem Papierkorb Ihrer virtuellen Umgebung.

sagen also Ihre Python ist hier / home / tom / Umgebungen / meine_umgeb / bin / python Sie manage.py wie so starten können:

/ home / tom / Umgebungen / meine_umgeb / bin / python manage.py syncdb

dann erstellen Sie einfach einen symbolischen Link auf die Python virtuellen Umgebung in Ihrem django Projekt und nennen es env_python dann können Sie dies tun:

./ env_python manage.py syncdb

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top