2014-02-05 167 views
1

所以,我正在爲一個類的項目工作,到目前爲止我有兩個文件。 Spark.py和main.py.在我的主文件我有:Python模塊檢查是否

import os 
import csv 

from Spark import * 

Spark.py需要os模塊然而,將其導入在main.py已經進口的,所以我不想再次導入。但我希望Spark檢查main.py是否導入了os,因此如果它沒有spark.py會導入它。

我試圖通過檢查是否導入os是否在globals().keys(),但是當我嘗試時,我意識到它不存在,因爲它不是在Spark.py中導入的,我環顧四周,無法找到什麼我正在尋找(主要是因爲我不知道要搜索什麼)。

Spark.py或導入的模塊是否有一種方法來檢查是否導入了另一個模塊?如Spark.py檢查main.py是否導入導入的文件os。

+5

* Spark.py需要導入os模塊*然後將其導入到'Spark.py'中。不要擔心其他模塊導入它,它只是對現有模塊的引用。 –

+0

如果'main'輸入'os','Spark.py'沒有區別。 –

+1

爲什麼你不想再導入它?冗餘導入只會產生對已加載模塊的引用。 – FatalError

回答

1

導入的所有模塊都緩存在sys.modules

In [1483]: 'os' in sys.modules 
Out[1483]: True 

所以import os在2個文件將不會導入os模塊的兩倍。

注意,它的模塊本身被緩存,而不是別名:

In [1484]: import os as oops 

In [1485]: 'oops' in sys.modules 
Out[1485]: False 
0

我不認爲這是值得這樣做。要檢查模塊是否已經導入,您需要在sys.modules中查找它。但它似乎比它更快地重新進入:

>>> %timeit import os 
1000000 loops, best of 3: 446 ns per loop 
>>> %timeit if 'os' in sys.modules: import os 
1000000 loops, best of 3: 547 ns per loop 

所以不要打擾!只需導入。