2014-02-05 192 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 

所以不要打扰!只需导入。