Seite 1 von 1

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

Verfasst: Samstag 30. November 2019, 08:49
von 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?

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

Verfasst: Samstag 30. November 2019, 09:25
von nezzcarth
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.

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

Verfasst: Samstag 30. November 2019, 09:28
von 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.

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

Verfasst: Samstag 30. November 2019, 09:59
von __blackjack__
@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.

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

Verfasst: Samstag 30. November 2019, 10:20
von 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.

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

Verfasst: Samstag 30. November 2019, 10:22
von 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.

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

Verfasst: Samstag 30. November 2019, 10:57
von 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.
...

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

Verfasst: Samstag 30. November 2019, 11:06
von anonym44
Ich glaube es liegt daran, dass ich dem Modul irgend eine spec geben muss.