2011-01-14 68 views
28

我见过几种通过首先导入模块来找到模块​​路径的方法。有没有办法做到这一点,而无需导入模块?在不用Python导入的情况下查找模块的路径

+0

为什么?你为什么不想导入它? – user225312 2011-01-14 16:53:33

+4

因为导入在需要路径的程序中没有用处,并且可能导致循环依赖和其他问题。导入发生在稍后的更合适的时间。 – jeffcook2150 2011-01-14 17:00:25

+0

此外,您可能只想查看源代码,而无需在模块中实际运行任何代码。 – 2017-02-27 20:45:44

回答

48

使用pkgutil模块:

>>> import pkgutil 
>>> package = pkgutil.get_loader("pip") 
>>> package.filename 
'/usr/local/lib/python2.6/dist-packages/pip-0.7.1-py2.6.egg/pip' 
>>> package = pkgutil.get_loader("threading") 
>>> package.filename 
'/usr/lib/python2.6/threading.py' 
>>> package = pkgutil.get_loader("sqlalchemy.orm") 
>>> package.filename 
'/usr/lib/pymodules/python2.6/sqlalchemy/orm' 

使用imp模块:

>>> import imp 
>>> imp.find_module('sqlalchemy') 
(None, '/usr/lib/pymodules/python2.6/sqlalchemy', ('', '', 5)) 
>>> imp.find_module('pip') 
(None, '/usr/local/lib/python2.6/dist-packages/pip-0.7.1-py2.6.egg/pip', ('', '', 5)) 
>>> imp.find_module('threading') 
(<open file '/usr/lib/python2.6/threading.py', mode 'U' at 0x7fb708573db0>, '/usr/lib/python2.6/threading.py', ('.py', 'U', 1)) 

注:与小鬼模块你不能做点类似imp.find_module('sqlalchmy.orm')

2

你可能想尝试在你的解释运行以下命令:

>>> import sys 
>>> sys.modules['codecs'].__file__ # codecs is just an example 
'/usr/lib/python2.7/codecs.pyc' 
相关问题