Speicherplatz beim import...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 18. August 2004, 18:20

Hi...

Ich suche nach einer Möglichkeit ein Python-Programm dynamisch mit Modulen zu erweitern und frage mich, wie ich das am besten bewerkstelligen kann...

Die Module, die mein Hauptprogramm bei bedarf erweitern, sind alle in einer einzelnen Python-Datei vorhanden. In jeder Modul-Datei stehen Informationen über das Modul drin. Diese brauche ich im Hauptprogramm...

Nun ist die einfachste Möglichkeit, alle Module zu importieren... Dann kann ich an die Modul-Informationen ran...

Nun wird aber bei jedem Start nur ein Modul wirklich benötigt...


Wenn ich nun die Module alle imporieren, obwohl ich bei jedem Start nur eins benötige, nimmt das nicht unnötig Speicherplatz weg?


Oder sollte ich besser ein from Modul import Info machen, um an die Modul-Informationen zu kommen und später, nur das benötigte Modul komplett importieren und "ausführen"???
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 18. August 2004, 18:46

Hi jens,

das bleibt sich gleich, ob du ein from import machst oder ein import, in jedem fall wird das Modul als ganzes importiert.
Mach dir eine Datei mit den Relevanten Daten der Module und importiere dann das ausgewählte Modul mit __import__ z.B.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 18. August 2004, 18:54

Wie jetzt...

Wenn ich z.B. ein from os import path mache, dann ist das das gleiche als wenn ich import os mache???

Ich bin davon ausgegangen, das bei from nur die anegegebene Klasse importiert wird...


Wie kann man eigentlich einen überblick über den verwendeten Speicher bekommen???


Deine Idee ist aber vielleicht auch nicht so schlecht, aber dann kann man nicht einfach ein Modul dazupacken, indem man es in das richtige Verzeichnis kopiert...
Dafür kann man natürlich in der ModulInfoDatei die entsprechenden Einträge auskommentieren.... Hmmmmm.....
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 18. August 2004, 19:24

bei form wird nur die Klasse/Funktion oder sonstiges in den Namensraum des importierenden Moduls kopiert, aber auch das ganze Modul geladen.
Einen Überblick über den Speicherverbrauch bekommst wohl nur mit einem externen Tool, das die den Speicherverbrauch anzeigt.

Du kannst dir ja auch ein Installscript machen, daß das Modul ins Plugins-Verzeichnis kopiert und einen entsprechenden Eintrag in die ModulInfoDatei macht. Du könntest die Infos auch in der Moduldatei als Kommentar besonders gekennzeichnet eintragen und beim Programmstart die Module in dem Pluginsverzeichnis nach entsprechenden Einträgen parsen ...


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 18. August 2004, 19:34

Die Idee ist auch nicht schlecht... Aber vielleicht ist es bisher auch noch nicht notwendig...

Aber so generell, gibt es eigentlich eine möglichkeit ein import eines Moduls, wenn der Name in einer Variablen steckt???

Also:

import <variable>

Natürlich mit eval("import "+<variable>) aber das ist unschön...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 18. August 2004, 20:03

Code: Alles auswählen

modul = __import__(name, globals(), locals(), [])
in name steht der Name des Moduls.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 18. August 2004, 20:58

Das verstehe ich jetzt nicht so ganz...

Ist das:

Code: Alles auswählen

ModulName="EinSuperModul"
__import__(ModulName)
gleich das:

Code: Alles auswählen

import EinSuperModul
:?:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 18. August 2004, 23:11

jo fasst, musst noch globals und locals angeben und eine (leere) liste.
siehe auch: http://www.python.org/doc/current/lib/b ... funcs.html


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Samstag 21. August 2004, 16:03

Dookie hat geschrieben:jo fasst, musst noch globals und locals angeben und eine (leere) liste.
siehe auch: http://www.python.org/doc/current/lib/b ... funcs.html


Gruß

Dookie
Hi. Das ist doch aber nicht zwingend, da die doch als Standart definiert sind, oder?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Samstag 21. August 2004, 17:52

stimmt, globals, locals und die Liste sind optional.

Dookie
[code]#!/usr/bin/env python
import this[/code]
Antworten