28
我见过几种通过首先导入模块来找到模块路径的方法。有没有办法做到这一点,而无需导入模块?在不用Python导入的情况下查找模块的路径
我见过几种通过首先导入模块来找到模块路径的方法。有没有办法做到这一点,而无需导入模块?在不用Python导入的情况下查找模块的路径
使用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')
你可能想尝试在你的解释运行以下命令:
>>> import sys
>>> sys.modules['codecs'].__file__ # codecs is just an example
'/usr/lib/python2.7/codecs.pyc'
为什么?你为什么不想导入它? – user225312 2011-01-14 16:53:33
因为导入在需要路径的程序中没有用处,并且可能导致循环依赖和其他问题。导入发生在稍后的更合适的时间。 – jeffcook2150 2011-01-14 17:00:25
此外,您可能只想查看源代码,而无需在模块中实际运行任何代码。 – 2017-02-27 20:45:44