Hallo zusammen,
ich habe ein triviales Problem, finde aber einfach keine Lösung. Ich möchte in einem Projekt eine Applikation anwenden, die außerhalb des Projektordners angelegt ist. Die Applikation befindet sich auf dem Pythonpath und lässt sich in einer python-Konsole problemlos importieren.
In meiner projekt/settings.py-Datei gebe ich den Application-Namen in INSTALLED_APPS an. Wenn ich aber den Testserver starte bekomme ich stets die Fehlermeldung: no module named "myapp".
Ich habe schon den halben Tag damit verbracht nach einer Lösung zu suchen, aber nichts gefunden. Kann mir bitte, bitte jemand helfen? Das wäre sehr nett!
beste Grüße,
thomst
django: ausgelagerte Applikation lässt sich nicht einbinden
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Kannst du das Modul in der `settings.py` importieren? (Also nicht via INSTALLED_APPS sondern wie in anderem Pythoncode auch)
Hi Dauerbaustelle,
danke für deine Antwort. Innerhalb der settings-Datei lässt sich die Applikation ebenfalls nicht importieren:
Das Problem lässt sich mit einem Symlink lösen. Dennoch frage ich mich warum sich die Applikation nicht über den Pythonpath importiert werden kann. Wenn ich es richtig verstanden habe, müsste das doch die gängige Praxis sein, oder nicht?
danke für deine Antwort. Innerhalb der settings-Datei lässt sich die Applikation ebenfalls nicht importieren:
Code: Alles auswählen
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Dazu müsste man mal deinen Pythonpath kennen und wo das Projekt und die Anwendungen liegen.
Hi,
also: ich habe einen Ordner namens "django" in meinem Homeverzeichnis, und einen Unterordner namens "applications". Das Projekt selbst liegt in einem weiteren Ordner meines Homeverzeichnisses.
Die Datei ".bashrc" habe ich um folgenden Eintrag erweitert:
Eine Pythonkonsole gibt mir folgendes aus für sys.path:
Und wie gesagt lässt sich die Applikation anstandslos importieren.
Was mir jetzt dazu einfällt: Die .bashrc-Datei befindet sich in meinem Homeverzeichnis. Also werden alle dortigen Konfigurationen wohl auch nur in diesem Benutzerspezifischem Kontext wirksam, vermute ich. Muss ich also die Variable PYTHONPATH eventuell an anderer Stelle exportieren?
edit: Anders gefragt: in welchem Kontext startet der testserver von django den Pythoninterpreter?
also: ich habe einen Ordner namens "django" in meinem Homeverzeichnis, und einen Unterordner namens "applications". Das Projekt selbst liegt in einem weiteren Ordner meines Homeverzeichnisses.
Die Datei ".bashrc" habe ich um folgenden Eintrag erweitert:
Code: Alles auswählen
export PYTHONPATH='/home/thomas/django/applications'
Code: Alles auswählen
>>> import sys
>>> sys.path
['', '/home/thomas/django/applications', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/pymodules/python2.6/gtk-2.0']
>>>
Was mir jetzt dazu einfällt: Die .bashrc-Datei befindet sich in meinem Homeverzeichnis. Also werden alle dortigen Konfigurationen wohl auch nur in diesem Benutzerspezifischem Kontext wirksam, vermute ich. Muss ich also die Variable PYTHONPATH eventuell an anderer Stelle exportieren?
edit: Anders gefragt: in welchem Kontext startet der testserver von django den Pythoninterpreter?
ok. Ich habe ein kleines Startscript für den testserver, das zu allererst PYTHONPATH modifiziert und exportiert und anschließend den testserver startet. Auf diese Weise funktionierts.
Nur noch eine Frage: Um die Umgebungs-Variable systemweit anzupassen eignet sich die Datei /etc/enviroment ? Dort wird bei mir die PATH-Variable definiert. Kann ich dort gleichfalls die PYTHONPATH-Variable definieren? Und ist sie dann gleich wer sich wie beim System anmeldet verfügbar?
Vielen Dank jedenfalls schon mal.
Nur noch eine Frage: Um die Umgebungs-Variable systemweit anzupassen eignet sich die Datei /etc/enviroment ? Dort wird bei mir die PATH-Variable definiert. Kann ich dort gleichfalls die PYTHONPATH-Variable definieren? Und ist sie dann gleich wer sich wie beim System anmeldet verfügbar?
Vielen Dank jedenfalls schon mal.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Öh wenn du den Server aus einer Bash heraus startest hat er ja das Bash-Environment. Vergleich' doch mal den Syspath in settings.py mit dem in einer interaktiven Konsole. (bzw in der Python-Konsole und in der Django-Python-Konsole)
Ich wuerde das nicht so machen. Du kannst auch ein python-wrapper-skript schreiben, welches sys.path entsprechend modifiziert.thomst hat geschrieben:ok. Ich habe ein kleines Startscript für den testserver, das zu allererst PYTHONPATH modifiziert und exportiert und anschließend den testserver startet. Auf diese Weise funktionierts.
Nur noch eine Frage: Um die Umgebungs-Variable systemweit anzupassen eignet sich die Datei /etc/enviroment ? Dort wird bei mir die PATH-Variable definiert. Kann ich dort gleichfalls die PYTHONPATH-Variable definieren? Und ist sie dann gleich wer sich wie beim System anmeldet verfügbar?
Vielen Dank jedenfalls schon mal.
Denn eine globale Umgebungsvariable ist immer eine schlechte Idee - was machst du, wenn du einen andern Pfad fuer ein anderes Projekt brauchst?
Also ich habe zwei Fälle untersucht: Ich hatte auf meinem Ubuntu-System einen Anwendungsstarter für jedes Django-Projekt angelegt. Dieser ruft ein kleines Startskript auf, das zunächst in den Projektordner wechselt und dann den testserver startet über das manage.py-Modul. Dieser Anwendungsstarter startet den Testserver in einem Terminal. Tatsächlich scheint in diesem Terminal die .bashrc-Konfigurationen nicht wirksam zu werden. Denn wenn ich den Sys.path in meiner Settingsdatei auslese, bleibt mein Pythonpath von den Angaben der .bashrc unberührt.Dauerbaustelle hat geschrieben:Öh wenn du den Server aus einer Bash heraus startest hat er ja das Bash-Environment. Vergleich' doch mal den Syspath in settings.py mit dem in einer interaktiven Konsole. (bzw in der Python-Konsole und in der Django-Python-Konsole)
Wenn ich allerdings den Testserver in einem Terminal starte (ohne zwischen gelagertes Startskript) habe ich die .bashrc-Konfigurationen drin.
Da ich ohnehin für jedes Projekt ein Startskript anlege (denn jedes Projekt hat einen anderen Projektordner und nutzt den Testserver auf einem anderen Port), scheint es mir ziemlich unproblematisch in dem jeweiligen Startskript noch eine modifizierten Pythonpath zu exportieren.deets hat geschrieben: Ich wuerde das nicht so machen. Du kannst auch ein python-wrapper-skript schreiben, welches sys.path entsprechend modifiziert.
Denn eine globale Umgebungsvariable ist immer eine schlechte Idee - was machst du, wenn du einen andern Pfad fuer ein anderes Projekt brauchst?
Etwas anderes ist es allerdings wenn ich das Projekt über meinen Apacheserver laufen lasse. Aber in dem Fall müsste ich in der jeweiligen django.wsgi-Datei den sys.path direkt erweitern können.
Ersteres ist natuerlich auch ok, aber dein voriger Post hoerte sich so an, als ob du global fuer alle User PYTHONPATH setzen willst.thomst hat geschrieben: Da ich ohnehin für jedes Projekt ein Startskript anlege (denn jedes Projekt hat einen anderen Projektordner und nutzt den Testserver auf einem anderen Port), scheint es mir ziemlich unproblematisch in dem jeweiligen Startskript noch eine modifizierten Pythonpath zu exportieren.
Etwas anderes ist es allerdings wenn ich das Projekt über meinen Apacheserver laufen lasse. Aber in dem Fall müsste ich in der jeweiligen django.wsgi-Datei den sys.path direkt erweitern können.
Und zweiteres ist ja genau das, was ich vorschlug.
Du hast natürlich recht. Ich musste mir zunächst noch mal vergegenwärtigen, wie denn der Apache-server auf mein django-Projekt zugreift. Und dabei ist mir erst klar geworden, dass ich den sys.path direkt in der django.wsgi-Datei anpassen kann.deets hat geschrieben:Und zweiteres ist ja genau das, was ich vorschlug.
edit: allerdings würde ich auch gerne allgemein wissen, wo ich denn am sinnvollsten die PYTHONPATH-Variable systemweit anpasse/definiere. Ist dafür /etc/enviroment der richtige Ort?
Du solltest es nicht tun, das habe ich ja schon vorher erwaehnt. Denn es produziert schwer zu verstehendes Verhalten fuer die Benutzer des Systems.
- daemonTutorials
- User
- Beiträge: 171
- Registriert: Sonntag 6. Februar 2011, 12:06
- Kontaktdaten:
Ich würde Django neu herunterladen und es per "python2 setup.py install" installieren.
Danach die Tutorial-Schritte zum erstellen eines Projektes und einer App nachvollziehen.
Wie heißt der Ordner wo die App drinliegt (hoffentlich doch myapp!) wenn nicht solltest du den Ordnernamen verwenden.
Poste einfach mal deine Settings.py per Pastebin und eine Auflistung des Verzeichnisbaums deines Projekt-Ordners.
Danke,
Maik
Danach die Tutorial-Schritte zum erstellen eines Projektes und einer App nachvollziehen.
Wie heißt der Ordner wo die App drinliegt (hoffentlich doch myapp!) wenn nicht solltest du den Ordnernamen verwenden.
Poste einfach mal deine Settings.py per Pastebin und eine Auflistung des Verzeichnisbaums deines Projekt-Ordners.
Danke,
Maik
LG Maik