Wie schreibt man "exec .. in ..." in Python3

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
anonym44

Guten Morgen Freunde,

Ich bekomme diesen Quelllcode leide nicht mit Python3 zum laufen und exex ... in ... habe ich auch noch nie gesehen.

Code: Alles auswählen

modules = {"libpbatch" : """print("sourcecode of my module")"""}
fullname="libpbatch"
new_module = imp.new_module(fullname)
exec modules[fullname] in new_module.__dict__

Habt ihr da eine Idee?
nezzcarth
User
Beiträge: 1636
Registriert: Samstag 16. April 2011, 12:47

Amerika_befreie_uns hat geschrieben: Samstag 30. November 2019, 08:49 Ich bekomme diesen Quelllcode leide nicht mit Python3 zum laufen und exex ... in ... habe ich auch noch nie gesehen.
'exec' ist eine der regulären Builtin-Funktionen von Python und wird in der offiziellen Dokumentation erklärt (https://docs.python.org/3/library/functions.html#exec). Man braucht es zugegeben nicht so häufig, nach dem systematischen Lernen von Python sollte es aber zumindest vage bekannt sein. Jedenfalls: Das sieht merkwürdig aus und die Zeile, die 'exec' enthält, ist syntaktisch inkorrekt.
Zuletzt geändert von nezzcarth am Samstag 30. November 2019, 09:38, insgesamt 3-mal geändert.
anonym44

ich weiß was exec ist, allerdings nicht, wie man das 'in dict " in python3 übersetzt.
Ich habe exec(self._modules[fullname]) in new_module.__dict__ verwendet allerdings tritt ein Fehler auf, wenn ich das Metamodul laden möchte.
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Amerika_befreie_uns: Lies am besten auch die Dokumentation von der ``exec``-Anweisung in Python 2.7: https://docs.python.org/2.7/reference/s ... .html#exec

`imp.new_module()` sollte man auch nicht mehr verwenden. Die Funktion ist „deprecated“. Das ganze Modul ist eher nicht mehr zu empfehlen. Um Modulobjekte zu erstellen ist `types.ModuleType` da.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
anonym44

ich bin zwar jetzt ein Stück weiter, allerdings kann ich nur eine Library importieren:

```
modules = {"libpbatch" : """print("sourcecode of my module")""",
"config" : """print("sourcecode of my variables")""",
}
sys.meta_path.insert(0, StringImporter(modules))
```

ich kann jetzt libpbatch importieren, aber nicht config, sieht so aus als kann ich immer nur eine Modul im Programm aufrufen.
In 2.7 funktioniert es einwandfrei.
anonym44

__blackjack__ hat geschrieben: Samstag 30. November 2019, 09:59 @Amerika_befreie_uns: Lies am besten auch die Dokumentation von der ``exec``-Anweisung in Python 2.7: https://docs.python.org/2.7/reference/s ... .html#exec

`imp.new_module()` sollte man auch nicht mehr verwenden. Die Funktion ist „deprecated“. Das ganze Modul ist eher nicht mehr zu empfehlen. Um Modulobjekte zu erstellen ist `types.ModuleType` da.

Ja, habe ich schon längst gemacht. Leider funktioniert das Laden weiterer Module nicht mit Python3.
anonym44

Ich versuche ja eine Modul aus einem String zu erstellen.
Aber wie es aussieht funktioniert ruft Python3 _find_and_load anstatt von load_module.
...
anonym44

Ich glaube es liegt daran, dass ich dem Modul irgend eine spec geben muss.
Antworten