2010-12-20 1 views
2

他のパッケージにソフト依存関係があるパッケージがありますが、これはデフォルト(単純)実装にフォールバックしています。Pythonで特定のライブラリが見つからない状況をテストする方法

問題は、単体テストを使用してテストすることが非常に難しいことです。私は別々の仮想環境を設定することができましたが、それは管理するのが難しいです。

パッケージまたは以下を達成する方法はありますが:はImportErrorを発生させます

import X 

いつものように仕事が、

hide_package('X') 
import X 

を持っています。

これをテストするのが難しいため、コードのフォールバック部分にバグが残っています。

答えて

2

それは少し汚れて見えますが、あなたは__import__組み込み上書きすることができます:BTW

save_import = __builtin__.__import__ 
def my_import(name, *rest): 
    if name=="hidden": 
     raise ImportError, "Hidden package" 
    return save_import(name, *rest) 
__builtin__.__import__ = my_import 

を、あなたはPEP 302を読みましたか?インポートフックを使用してより堅牢なメカニズムを作成できるようです。

+0

これはテスト用であり、プロダクションコードではないので、Pythonの内部に触れることはOKです。ありがとう! – luispedro

2

特に、パッケージが異なるディレクトリ/ zipファイルにインストールされている場合(たとえば、卵を使用している場合)は、sys.pathを編集することです。インポートする前に、必要のないものをsys.pathから削除してください。

実現不可能な場合(すべてのコンポーネントが単一のsys.pathエントリに存在するため)、パッケージ自体を抑制することができます。例えば。 (SYSモジュールにパッチを適用した環境、または何か)グローバル変数のインポートあなたが失敗するパッケージリストがあります:

# X.py 
import sys 
if 'X' in sys.suppressed_packages: 
    raise ImportError, 'X is suppressed' 

sys.suppressed_packages=set() 
sys.suppressed_packages.add('X') 

その後に、各パッケージには、明示的にはImportErrorを上げますもちろん、sysモジュールを使用する代わりに、hide_package関数とともに、独自のインフラストラクチャを作成することができます。

関連する問題