Как заставить импортеррору на машине разработки? (модуль PWD)

StackOverflow https://stackoverflow.com/questions/2258100

Вопрос

Я пытаюсь использовать стороннюю LIB (Docutils) в Google App Engine и у меня есть проблемы с этим кодом (в Docutils):

try:
    import pwd
    do stuff
except ImportError:
    do other stuff

Я хочу, чтобы импорт не удался, как и на фактическом сервере GAE, но проблема в том, что он не выйдет из строя в моем ящике для разработки (Ubuntu). Как сделать его неудачу, учитывая, что импорт не в моем собственном коде?

Это было полезно?

Решение

Даже проще, чем возиться с __import__ просто вставлен None В Sys.Modules DICT:

>>> import sys
>>> sys.modules['pwd'] = None
>>> import pwd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pwd

Другие советы

В вашей структуре тестирования, прежде чем вы заставите импортировать документы, вы можете выполнить эту задачу настройки:

import __builtin__
self.savimport = __builtin__.__import__
def myimport(name, *a):
  if name=='pwd': raise ImportError
  return self.savimport(name, *a)
__builtin__.__import__ = myimport

И, конечно же, в слезании внесло все нормы:

__builtin__.__import__ = self.savimport

Объяснение: Все импортные операции проходят __builtin__.__import__, и вы можете переназначить это имя, чтобы такие операции использовали свой собственный код (альтернативы, такие как импортные крючки, лучше для таких целей, как выполнение импорта из источников, не связанных с Filesystem, но для таких целей, как ваши, переопределите __builtin__.__import__, как вы видите выше, дает действительно простой код).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top