web-dev-qa-db-ja.com

1つのpythonモジュールがインポートされたかどうかをテストする方法?

モジュールがPythonにインポートされているかどうかをテストするにはどうすればよいですか?

たとえば、基本が必要です:

if not has_imported("sys"):
   import sys

また

if not has_imported("sys.path"): 
   from sys import path

ありがとう!

Rgs。

コメントをありがとう。ここにコードを貼り付けた。 フォルダ内のすべてのサブモジュールを自動インポートしてから同じ名前の関数を呼び出します-python runtime inspect related

44
user478514

2回インポートしないことで最適化する場合は、Pythonがすでにこれを処理しているため、手間を省きます。

need thisを避けるためにNameErrorsまたは何かを回避する場合:ずさんなコーディングを修正します-これを必要としないことを確認してください。インポートの場合:1回、起動時、モジュールレベルで)。

正当な理由がある場合:sys.modulesは、すでにどこかにインポートされているすべてのモジュールを含む辞書です。ただし、モジュールのみが含まれており、from <module> import <variable>の動作方法により(通常どおりモジュール全体をインポートし、そこからインポートするものを抽出します)、from sys import pathsyssys.modulesに追加するだけです(まだインポートされていない場合)始めるとき)。 from pkg import moduleは、おそらく期待どおりpkg.moduleを追加します。

50
user395760

受け入れられた答えは完全に正しいとは思いません。

Pythonには、同じモジュールを複数回インポートするときのオーバーヘッドがまだあります。 Pythonエラーを出さずにそれを処理します、確かに、それは遅くならないという意味ではありません以下のURLからわかるように、モジュールを複数回インポートする場合、significantオーバーヘッドがあります。

たとえば、特定の条件以外で特定のモジュールが必要ない場合、そのモジュールが大きいか、オーバーヘッドが大きい場合は、条件に応じてのみインポートする理由があります。それは、あなたがずさんなコーダーであることを明示的に意味するものでもありません。

https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead

14
John
from sys import modules
try:
    module = modules[module_name]
except KeyError:
    __import__('m')   

これは、実行時にコードを変更する私のソリューションです!

8
Jack Gao