Kann man Python Importe rückgängig machen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Lqksv128181 
Beitragsersteller
 15.08.2020, 22:22

wird die Library dann nicht als definierte Funktion gespeichert?

MrAmazing2  15.08.2020, 22:23
@Lqksv128181

True, ganz gelöscht ist sie dann normal nicht, nur du hast halt keinen Zugriff drauf. My bad.

MrAmazing2  15.08.2020, 22:25
@Lqksv128181

Versuchs mal mit

del sys.modules["moduleName"]
del moduleName

Das sollte das Modul komplett löschen.

Lqksv128181 
Beitragsersteller
 15.08.2020, 22:26
@MrAmazing2

was ist mit del library? ich hab das nichr ganz verstanden, das würde anscheinend auch nicht wirklich gelöscht werden.

MrAmazing2  15.08.2020, 22:28
@Lqksv128181

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.

Lqksv128181 
Beitragsersteller
 15.08.2020, 22:29
@MrAmazing2

aber c++ kann man importe ganz entfernen oder? weil das sei ja ziemlich effizient(gamedevelopement etc)

MrAmazing2  15.08.2020, 22:34
@Lqksv128181

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

KarlRanseierIII  15.08.2020, 23:19
@MrAmazing2

Die GC wirds dann wohl richten, so könnte man hoffen. Ließe sich notfalls ja nachvollziehen.

KarlRanseierIII  15.08.2020, 23:23
@Lqksv128181

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.


Lqksv128181 
Beitragsersteller
 15.08.2020, 22:16

ja aber ich will dass Python ein Modul nutzt und ohne das Programm umtuschreiben dieses Modul wieder löscht