Frage

Nun, ich möchte Web2Py verwenden, weil es ziemlich nett ist. Ich muss nur das Arbeitsverzeichnis in das Verzeichnis ändern, in dem alle meine Module/Bibliotheken/Apps sind, damit ich sie verwenden kann. Ich möchte in der Lage sein, mein echtes Programm zu importieren, wenn ich die Web2Py -Schnittstelle/-anwendungen verwende. Ich muss dies tun, anstatt alle meine Apps und Sachen in den Web2Py -Ordner zu stecken ... Ich versuche, meinem Programm ein Web -Frontend zu geben, ohne das Programm in den Web2Py -Ordner zu setzen. Tut mir leid, wenn dies schwer zu verstehen ist.

War es hilfreich?

Lösung

OS.Chdir Ermöglicht es Ihnen, das Arbeitsverzeichnis des Betriebssystems zu ändern, aber für Ihre Zwecke (die Importe einer Reihe von Modulen und C aktivieren, die darauf gezwungen sind, an einem seltsamen Ort zu leben), scheint es besser, die benötigten Verzeichnisse zu den erforderlichen Verzeichnissen hinzuzufügen sys.path stattdessen.

Andere Tipps

In jedem Python-Programm mit mehreren Threaddon (und nicht nur Python) sollten Sie OS.Chdir nicht verwenden und Sie sollten nicht den System ändern, wenn Sie mehr als einen Thread ausgeführt haben. Es ist nicht sicher, weil es andere Fäden betrifft. Darüber hinaus sollten Sie nicht sys.path.append () in einer Schleife, da es explodieren kann.

Alle Web-Frameworks werden mit mehreren Threads und Anfragen in einer Schleife ausgeführt. In einigen Web-Frameworks können Sie keine Anwendungen installieren/uninstallieren, ohne den Webserver neu zu starten. Wenn os.chdir/sys.path.Append nur beim Start ausgeführt wird, gibt es kein Problem.

In Web2Py möchten wir Anwendungen installieren/deinstallieren können, ohne den Webserver neu zu starten. Wir möchten, dass Apps sehr dynamisch sind (z. B. definieren Modelle basierend auf Informationen, die mit der HTTP -Anforderung bereitgestellt werden). Wir möchten, dass jede App ihren eigenen Modelsordner hat und eine vollständige Trennung zwischen den Apps, sodass zwei Apps verschiedene Versionen desselben Moduls benötigen, sie nicht miteinander in Konflikt stehen. Daher bieten wir APIs an (Anfrage.Folder , local_import).

Sie können immer noch das normale Betriebssystem für OS.Chdir und sys.path.Append verwenden, aber Sie sollten es außerhalb von Threads tun (und dies ist kein web2Py -spezifisches Problem). Sie können importieren, wo Sie möchten, wie Sie es in jedem anderen Python -Programm tun möchten.

Ich empfehle dringend, diese Diskussion in die Web2Py -Mailingliste zu verlegen.

Ich musste genau das tun. Ich habe einige Module, die ich von meinen Controllern verwenden wollte. Wenn Sie den Code verwenden möchten, der sich im Modulverzeichnis im Controller befindet, können Sie verwenden:

# use this in your controller code
impname = local_import('module_in_modules', reload=True)
# reload true  will ensure that it will re load whenever
# there are changes to the module

Jay

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