Toon posts:

[Python] Import vraagje

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Wat ik graag zou willen bereiken:

'addons' is een subdirectory met een __init__.py bestand erin.
'test.py' is een module die in de addons directory staat

Ik zou graag later in mijn pythonscript dit bestand importeren, en dit op ongeveer de volgende manier willen doen;

add=__import__('addons.test')
Nu wijst add echter naar <module 'addons' from 'addons/__init__.py'>
En ik zou graag willen dat deze rechtstreeks naar de test.py module verwijst.


Ik heb de docs over __import__ doorgelezen maar kom er niet echt uit. Iemand enig idee?
Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
When the name variable is of the form package.module, normally, the top-level package (the name up till the first dot) is returned, not the module named by name. However, when a non-empty fromlist argument is given, the module named by name is returned.
Dit staat gewoon in de documentatie, compleet met voorbeelden.

Het makkelijkste is sys.modules['addons.test'] gebruiken na de __import__ zoals in het laatste voorbeeld.

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
wat wil je precies bereiken ?

code:
1
2
3
4
import sys
name = 'addons.test'
__import__(name);
print sys.modules[ name ];


lijkt te doen wat je wilt.

Acties:
  • 0 Henk 'm!

  • R3veNG
  • Registratie: Maart 2009
  • Laatst online: 03-05-2021

R3veNG

Undercover Belg

Je kan in __init__.py een __all__ - array zetten maar daarin (als strings) de namen van alle modules die je wil includen vanuit die addons-package..

Voor jou wordt dat dan:

in __init__.py : __all__ = { "test" }

waar je je import doet: from Addons import *

ps: import * is niet de zuivere methode, maar dit hierboven zou moeten werken in jouw geval.. Ik neem aan dat je iets in de trend van "at-runtime dynamisch een klasse (wiens naam je als string binnenkrijgt) wil instantiëren"?

CoC: MISSeR | Steam: r3veng


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de info, het is gelukt!

Ik heb het zo aangepakt zoals Tiemez adviseerde.
@r3veng: het is inderdaad mijn bedoeling om at-runtime een class the instantieren

Thx!