開発マシンでインポーターリアを強制する方法は? (PWDモジュール)
-
20-09-2019 - |
質問
Google App EngineでサードパーティLib(Docutils)を使用しようとしています。このコード(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
他のヒント
テストフレームワークでは、Docutilをインポートする前に、このセットアップタスクを実行できます。
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__
, 、そして、その名前をそのような操作に独自のコードを使用させるためにその名前を再割り当てすることができます(インポートフックなどの代替は、非ファイルシステムソースからのインポートを実行するなどの目的でより優れていますが、あなたのような目的のために、オーバーライド __builtin__.__import__
, 、上記のように、本当に簡単なコードを提供します)。
所属していません StackOverflow