Kann man Python Importe rückgängig machen?
Die brauchen ja unnötig Speicher wenn die immer geladen sind, kann man die auch nur kurz importieren und nach Ausführung wieder löschen? Falls ja wke geht das?
2 Antworten
Du könntest den Import (und den zugehörigen Code) einfach innerhalb einer Funktion schreiben. Sobald dann rausgesprungen wird ist die Library quasi wieder entfernt.
def do_something_with_random():
import random
print("do something interesting with random", random.choice([0, 1]))
print("perform task that don't need random")
do_something_with_random()
print("function call uses random, but doesn't add it to your globals")
print("continue performing tasks that don't need random")
https://stackoverflow.com/questions/50711405/undo-import-math-in-python
True, ganz gelöscht ist sie dann normal nicht, nur du hast halt keinen Zugriff drauf. My bad.
Versuchs mal mit
del sys.modules["moduleName"]
del moduleName
Das sollte das Modul komplett löschen.
was ist mit del library? ich hab das nichr ganz verstanden, das würde anscheinend auch nicht wirklich gelöscht werden.
da stand dass das nur falsche Sicherheit bringt
Jo, ist nicht zu empfehlen. Genausowenig wie man eine Library aus Speichergründen wieder entfernen sollte. Da kannste gleich in C programmieren, wenn das bisschen Speicher so wichtig is. Einen import zu entfernen ist in Python nicht supportet, und kann nur über solche unsicheren und umständlichen Wege gemacht werden. Wobei ich auch glaube, dass bei del nur die Referenz entfernt wird, und nicht der ganze import, aber not sure.
aber c++ kann man importe ganz entfernen oder? weil das sei ja ziemlich effizient(gamedevelopement etc)
Hab noch nie mit C++ gearbeitet, also kann ich da jz nich viel dazu sagen. Aber ob das bei GameDevelopment soviel bringt... Hmmm. Hab noch nie davon gehört, dass man includes/imports für Performance wieder entfernen würde. Aber who knows. Da bin ich mit meinem Latein relativ am Ende, sorry :D
Die GC wirds dann wohl richten, so könnte man hoffen. Ließe sich notfalls ja nachvollziehen.
Jein, es gibt in C++ keien Importe. Du bindest die Schnittstellenbeschreibugn ein und als Konsequenz wird die Bibliothek gelinkt (statisch/dynamisch). Bei Ausführung wird dann im dynamischen Fall vom Linker die Bibliothek geladen udn gebunden.
Daran ändert sich normalerweise nichts, bis zur Beendigung des Prozesses.
----
Arbeite ich mit Runtime-Linkage, dann kann ich DSOs auch wieder unlinken, aber dabei sollte ich verdammt genau wissen was ich mache, denn referenziere ich irgendwo noch den Code oder Daten aus der Lib, grüßt der Segfault.
Dann einfach die import-Zeile entfernen. Der Code wird jedesmal beim Build eh neu kompiliert.
ja aber ich will dass Python ein Modul nutzt und ohne das Programm umtuschreiben dieses Modul wieder löscht
wird die Library dann nicht als definierte Funktion gespeichert?