Предоставление доступа к виртуальному пакету, через sys.modules

d = { b'Name': b'John', b'age': b'43' }
d = { x.decode('ascii'): d.get(x).decode('ascii') for x in d.keys() }
11
задан miracle2k 15 December 2008 в 11:20
поделиться

3 ответа

Вам нужен к патчу обезьяны модуль не только в sys.modules, но также и в его родительский модуль:

>>> import sys,types,xml
>>> xml.config = sys.modules['xml.config'] = types.ModuleType('xml.config')
>>> import xml.config
>>> from xml import config
>>> from xml import config as x
>>> x
<module 'xml.config' (built-in)>
14
ответ дан 3 December 2019 в 07:14
поделиться

А также следующее:

import sys, types
config = types.ModuleType('config')
sys.modules['mylibrary.config'] = config

Также необходимо сделать:

import mylibrary
mylibrary.config = config
2
ответ дан 3 December 2019 в 07:14
поделиться

Можно попробовать что-то вроде этого:

class VirtualModule(object):
  def __init__(self, modname, subModules):
    try:
      import sys
      self._mod = __import__(modname)
      sys.modules[modname] = self
      __import__(modname)
      self._modname = modname
      self._subModules = subModules
    except ImportError, err:
      pass  # please signal error in some useful way :-)
  def __repr__(self):
    return "Virtual module for " + self._modname
  def __getattr__(self, attrname):
    if attrname in self._subModules.keys():
      import sys
      __import__(self._subModules[attrname])
      return sys.modules[self._subModules[attrname]]
    else:
      return self._mod.__dict__[attrname]


VirtualModule('mylibrary', {'config': 'actual_module_for_config'})

import mylibrary
mylibrary.config
mylibrary.some_function
1
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: